Para peneliti dari tim Project Zero Google telah menerbitkan metode untuk mengeksploitasi kerentanan (CVE-2020-29661) dalam implementasi penangan ioctl TIOCSPGRP dari subsistem tty kernel. Linux, dan juga meneliti secara detail mekanisme perlindungan yang dapat memblokir kerentanan tersebut.
Bug yang menyebabkan masalah tersebut telah diperbaiki di kernel. Linux Pada tanggal 3 Desember tahun lalu. Masalah ini muncul pada kernel sebelum versi 5.9.13, tetapi sebagian besar distribusi telah memperbaiki masalah ini dalam pembaruan paket kernel yang dirilis tahun lalu (Debian, RHEL, SUSE, Ubuntu(Fedora, Arch). Kerentanan serupa (CVE-2020-29660) juga ditemukan secara bersamaan dalam implementasi panggilan ioctl TIOCGSID, tetapi kerentanan tersebut juga telah ditambal secara luas.
Masalah ini disebabkan oleh kesalahan pengaturan penguncian, yang menyebabkan kondisi persaingan (race condition) di drivers/tty/tty_jobctrl.c, yang berhasil dieksploitasi untuk menciptakan kondisi penggunaan setelah pembebasan (use-after-free), yang dapat dieksploitasi dari ruang pengguna dengan memanipulasi panggilan ioct TIOCSPGRP. Eksploitasi yang berfungsi telah didemonstrasikan untuk peningkatan hak akses (privilege escalation) di Debian 10 dengan kernel 4.19.0-13-amd64.
Pada saat yang sama, artikel yang diterbitkan tidak terlalu berfokus pada teknik membuat eksploitasi yang berfungsi, melainkan pada alat apa yang ada di kernel untuk melindungi dari kerentanan tersebut. Kesimpulannya tidak menyenangkan; metode seperti segmentasi memori di heap dan kontrol akses memori setelah dibebaskan tidak digunakan dalam praktik, karena menyebabkan penurunan kinerja, dan perlindungan berbasis CFI (Control Flow Integrity), yang memblokir eksploitasi pada tahap akhir serangan, perlu perbaikan.
Saat mempertimbangkan apa yang akan membuat perbedaan dalam jangka panjang, salah satu yang menonjol adalah penggunaan penganalisis statis tingkat lanjut atau penggunaan bahasa yang aman untuk memori seperti dialek Rust dan C dengan anotasi yang kaya (seperti Checked C) untuk memeriksa status selama fase pembuatan.kunci, objek, dan penunjuk. Metode perlindungan juga mencakup aktivasi mode panik_on_oops, mengalihkan struktur kernel ke mode read-only, dan membatasi akses ke panggilan sistem menggunakan mekanisme seperti seccomp.
Sumber: opennet.ru
