Pasukan dari Universiti Minnesota telah mendedahkan butiran tentang perubahan berniat jahat yang dihantar.

Berikutan surat permohonan maaf terbuka, sekumpulan penyelidik dari University of Minnesota, yang penerimaan perubahan pada kernel Linux telah disekat oleh Greg Croah-Hartman, mendedahkan maklumat terperinci tentang patch yang dihantar kepada pembangun kernel dan surat-menyurat dengan penyelenggara. berkaitan dengan patch ini.

Perlu diperhatikan bahawa semua patch bermasalah telah ditolak atas inisiatif penyelenggara; tiada satu patch pun diluluskan. Fakta ini menjelaskan dengan jelas mengapa Greg Croah-Hartman bertindak begitu keras, kerana tidak jelas apa yang akan dilakukan oleh penyelidik jika patch telah diluluskan oleh penyelenggara. Di belakang, mereka mendakwa bahawa mereka berhasrat untuk melaporkan pepijat dan tidak akan membenarkan patch pergi ke Git, tetapi tidak jelas apa yang sebenarnya mereka akan lakukan dan sejauh mana mereka mungkin pergi.

Jumlah pada Ogos 2020 daripada alamat tanpa nama [e-mel dilindungi] ΠΈ [e-mel dilindungi] (surat daripada James Bond) lima patch telah dihantar: dua betul (1, 2) dan tiga mengandungi ralat tersembunyi (1, 2, 3), mewujudkan keadaan untuk kelemahan. Setiap tampalan mengandungi hanya 1-4 baris kod. Idea utama di sebalik tampung yang salah ialah membetulkan kebocoran memori boleh mewujudkan keadaan kerentanan bebas berganda. Seminggu kemudian, maklumat telah dihantar kepada pembangun kernel dengan cadangan untuk membincangkan kemungkinan mempromosikan kelemahan di bawah samaran pembetulan remeh untuk kebocoran memori, tetapi tiada apa yang dikatakan tentang percubaan sebelumnya untuk menghantar patch berniat jahat.

Tampalan bermasalah pertama membetulkan kebocoran memori dengan menambahkan panggilan ke kfree() sebelum mengembalikan kawalan sekiranya berlaku ralat, tetapi mewujudkan keadaan untuk mengakses kawasan memori selepas ia dibebaskan (guna-selepas-bebas). Tampalan ini telah ditolak oleh penyelenggara (Jiri Slaby), yang mengenal pasti masalah dan menunjukkan bahawa setahun yang lalu seseorang telah cuba mencadangkan perubahan yang sama dan pada mulanya diterima, tetapi kemudian dibuang selepas mengenal pasti syarat untuk kelemahan itu. > p2 = p1[n] = susunan_kmalloc(64, saiz(u16), GFP_KERNEL); > - jika (!p2) kembalikan -ENOMEM; > + jika (!p2) { > + kfree(p1); > + kembali -ENOMEM; > + }

Tampalan kedua juga mengandungi syarat untuk masalah bebas penggunaan. Tampalan yang ditentukan tidak diterima oleh penyelenggara (Dan Carpenter), yang menolak tampung itu kerana masalah lain dengan list_add_tail, tetapi tidak menyedari bahawa penunjuk "chdev" boleh dibebaskan dalam fungsi put_device, yang digunakan di bawah dalam panggilan dev_err(&chdev ->dev..). Walau bagaimanapun, tampalan itu tidak diterima, walaupun atas sebab yang tidak berkaitan dengan kelemahan. if (ret < 0) { + put_device(&chdev->dev); dev_err(&chdev->dev, DRV_NAME ": kfifo_alloc failed\n"); ret = -ENOMEM; goto err_fifo;

Patch ketiga juga tidak diterima oleh penyelenggara (Miquel Raynal) kerana pepijat lain yang tidak berkaitan dengan kelemahan (panggilan dua kali untuk meletakkan pdev). jika (!window->virt) { printk(KERN_ERR MOD_NAME ": ioremap(%08lx, %08lx) failed\n", window->phys, window->size); + pci_dev_put(pdev); keluar; } ... jika (!peta) { printk(KERN_ERR MOD_NAME ": kmalloc failed"); + pci_dev_put(pdev); keluar; } memset(peta, 0, sizeof(*map)); ... if (mtd_device_register(map->mtd, NULL, 0)) { map_destroy(map->mtd); peta->mtd = NULL; + pci_dev_put(pdev); keluar; }

Menariknya, 4 daripada 5 patch pada mulanya diandaikan mempunyai masalah, tetapi penyelidik sendiri membuat kesilapan dan dalam satu patch yang mereka fikir bermasalah, pembetulan yang betul telah dicadangkan, tanpa syarat yang dijangkakan untuk penggunaan memori selepas berlaku percuma. err = pci_request_mem_regions(pdev, nitrox_driver_name); if (err) { pci_disable_device(pdev); + dev_err(&pdev->dev, β€œGagal meminta wilayah mem!\n”); kembali err; }

Sumber: opennet.ru

Tambah komen