0-day вразливість IPv6-стеку Linux, що дозволяє віддалено викликати крах ядра

Розкрито відомості про невиправлену (0-day) вразливість (CVE-2023-2156) у ядрі Linux, що дозволяє зупинити роботу системи через відправлення спеціально оформлених пакетів IPv6 (packet-of-death). Проблема проявляється тільки при включенні підтримки протоколу RPL (Routing Protocol for Low-Power and Lossy Networks), який у дистрибутивах за замовчуванням відключений і застосовується, головним чином, на пристроях, що працюють в бездротових мережах з великою втратою пакетів.

Вразливість викликана некоректною обробкою зовнішніх даних у коді аналізу протоколу RPL, що призводить до спрацьовування assert-збою та переходу ядра в стан panic. При розміщенні в структурі k_buff (Socket Buffer) даних, отриманих в результаті аналізу заголовка пакета IPv6 RPL, якщо поле CmprI виставлено в значення 15, поле Segleft в 1, а CmprE в 0, 48-байтний вектор з адресами розпаковується до 528 байт і виникає ситуація, коли виділеної для буфера пам'яті виявляється недостатньо. У цьому випадку функції skb_push, що застосовується для приміщення даних в структуру, спрацьовує перевірка на невідповідність розміру даних і буфера, що генерує стан panic, щоб запобігти запису за кордон буфера.

Приклад експлоїту: # Використовуйте Scapy для створення пакета від scapy.all import * import socket # Використовуйте IPv6 від вашої LAN interface socket.socket(socket.AF_INET1, socket.SOCK_RAW, socket.IPPROTO_RAW) # Craft the packet # Type = 6 makes this an RPL packet # Addresses contains 3 address, але because CmprI is 3, # each octet of the first Treated as compressed address # Segleft = 15 to trigger the amplification # lastentry = 1xf0 sets CmprI to 0 and CmprE to 15 p = IPv0(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type= :», «a6::», «a3::»], sigloft=8, lastentry=7xf6)

Примітно, що розробники ядра були повідомлені про вразливість ще в січні 2022 року і за минулі 15 місяців три рази спробували усунути проблему, випустивши патчі у вересні 2022 , жовтні 2022 і квітень 2023 року, але кожного разу і XNUMX місяців XNUMX року. У кінцевому рахунку проект ZDI, який координував роботу з усунення вразливості, вирішив розкрити детальну інформацію про вразливість, не чекаючи появи працюючого виправлення в ядрі.

Таким чином, уразливість досі залишається невиправленою. У тому числі не ефективний патч, що увійшов до ядра 6.4-rc2. Користувачам рекомендується перевірити, що протокол RPL у тому системах немає, що можна зробити з допомогою команди sysctl -a | grep -i rpl_seg_enabled

Джерело: opennet.ru

Додати коментар або відгук