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

Розкрито інформацію про вразливість CVE-2023-6200) у мережевому стеку ядра Linux, яка за певних обставин дозволяє зловмиснику з локальної мережі домогтися виконання свого коду через відправлення спеціально оформленого пакету ICMPv6 з повідомленням RA (Router Advertisement), призначеним для анонсування інформації.

Вразливість може бути експлуатована тільки з локальної мережі і виявляється в системах з включеною підтримкою IPv6 та активним sysctl-параметром «net.ipv6.conf.<ім'я_інтерфейсу мережі>.accept_ra» (можна перевірити командою «sysctl net.ipv6.conf|) , який за замовчуванням відключений у RHEL і Ubuntu для зовнішніх мережних інтерфейсів, але включений для інтерфейсу loopback, що допускає атаку з тієї ж системи.

Уразливість викликана станом гонки при обробці збирачем сміття застарілих записів fib6_info, що може призвести до звернення до звільненої області пам'яті (use-after-free). При отриманні пакета ICMPv6 з повідомленням про анонс маршрутизатора (RA, Router Advertisement) мережевий стек викликає функцію ndisc_router_discovery(), яка за наявності в RA-повідомленні даних про час життя маршруту викликає функцію fib6_set_expires() та заповнює структуру gc. Для чищення застарілих записів застосовується функція fib6_clean_expires(), яка від'єднує запис gc_link і очищає пам'ять, використовувану структурою fib6_info. При цьому є певний момент, коли пам'ять під структуру fib6_info вже звільнена, але посилання на неї продовжується в структурі gc_link.

Вразливість проявляється починаючи з гілки 6.6 і усунена у версіях 6.6.9 та 6.7. Статус усунення вразливості в дистрибутивах можна оцінити на сторінках: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. З дистрибутивів, в яких поставляються пакети з ядром 6.6, можна відзначити Arch Linux, Gentoo, Fedora, Slackware, OpenMandriva і Manjaro, в інших дистрибутивах не виключено бекпортування зміни з помилкою в пакети з старішими гілками ядра (наприклад, у Debian згадується, що вразимо пакет з ядром 6.5.13, у той час як проблемна зміна з'явилася у гілці 6.6). Як обхідний шлях захисту можна вимкнути IPv6 або присвоїти значення 0 параметрам «net.ipv6.conf.*.accept_ra».

Джерело: opennet.ru

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