
CVE-2026-46331 and CVE-2026-43503
3 эксплуатации локального повышения привилегий для ядра Linux. Тот же класс ошибок, что и Dirty COW и Dirty Pipe. Root-доступ за секунды. Затронуты все основные дистрибутивы.
Все три повреждают кэш страниц ядра — копию файлов в памяти, из которой процессы фактически читают и выполняют. Файл на диске никогда не затрагивается. Инструменты проверки целостности файлов ничего не видят. execve("/usr/bin/su") загружается из кэша → выполняется ваш шеллкод → root.
| Эксплойт | CVE | Механизм | Время до root | Строк |
|---|---|---|---|---|
| Dirty Pedit | CVE-2026-46331 | Окно COW TC pedit (переполнение u32) | < 1 секунды | 275 |
| skb_shift | CVE-2026-43503 | Потеря флага передачи фрагмента TCP SACK | ~10 секунд | 500 |
| GRO Flag Loss | CVE-2026-43503 | Потеря флага передачи фрагмента при слиянии GRO | ~10 секунд | 550 |
Все три: непривилегированный → root. Никаких специальных разрешений. Только пользовательские пространства имён.
Каждый эксплойт в этом репозитории следует одному шаблону:
1. Получить страницы кэша страниц в буфер ядра (splice)
2. Обойти защиту копирования при записи
3. Записать на месте → файл, доступный только для чтения, повреждён в памяти
Разница заключается в ТОМ, КАК обходится защита и ЧТО выполняет запись:
2016 Dirty COW Гонка COW через mmap + fork
2022 Dirty Pipe Застарелый PIPE_BUF_FLAG_CAN_MERGE в splice
2026 Copy Fail AEAD на месте AF_ALG на scatterlist кэша страниц
2026 Dirty Frag ESP skip_cow на фрагментированных splice (отсутствующий флаг)
2026 Fragnesia skb_try_coalesce сбрасывает флаг SHARED_FRAG
2026 Dirty Pedit ← Окно COW TC pedit, криптография не требуется
2026 skb_shift ← TCP SACK сбрасывает SHARED_FRAG, ESP записывает
2026 GRO Flag Loss ← Слияние GRO сбрасывает SHARED_FRAG, ESP записывает
Конфигурации по умолчанию. Для уязвимости не требуется дополнительное hardening. Если вы используете Linux, вы были затронуты.
skb_shift и GRO используют одну и ту же технику эксплуатации: потерять флаг SKBFL_SHARED_FRAG, затем позволить криптографии ESP выполнять XOR в страницы кэша страниц по одному байту за раз, используя предварительно вычисленную таблицу поиска IV.
Dirty Pedit — это совершенно другой зверь:
skb_store_bits.skb_ensure_writable через целочисленное переполнение.# Сборка всех трёх
cd dirty_pedit && gcc -static -O2 -o exploit exploit.c && cd ..
cd skb_shift && gcc -static -O2 -o exploit exploit.c && cd ..
cd gro && gcc -static -O2 -o exploit exploit.c && cd ..
Каждый эксплойт — это один самодостаточный файл на C. Зависимостей, кроме libc, нет.
# Любой из трёх (без привилегий):
./exploit
# → root shell
Требуется: ядро Linux в диапазоне затронутых версий + CONFIG_USER_NS=y (по умолчанию во всех основных дистрибутивах).
[*] Dirty Pedit — Local Privilege Escalation
[*] uid=1000 pid=42
[*] Victim line at offset 186: nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
[*] Injecting user 'a' (uid=0, no password) over victim line...
[+] User 'a' injected with uid=0!
[+] Running: su a
# id
uid=0(root) gid=0(root) groups=0(root)
[*] uid=1000 euid=1000
[*] IV table pre-computed (256 entries)
[*] Writing 192 bytes to /usr/bin/su...
[120] 0x00→0x48 ... OK
[121] 0x00→0x31 ... OK
[*] Write complete: 192/192
[!] /usr/bin/su page cache overwritten!
# whoami
root
Все уязвимости были ответственно раскрыты команде по безопасности ядра Linux и разработчикам сети. Патчи объединены в вышестоящей ветке и перенесены в стабильные деревья.
899ee91156e548f6a5356a33Эти эксплойты опубликованы в образовательных и защитных целях после того, как были доступны патчи. Повреждение кэша страниц — только в памяти; перезагрузка или echo 1 > /proc/sys/vm/drop_caches восстанавливает исходные файлы.
Rajat Gupta — Offensive Security @ Qualcomm
MIT
| Эксплойт | Обойдённая защита | Записывающий |
|---|
| Dirty Pedit | skb_ensure_writable (переполнение u32 → частичное COW) | skb_store_bits (прямая запись 4 байт) |
| skb_shift | Флаг SKBFL_SHARED_FRAG потерян во время TCP SACK | Расшифровка ESP AES-GCM (1 байт на пакет) |
| GRO Flag Loss | Флаг SKBFL_SHARED_FRAG потерян во время слияния GRO | Расшифровка ESP AES-GCM (1 байт на пакет) |
| Эксплойт | Введён | Исправлен | Затронутые дистрибутивы |
|---|
| Dirty Pedit | v5.18 (май 2022) | v7.1-rc7 | Ubuntu, RHEL, Debian, Fedora, SUSE |
| skb_shift | v3.9 (2013) | v7.1-rc5 | Каждый дистрибутив за 13 лет |
| GRO Flag Loss | v3.9 (2013) | v7.1-rc5 | Каждый дистрибутив за 13 лет |
| Свойство | Dirty Pedit | skb_shift | GRO |
|---|
| Привилегии | Нет (userns) | Нет (userns) | Нет (userns) |
| Доступ к файлу | O_RDONLY | O_RDONLY | O_RDONLY |
| Криптография | Нет | Да (AES-GCM) | Да (AES-GCM) |
| Управление записью | 4 байта/пакет | 1 байт/пакет | 1 байт/пакет |
| Надёжность | Детерминированно | Детерминированно | Вероятностно (повтор) |
| Побег из контейнера K8s | Нет (veth не нужен) | Нет | Да (veth+GRO по умолчанию) |
| Поверхность атаки | geneve + TC | loopback + espintcp | veth + ESP-in-UDP |