Kerentanan kritikal dalam pelaksanaan fungsi memcpy untuk ARMv7 daripada Glibc

Penyelidik Keselamatan Cisco terbongkar butiran kelemahan (CVE-2020 6096-) dalam pelaksanaan fungsi memcpy() yang disediakan Glibc untuk platform ARMv32 7-bit. Masalahnya disebabkan oleh pengendalian nilai negatif parameter yang salah yang menentukan saiz kawasan yang disalin, disebabkan oleh penggunaan pengoptimuman pemasangan yang memanipulasi integer 32-bit yang ditandatangani. Memanggil memcpy() pada sistem ARMv7 dengan saiz negatif menyebabkan perbandingan nilai yang salah dan menulis di kawasan di luar sempadan penimbal yang ditentukan.

Kerentanan boleh dieksploitasi untuk melaksanakan kod dalam keadaan di mana penyerang boleh mengatur pembentukan nilai negatif pembolehubah yang melaluinya saiz data yang disalin dihantar (contohnya, ia akan menjadi negatif apabila memindahkan lebih daripada 2 GB data, tetapi semasa serangan, untuk melampaui had penimbal, anda perlu memindahkan sekurang-kurangnya 4GB). Fungsi memcpy() digunakan secara meluas dalam aplikasi, dan pemproses ARMv7 adalah biasa dalam sistem automotif, mudah alih, perindustrian, pengguna, komunikasi dan peranti terbenam, yang berpotensi tertakluk kepada serangan menggunakan Bluetooth, HD Radio/DAB, USB, bas CAN, Wi-Fi Fi dan sumber data luaran lain (contohnya, perkhidmatan dan aplikasi yang boleh diakses melalui rangkaian yang menerima data input tanpa sekatan saiz boleh diserang).

Contohnya ialah penciptaan eksploitasi yang berfungsi untuk menyerang pelayan HTTP yang terbina dalam sistem maklumat kereta, boleh diakses melalui rangkaian Wi-Fi kereta. Penyerang luar boleh mengeksploitasi kelemahan memcpy pada pelayan ini dengan menghantar permintaan GET yang sangat besar dan mendapatkan akses root kepada sistem.

Kerentanan kritikal dalam pelaksanaan fungsi memcpy untuk ARMv7 daripada Glibc

Pada sistem x32 86-bit, masalah tidak muncul, kerana pelaksanaan memcpy untuk seni bina ini mentafsir pembolehubah saiz dengan betul sebagai nilai integer tidak bertanda jenis size_t (dalam bahasa himpunan pelaksanaan untuk ARMv7 ia dianggap sebagai integer bertanda dan bukannya size_t). Pembetulan tersedia pada masa ini sebagai tampalan, yang akan disertakan dalam kemas kini Ogos Glibc 2.32.
Pembaikan bermuara kepada menggantikan penggunaan arahan pemasangan yang beroperasi pada operan yang ditandatangani (bge dan blt) dengan rakan sejawat yang tidak ditandatangani (blo dan bhs).

Masalahnya masih belum selesai Debian 9 dan 10 (tidak kelihatan dalam Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (digunakan oleh glibc). RHEL ΠΈ SUSE Isu ini tidak terjejas kerana mereka tidak menyokong sistem ARMv32 7-bit. Android tidak terjejas oleh kerentanan kerana ia menggunakan pelaksanaan libc (Bionic) sendiri. DALAM OpenWRT Secara lalai, kebanyakan binaan menggunakan Musl, tetapi glibc juga tersedia dalam repositori.

Sumber: opennet.ru

Tambah komen