
Технический анализ CVE-2026-43284 (Dirty Frag) — локальное повышение привилегий в xfrm ESP ядра Linux, позволяющее выполнять записи в page cache для файлов, доступных только для чтения, с целью компрометации root.
Подробный технический анализ уязвимости локального повышения привилегий CVE-2026-43284 (Dirty Frag) в ядре Linux.
CVE-2026-43284 (обычно упоминаемая как часть набора уязвимостей Dirty Frag) — это критическая уязвимость локального повышения привилегий (LPE) в ядре Linux. Она проистекает из логической ошибки в подсистеме ввода xfrm ESP (Encapsulating Security Payload). Эта ошибка позволяет локальному непривилегированному атакующему обойти типичные защиты Copy-on-Write (CoW) и получить примитив произвольной записи в page cache доступных только для чтения системных файлов (таких как /usr/bin/su), что в конечном итоге приводит к полному захвату root.
Разбор уязвимости и вектор атаки1.
Ограничение: Взаимодействие с конфигурацией IPsec ядра обычно требует возможности CAP_NET_ADMIN — привилегии, доступной только обычному пользователю. Обход: Локальный непривилегированный пользователь может создать отдельное непривилегированное пользовательское пространство имён и сетевое пространство имён (используя флаги вроде CLONE_NEWUSER | CLONE_NEWNET). Внутри этого изолированного непривилегированного контейнерного пространства атакующий становится «root»-процессом этого пространства имён, получая привилегии CAP_NET_ADMIN в этом ограниченном контексте.
Имея CAP_NET_ADMIN внутри пользовательского сетевого пространства имён, атакующий настраивает поддельную Security Association (SA) и политики IPsec.
Используя системные вызовы вроде splice(2) или vmsplice(2), атакующий присоединяет страницы, принадлежащие целевому файлу только для чтения (например, /usr/bin/su), к фрагменту буфера сокета (skb).
Ограничение: Атакующий должен заставить ядро обработать данные через процедуру esp_input().
Стратегия: Атакующий создаёт сетевую структуру инкапсуляции ESP-in-UDP и направляет передачу на loopback-интерфейс хоста (127.0.0.1).
Когда пакет принимается локально через loopback-канал, сетевой стек ядра распознаёт обёртку UDP-пакета, декапсулирует его и передаёт внутреннюю полезную нагрузку в esp_input() для обработки.
Из-за логической ошибки в путях добавления датаграмм IPv4/IPv6 ядро не помечает должным образом базовые фрагменты буфера сокета флагом SKBFL_SHARED_FRAG при присоединении страниц к UDP-сокетам.
Следовательно, esp_input() ошибочно интерпретирует пакет как приватный, неклонированный буфер, и выбирает быстрый путь оптимизации производительности «без-COW».
Вместо копирования данных в безопасный пользовательский буфер esp_input() выполняет расшифрование на месте непосредственно поверх страниц памяти, заимствованных из page cache системы
Тонко настраивая данные зашифрованной полезной нагрузки и используя конфигурацию криптографического алгоритма (например, Extended Sequence Numbers), процесс расшифрования детерминированно перезаписывает целевой бинарный файл в page cache.
Как только page cache такого бинарного файла, как /usr/bin/su, отравлен в памяти полезной нагрузкой атакующего, выполнение этого бинарного файла запускает полезную нагрузку от имени root, при этом никогда не затрагивая и не изменяя бинарный файл, хранящийся на реальном физическом диске.
Влияние: Высоконадёжное, детерминированное локальное повышение привилегий на основных корпоративных дистрибутивах Linux без риска паники ядра.
Устранение: Обновите ядро Linux до версий, включающих патч, который обеспечивает обработку SKBFL_SHARED_FRAG для splice датаграмм и вводит безопасный откат к skb_cow_data() внутри логики обработки ESP.