Kerentanan dalam subsistem kernel Linux Netfilter

Kerentanan (CVE-2021-22555) telah diidentifikasi di Netfilter, subsistem kernel Linux yang digunakan untuk memfilter dan memodifikasi paket jaringan, yang memungkinkan pengguna lokal mendapatkan hak akses root pada sistem, termasuk saat berada dalam wadah yang terisolasi. Prototipe eksploitasi yang berfungsi yang melewati mekanisme perlindungan KASLR, SMAP dan SMEP telah disiapkan untuk pengujian. Peneliti yang menemukan kerentanan menerima hadiah $20 dari Google karena mengidentifikasi metode untuk melewati isolasi container Kubernetes di cluster kCTF.

Masalahnya telah ada sejak kernel 2.6.19, dirilis 15 tahun yang lalu, dan disebabkan oleh bug pada handler IPT_SO_SET_REPLACE dan IP6T_SO_SET_REPLACE yang menyebabkan buffer overflow saat mengirim parameter yang diformat khusus melalui panggilan setockopt dalam mode compat. Dalam keadaan normal, hanya pengguna root yang dapat melakukan panggilan ke compat_setsockopt(), namun hak istimewa yang diperlukan untuk melakukan serangan juga dapat diperoleh oleh pengguna yang tidak memiliki hak istimewa pada sistem dengan dukungan untuk namespace pengguna diaktifkan.

Seorang pengguna dapat membuat wadah dengan pengguna root terpisah dan mengeksploitasi kerentanan dari sana. Misalnya, "ruang nama pengguna" diaktifkan secara default di Ubuntu dan Fedora, tetapi tidak diaktifkan di Debian dan RHEL. Patch yang memperbaiki kerentanan tersebut diadopsi ke dalam kernel Linux pada 13 April. Pembaruan paket telah dibuat oleh proyek Debian, Arch Linux dan Fedora. Di Ubuntu, RHEL dan SUSE, pembaruan sedang dalam persiapan.

Masalah terjadi pada fungsi xt_compat_target_from_user() karena perhitungan ukuran memori yang salah saat menyimpan struktur kernel setelah konversi dari representasi 32-bit ke 64-bit. Bug ini memungkinkan empat byte nol untuk ditulis ke posisi mana pun di luar buffer yang dialokasikan dan dibatasi oleh offset 0x4C. Fitur ini ternyata cukup untuk membuat eksploitasi yang memungkinkan seseorang mendapatkan hak root - dengan menghapus m_list->next pointer dalam struktur msg_msg, kondisi diciptakan untuk mengakses data setelah mengosongkan memori (use-after-free), yang kemudian digunakan untuk memperoleh informasi tentang alamat dan perubahan pada struktur lain melalui manipulasi panggilan sistem msgsnd().

Sumber: opennet.ru

Tambah komentar