Kerentanan kritis dalam implementasi fungsi memcpy untuk ARMv7 dari Glibc

Peneliti Keamanan Cisco terbongkar rinciannya kerentanan (CVE-2020-6096) dalam implementasi fungsi memcpy() yang disediakan Glibc untuk platform ARMv32 7-bit. Masalah ini disebabkan oleh penanganan yang salah terhadap nilai negatif dari parameter yang menentukan ukuran area yang disalin, karena penggunaan optimasi perakitan yang memanipulasi bilangan bulat 32-bit yang ditandatangani. Memanggil memcpy() pada sistem ARMv7 dengan ukuran negatif menghasilkan perbandingan nilai yang salah dan penulisan di area di luar batas buffer yang ditentukan.

Kerentanan dapat dieksploitasi untuk mengeksekusi kode dalam situasi di mana penyerang dapat mengatur pembentukan nilai negatif dari variabel yang digunakan untuk mengirimkan ukuran data yang disalin (misalnya, akan menjadi negatif ketika mentransfer lebih dari 2 GB data data, tetapi selama serangan, untuk melampaui batas buffer, Anda perlu mentransfer setidaknya 4GB). Fungsi memcpy() banyak digunakan dalam aplikasi, dan prosesor ARMv7 umum digunakan pada sistem otomotif, seluler, industri, konsumen, komunikasi, dan perangkat tertanam, yang berpotensi terkena serangan menggunakan Bluetooth, Radio HD/DAB, USB, CAN bus, Wi-Fi Fi dan sumber data eksternal lainnya (misalnya, layanan dan aplikasi yang dapat diakses melalui jaringan yang menerima data masukan tanpa batasan ukuran dapat diserang).

Contohnya adalah pembuatan eksploitasi yang berfungsi untuk menyerang server HTTP yang dibangun dalam sistem informasi mobil, yang dapat diakses melalui jaringan Wi-Fi mobil. Penyerang luar dapat mengeksploitasi kerentanan memcpy di server ini dengan mengirimkan permintaan GET yang sangat besar dan mendapatkan akses root ke sistem.

Kerentanan kritis dalam implementasi fungsi memcpy untuk ARMv7 dari Glibc

Pada sistem x32 86-bit, masalah tidak muncul karena implementasi memcpy untuk arsitektur ini dengan benar menafsirkan variabel ukuran sebagai nilai integer tak bertanda tipe size_t (dalam bahasa rakitan penerapan untuk ARMv7 diperlakukan sebagai bilangan bulat yang ditandatangani, bukan size_t). Perbaikan saat ini tersedia sebagai tambalan, yang akan disertakan dalam pembaruan Glibc 2.32 Agustus.
Perbaikannya adalah dengan mengganti penggunaan instruksi perakitan yang beroperasi pada operan yang ditandatangani (bge dan blt) dengan rekanan yang tidak ditandatangani (blo dan bhs).

Masalahnya belum terselesaikan Debian 9 dan 10 (tidak terlihat di Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (digunakan oleh glibc). RHEL ΠΈ SUSE Masalah ini tidak terpengaruh karena tidak mendukung sistem ARMv32 7-bit. Android tidak terpengaruh oleh kerentanan ini karena menggunakan implementasi libc (Bionic) miliknya sendiri. DI DALAM OpenWRT Secara default, sebagian besar build menggunakan Musl, tetapi glibc juga tersedia di repositori.

Sumber: opennet.ru

Tambah komentar