## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-G01D3NW01F-CVE-2026-31431
# CVE-2026-31431 LPE PoC (реализация на Rust)
Этот проект представляет собой Proof of Concept (PoC), реализованный на Rust, для локального повышения привилегий (LPE) через уязвимость (имитирующую CVE-2026-31431). Он демонстрирует, как манипулировать кэшем страниц ядра Linux, эксплуатируя Crypto API.[cite: 1, 2]
> [!CAUTION] Этот код предназначен исключительно для образовательных и этических исследований в области безопасности. Несанкционированное использование этого инструмента против систем без предварительного явного согласия является незаконным. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этой программой.
## Обзор
Инструмент эксплуатирует уязвимость, связанную с `AF_ALG` (интерфейс криптографии ядра) и системным вызовом `splice`.[cite: 2] Он позволяет непривилегированному пользователю перезаписать 4 байта кэша страниц для файла, доступного только для чтения — в частности, нацеливаясь на поле UID в `/etc/passwd`, чтобы временно изменить его на `0000` (root).[cite: 1, 2]
## Как это работает
* **Определение цели** : Программа анализирует `main.rs`, чтобы найти точное смещение в файле для UID текущего пользователя в `/etc/passwd`.[cite: 1, 2]
* **Прогрев кэша страниц** : Она читает целевой файл, чтобы гарантировать загрузку соответствующей страницы в кэш страниц ядра.[cite: 2]
* **Манипуляция памятью** :
* Инициализирует сокет с помощью `AF_ALG` с алгоритмом `authesn(hmac(sha256),cbc(aes))`.[cite: 2]
* Тщательно подбирая параметры `setsockopt` и используя `splice`, перенаправляет данные файла через криптографический конвейер.[cite: 2]
* Уязвимость позволяет процессу «расшифровки» перезаписать исходные данные кэша страниц нужными 4 байтами (`0000`).[cite: 2]
* **Повышение привилегий** :
* Если указан флаг `--shell`, выполняется `su <user>`, который завершается успешно, поскольку система теперь видит UID пользователя как `0` в кэшированном `/etc/passwd`.[cite: 1]
* В противном случае повреждённый кэш страниц вытесняется с помощью `POSIX_FADV_DONTNEED` для восстановления целостности системы.[cite: 1]
## Предварительные требования
* **ОС** : Linux (в частности, версии, уязвимые к этому поведению Crypto API).
* **Язык** : Rust (Edition 2024).[cite: 3]
* **Зависимости** : `libc` и `nix` (с функциями `fs`, `socket`, `zerocopy` и `user`).[cite: 3]
## Использование
### Сборка
root@kitploit:~
cargo build --release
### Выполнение
**Тест патчинга кэша страниц без запуска оболочки:**
root@kitploit:~
./target/release/cve-2026-31431
**Попытка повышения привилегий до root-оболочки:**
root@kitploit:~
./target/release/cve-2026-31431 --shell
## Структура проекта
* `main.rs`: Оркестрирует атаку, обрабатывает аргументы командной строки и выполняет финальную команду оболочки.[cite: 1]
* `modules.rs`: Содержит основную логику эксплуатации, включая манипуляции с сокетом `AF_ALG` и поиск смещения UID.[cite: 2]
* `Cargo.toml`: Определяет метаданные проекта и зависимости от внешних крейтов.[cite: 3]
## Технические ссылки
* **Задействованные файлы** : `main.rs`, `modules.rs`, `Cargo.toml`[cite: 1, 2, 3]
* **Ключевые системные вызовы** : `socket`, `bind`, `sendmsg`, `splice`, `posix_fadvise`.[cite: 1, 2]