
Rust PoC для локального повышения привилегий в ядре Linux, эксплуатирующий Crypto API и splice для перезаписи page cache и изменения UID в /etc/passwd для получения root.
Этот проект представляет собой 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]AF_ALG с алгоритмом authesn(hmac(sha256),cbc(aes)).[cite: 2]setsockopt и используя splice, перенаправляет данные файла через криптографический конвейер.[cite: 2]0000).[cite: 2]--shell, выполняется su <user>, который завершается успешно, поскольку система теперь видит UID пользователя как 0 в кэшированном /etc/passwd.[cite: 1]POSIX_FADV_DONTNEED для восстановления целостности системы.[cite: 1]libc и nix (с функциями fs, socket, zerocopy и user).[cite: 3]cargo build --release
Тест патчинга кэша страниц без запуска оболочки:
./target/release/cve-2026-31431
Попытка повышения привилегий до root-оболочки:
./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]