
CVE-2026-43284 и CVE-2026-43500 Dirty Frag PoC и эксплойт
Читаемый демонстратор N4C для CVE-2026-43284 (XFRM/ESP) и CVE-2026-43500 (RxRPC/RXKAD).
PoC отвечает на один вопрос: может ли непривилегированный процесс изменить page cache файла, принадлежащего root и доступного только для чтения, через общий фрагмент sk_buff?
Он не перезаписывает /usr/bin/su или /etc/passwd, не устанавливает полезную нагрузку, не вызывает PAM/NSS и не запускает оболочку. Полный публичный эксплойт остаётся в ветке exploit.
dirtyfrag-poc.c — два примитива page-cache и небольшой CLI.prepare-lab.sh — создаёт два безвредных файла-фикстуры, принадлежащих root.run_as_1000.c / run-as-1000 — понижает root-оболочку ВМ до uid/gid 1000.Makefile — воспроизводимая статическая сборка.--esp)фикстура только для чтения
-> splice(file -> pipe -> UDP socket)
-> paged-фрагмент skb
-> ESP authencesn: запись STORE на месте
-> первые четыре кэшированных байта становятся "N4C!"
Используются только одна SA XFRM и одна запись из четырёх байт. ELF root-оболочки и цикл сборки из 48 триггеров из публичного эксплойта были удалены.
--rxrpc)фикстура только для чтения
-> splice(file -> поддельный пакет данных RxRPC)
-> RXKAD pcbc(fcrypt): расшифровка на месте
-> одна выбранная по ключу запись из 8 байт
-> кэшированные байты отличаются от исходной фикстуры
PoC не ищет открытый текст в форме пароля, потому что любой изменённый блок из восьми байт уже доказывает примитив. Офлайн-перебор fcrypt, планировщик перекрывающихся записей, PAM, getent, su без пароля, обработка PTY и код оболочки были удалены.
Используйте только в одноразовой авторизованной Linux-ВМ с необходимыми возможностями ядра.
make
# Запустите один раз от root-пользователя ВМ для воссоздания известных байтов фикстур.
./prepare-lab.sh
# Затем помощник запускает PoC от uid/gid 1000.
./run-as-1000 ./dirtyfrag-poc --esp --verbose
./prepare-lab.sh
./run-as-1000 ./dirtyfrag-poc --rxrpc --verbose
Код завершения:
0 — маркер появился в page cache; примитив наблюдался.1 — маркер не появился; запись через общий фрагмент была отклонена.2 — недопустимая фикстура, неподдерживаемая среда или сбой настройки.3 — триггер RxRPC завершился неудачей до проверки.Воссоздавайте фикстуры или перезагружайте одноразовую ВМ между запусками.
main() выбирает один примитив и отказывается запускаться от uid 0.esp_poc() показывает случай XFRM/ESP с четырьмя байтами.rxrpc_poc() показывает один триггер и прямое сравнение «до/после».Конструкция протокола получена из исходного кода ядра Linux и публичной эталонной реализации V4bel/dirtyfrag в коммите aab16fcada27142dd8ce8704906cf6736cf213b8. N4C переписал поток выполнения в этот демонстратор только с фикстурами и удалил полезную нагрузку для повышения привилегий и этапы потребителя.