
Эксплойт для повышения привилегий в ядре для CVE-2026-31431, использующий интерфейс AF_ALG для перезаписи /bin/su и запуска root-оболочки. Включает реализацию на C и руководство по устранению неполадок.
Автор: 0xShe
Язык / 语言
Руководство по инструменту повышения привилегий ядра CVE-2026-31431
0x01 Быстрый старт
В некоторых целевых средах Python не установлен, поэтому данная логика повышения привилегий была переписана на C.
Выполните следующую команду на вашей Linux-машине или в WSL (рекомендуется использовать -static, чтобы избежать проблем с версиями GLIBC):
gcc -static exploit.c -o exploit
2. Развёртывание и запуск
Загрузите полученный бинарный файл на целевую машину:
chmod +x exploit
./exploit
Если эксплойт сработает, программа автоматически выполнит su и запустит root-оболочку напрямую, без запроса пароля.
0x02 Логика повышения привилегий: как это работает?
Данный эксплойт использует логическую ошибку в интерфейсе AF_ALG ядра Linux (Kernel Crypto API).
Создание крипто-сокета Программа создаёт AEAD-сокет (Authenticated Encryption with Associated Data) с помощью socket(AF_ALG, ...).
Инъекция в память (Splice) Используя системный вызов splice в Linux, данные из файлового дескриптора (в данном случае /bin/su) могут быть напрямую перенаправлены в криптографический буфер ядра.
Перезапись полезной нагрузки Используя определённые смещения в памяти, эксплойт заменяет часть логики аутентификации /bin/su на полезную нагрузку повышения привилегий (минимальную ELF-программу, запускающую /bin/sh).
Запуск повышения привилегий После того как ядро завершит серию криптографических операций, процесс su в памяти уже будет изменён. Когда в итоге выполняется system("su"), система фактически запускает изменённую root-оболочку.
0x03 Руководство по устранению неполадок: почему всё ещё запрашивается пароль?
Во время отладки, если программа выводит Exploit finished, но запуск su по-прежнему требует пароль, проблема обычно вызвана одной из следующих деталей.
Это самая распространённая точка отказа. Вызов sendmsg должен включать флаг MSG_MORE.
Причина: Этот флаг сообщает ядру, что будет передано больше данных, и предотвращает преждевременную финализацию криптографического буфера.
Последствие: Без этого флага ядро немедленно закрывает текущий криптографический контекст. В результате последующая инъекция через splice не может попасть в правильный буфер ядра, что делает перезапись невозможной.
Ядро крайне строго относится к выравниванию и проверке длины ассоциированных данных AEAD.
Во время цикла изменения /bin/su каждая операция splice должна начинать чтение со смещения 0.
На некоторых системах уже могут быть применены скрытые патчи безопасности. Это было подтверждено во время тестирования на нескольких машинах — на некоторых целях уже были установлены неофициальные или бэкпортированные исправления.
0x04 Примечания
Версия ядра: Эта уязвимость в основном затрагивает ранние версии ядра Linux 5.x (например, первоначальный выпуск Ubuntu 20.04). Если ядро уже пропатчено, этот метод больше не будет работать.
Различия в путях: Разные дистрибутивы Linux могут хранить su в разных местах (/bin/su или /usr/bin/su). Код пытается автоматически определить правильный путь, но если ни один из них не существует, вручную проверьте его с помощью which su и соответствующим образом измените код.
Отказ от ответственности: Эта статья предназначена строго для технических исследований и образовательных целей. Не используйте её для незаконной деятельности. Пользователи несут единоличную ответственность за любые юридические последствия, возникшие в результате неправильного использования инструмента.