
Эксплойт для CVE-2026-31431 — ошибки в authencesn ядра Linux, позволяющей локальному повышению привилегий и выходу из контейнера через запись 4 байт в page cache.
732 байта до root на каждом крупном дистрибутиве Linux
CVE-2026-31431 (Copy Fail) — логическая ошибка в криптографическом шаблоне authencesn ядра Linux. Она позволяет непривилегированному локальному пользователю выполнить детерминированную контролируемую запись 4 байт в page cache любого читаемого файла в системе.
CONFIG_CRYPTO_AUTHENC (практически все крупные дистрибутивы с 2017 года)Ошибка объединяет два поведения:
AF_ALG + splice: splice() передаёт страницы page cache по ссылке в scatterlist сокета AF_ALG. Для режима in-place расшифровки AEAD страницы тега (из page cache целевого файла) остаются привязанными к выходному scatterlist через sg_chain().
Запись в scratch-область authencesn: crypto_authenc_esn_decrypt() использует dst[assoclen + cryptlen] (за пределами тега, в страницах page cache) как scratch-пространство для перестановки порядкового номера ESN, записывая 4 байта, контролируемых атакующим, и никогда не восстанавливая их.
Повреждённая страница никогда не помечается как грязная, поэтому файл на диске остаётся неизменным. Но именно page cache в памяти фактически считывается — что делает повреждение немедленно видимым во всей системе.
Эксплойт повреждает page cache /usr/bin/su (или любого setuid-бинарника) небольшим шеллкодом, по 4 байта за раз. После всех итераций запуск su выполняет полезную нагрузку и открывает root-оболочку.
python3 exp.py
gcc -o exp exp.c
./exp
| Возможность | Подробности |
|---|---|
Этот репозиторий опубликован исключительно в образовательных целях и для защитных исследований. Не используйте этот код на системах, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
| Переносимость |
| Один и тот же скрипт работает на Ubuntu, Amazon Linux, RHEL, SUSE и других — без смещений под каждый дистрибутив |
| Компактность | Эксплойт на Python занимает ~732 байта |
| Скрытность | Обходит путь записи VFS; страница не помечается как грязная; контрольные суммы на диске не изменяются |
| Кросс-контейнерность | Page cache является общим для контейнеров — вектор побега из контейнера (см. часть 2) |