
Пассивный диагностический инструмент, который проверяет, уязвима ли система Linux к CVE-2026-31431, путём тестирования доступности сокетов AF_ALG, предоставляя рекомендации по смягчению последствий и удобные для CI коды выхода.
Простой и безопасный Python-скрипт, который определяет, уязвима ли Linux-система к CVE-2026-31431 («Copy Fail») — локальному повышению привилегий, затрагивающему все основные дистрибутивы начиная с ядра 4.14.
CVE-2026-31431 — это логическая ошибка в криптографическом сокетном модуле ядра Linux algif_aead. Используя сокеты AF_ALG в сочетании с splice(), непривилегированный атакующий может перезаписать 4 байта в page cache бинарного файла с setuid и получить root.
| Свойство | Детали |
|---|
| Требуется гонка (race condition) | ❌ Нет — эксплуатация детерминирована |
| Требуются смещения ядра | ❌ Нет — версионные смещения не нужны |
| Сложность эксплуатации | Достаточно одного Python-скрипта размером 732 байта для получения root |
| Этот проверщик | Только пассивная диагностика — не запускает уязвимость |
Скрипт пытается создать и привязать сокет AF_ALG, используя точный шаблон алгоритма, на который опирается уязвимость:
authencesn(hmac(sha256),cbc(aes))
| Результат | Значение |
|---|---|
| Сокет создан и привязан | Уязвимый путь кода достижим — немедленно установите патч |
EAFNOSUPPORT (errno 97) | Модуль не загружен — поверхность атаки недоступна |
Permission denied | Политика MAC (SELinux/AppArmor) блокирует доступ — безопасно |
Скрипт не запускает уязвимость никоим образом. Он полностью пассивен и безопасен для выполнения.
Клонируйте репозиторий или скачайте check_copyfail.py, затем выполните:
python3 check_copyfail.py
____ _____ _ _
/ ___|___ _ __ _ _| ___|_ _(_) |
| | / _ \| '_ \| | | | |_ / _` | | |
| |__| (_) | |_) | |_| | _| (_| | | |
\____\___/| .__/ \__, |_| \__,_|_|_|
|_| |___/
CVE-2026-31431 "Copy Fail" – Проверка достижимости
Phalanx CCS / d_0_4 | Только для защитного использования
-------------------------------------------------------
Версия ядра: 6.1.0-28-amd64
Диапазон версий: Потенциально затронутый диапазон
Цель AF_ALG: authencesn(hmac(sha256),cbc(aes))
[!!!] УЯЗВИМАЯ ПОВЕРХНОСТЬ АТАКИ ДОСТИЖИМА
Сокет создан и привязан – AF_ALG достижим
Немедленное смягчение:
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null
Затем обновите ядро, как только станут доступны патчи.
Исправление в апстриме: коммит a664bf3d603d
Скрипт завершается с кодом 1, если поверхность атаки достижима, и 0, если система безопасна — что делает его пригодным для использования в shell-скриптах, плейбуках Ansible и CI-конвейерах.
Пока не доступно обновление ядра, отключите уязвимый модуль:
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null
Официальное исправление — коммит a664bf3d603d в основном ядре. Обновитесь через менеджер пакетов вашего дистрибутива, как только станут доступны патчи.
Этот проверщик всегда сообщит о безопасности на современных устройствах Android (включая Termux). Сокет AF_ALG недоступен непривилегированным приложениям из-за обязательных политик SELinux, поэтому уязвимость не эксплуатируется в стандартных сборках Android.
Этот проект распространяется под лицензией MIT — подробности см. в LICENSE. Можете свободно использовать, изменять и распространять.
Отказ от ответственности: Этот инструмент предназначен только для защитных диагностических целей.
Не используйте его на системах, которые вам не принадлежат, или без явного письменного разрешения.