Sploitus

Exploit for CVE-2026-31431

kitploit · 2026-08-27

Exploit Code

MARKDOWN73 lines
## 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]