Sploitus

Exploit for page-cache-corruption-lpes

kitploit · 2026-09-03

Exploit Code

MARKDOWN163 lines
## 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