
Рабочий proof-of-concept эксплойт для CVE-2026-31431 — локальное повышение привилегий в ядре Linux через повреждение page cache в AF_ALG AEAD, предоставляющее root-оболочку.
2026-04-29 — Я публикую этот эксплойт через день после того, как поделился им на форуме MyDigitalLife. Для него не требуется Python; он написан на C и скомпилирован до минимально возможного размера с помощью:
musl-gcc -static -Os -o exploit exploit.c -sКритическая угроза. Бинарный файл эксплойта скомпилирован без зависимостей и может использоваться для проверки уязвимостей в любой системе Linux.
CVE-2026-31431 — это подтверждённая NIST уязвимость в ядре Linux, которая позволяет непривилегированному локальному пользователю получить
root-оболочку за считанные секунды. В связи с публично распространяемым эксплойтом для CVE-2026-31431 я разработал бинарное доказательство концепции (PoC) для оценки подверженности нашей внутренней инфраструктуры. Хотя в некоторых средах использование su ограничено, эта уязвимость особенно критична для общих серверов, поскольку она нацелена на базовое управление памятью ядра. Следовательно, любой SETUID-бинарный файл — включая sudo, passwd, mount или newgrp — может быть использован для запуска эксплойта и получения root-оболочки. Требуются немедленные административные действия по обновлению ядра, поскольку стандартные ограничения пользовательского пространства недостаточны для смягчения этой угрозы. Любая система Linux с непропатченным ядром находится под угрозой.
Мой собственный рабочий эксплойт · Ядро Linux · Криптографический интерфейс AF_ALG (AEAD)
Заменяет /usr/bin/su в кэше страниц ядра, не затрагивая файл на диске
Достаточно локального доступа к оболочке — дополнительные привилегии не требуются
Затрагивает непропатченные дистрибутивы Linux

CVE-2026-31431 — это ошибка в обработке операций scatter-gather I/O и ссылок на кэш страниц в криптографической подсистеме ядра Linux — в частности, в реализации сокетов AF_ALG для алгоритмов AEAD (crypto/af_alg.c, crypto/aead.c).
| Свойство | Значение |
|---|---|
| Идентификатор | CVE-2026-31431 |
| Ссылка | NIST NVD |
| Тип | Локальное повышение привилегий (LPE) |
| Компонент | Ядро Linux — AF_ALG / AEAD (authencesn) |
| Требуемый доступ | Непривилегированный локальный пользователь |
| Воздействие | Интерактивная root-оболочка |
| Статус эксплойта | Рабочее PoC, публично доступное на GitHub |
| Постоянство | Нет — изменение существует только в ОЗУ; перезагрузка восстанавливает исходное состояние |
Ядро Linux предоставляет криптографический интерфейс пользовательскому пространству через сокеты AF_ALG. Уязвимость заключается в том, что во время операции расшифровки AEAD ядро некорректно отображает выходные данные расшифровки непосредственно на страницы кэша страниц исходного файла — вместо временного буфера. Таким образом, атакующий может перезаписать содержимое любого файла в памяти, не изменяя его на диске, без привилегий root и не оставляя видимых следов в файловой системе.
| Система | Статус |
|---|---|
| Ubuntu 24.04 (физический сервер / ВМ) | ⚠️ Уязвима на непропатченном ядре |
| Debian, Fedora, Arch на непропатченном ядре | ⚠️ Уязвимы |
Дистрибутивы с CONFIG_SECURITY_LOCKDOWN_LSM | ✅ Вероятно, защищены |
Системы с nosuid или ProtectSUID (systemd) | ✅ Защищены |
Системы с AppArmor/SELinux, блокирующими AF_ALG | ✅ Защищены |
| macOS, Windows (нативно) | ✅ Не затронуты |
Эксплойт состоит из двух компонентов: вспомогательного скрипта в /tmp/x и цикла повреждения на основе AF_ALG. Ниже приведено точное описание на основе анализа исходного кода:
1. Настройка вспомогательного скрипта
Эксплойт создаёт /tmp/x со следующим содержимым:
#!/bin/sh
export TERM=xterm-256color
exec /bin/sh
Он устанавливает права 0755. Причина: /usr/bin/su удаляет переменные окружения (включая TERM) при запуске. Вспомогательный скрипт восстанавливает их перед запуском настоящей оболочки, обеспечивая работоспособный терминал.
2. Создание ELF-полезной нагрузки
В памяти создаётся минимальный 158-байтовый x86_64 ELF-бинарный файл, содержащий необработанный шеллкод. Затем строка /bin/sh по смещению 150 заменяется на /tmp/x\0 через memcmp/memcpy. Подробности см. в разделе ELF-полезная нагрузка.
3. Открытие /usr/bin/su только для чтения
int su_fd = open("/usr/bin/su", O_RDONLY);
Файл открывается только для чтения — эксплойту не требуются права на запись.
4. Цикл повреждения — 39 итераций по 4 байта
Полезная нагрузка (158 байт) обрабатывается блоками по 4 байта (39 полных блоков). Каждый блок передаётся через corrupt_binary_chunk(), который выполняет:
AF_ALG (SOCK_SEQPACKET)authencesn(hmac(sha256),cbc(aes)) — составному алгоритму AEADop_sock)sendmsg с 8-байтовым буфером (4× 'A' + 4 байта полезной нагрузки) и тремя CMSG: ALG_OP_DECRYPT, IV (20 байт), assoclen=8splice: su_fd → pipe → op_sock (zero-copy через ядро)recv() — именно здесь ядро ошибочно перезаписывает кэш страниц5. Выполнение
execve("/usr/bin/su", args, NULL);
Ядро загружает /usr/bin/su через кэш страниц — который теперь отравлен. Бит SUID (chmod u+s) сохранён, поэтому ядро выполняет файл от имени root. Шеллкод выполняет setuid(0) → execve("/tmp/x") → интерактивная root-оболочка.