
CVE-2026-31431 Copy Fail — скрипт обнаружения уязвимости ядра Linux
CVE-2026-31431 (Copy Fail) — это уязвимость локального повышения привилегий в ядре Linux, которая через сокеты AF_ALG (address family 38) в сочетании с системным вызовом нулевого копирования splice() обходит права на запись в файлы и изменяет page cache, позволяя модифицировать SUID-бинарники без прав на запись и получать root-привилегии.
socket(AF_ALG, SOCK_SEQPACKET, 0) # создание сокета AF_ALG
-> bind(authencesn(hmac(sha256),cbc(aes))) # привязка шаблона шифрования AEAD
-> sendmsg(AEAD операция) # запуск пути шифрования в ядре
-> splice(-> целевой файл) # запись с нулевым копированием, обход проверки прав
-> изменение SUID-файлов, таких как /usr/bin/su # повышение привилегий до root
| Ветка ядра | Затронутый диапазон | Исправленная версия |
|---|---|---|
| mainline / 6.19.x | < 6.19.12 | >= 6.19.12 |
| 6.18.x (stable) | < 6.18.22 | >= 6.18.22 |
| 6.12.x (LTS) | < 6.12.23 | >= 6.12.23 |
| 6.6.x (LTS) | < 6.6.87 | >= 6.6.87 |
| 6.1.x (LTS) | < 6.1.130 | >= 6.1.130 |
| 4.14 ~ < 7.0 | все затронуты | обновление до безопасной версии |
| < 4.14 | не затронуты | - |
| >= 7.0 | содержит исправление | - |
# Скачать скрипт
wget https://raw.githubusercontent.com/tangjie1/CVE-2026-31431-Check/main/cve-2026-31431-check.sh
# Выдать права на выполнение и запустить (требуется root)
chmod +x cve-2026-31431-check.sh
sudo ./cve-2026-31431-check.sh
# Неинтерактивный режим (для автоматизации/CI)
sudo ./cve-2026-31431-check.sh --non-interactive
| № | Проверка | Описание |
|---|---|---|
| [1.0] | Таблица затронутых версий | Сравнение затронутых/исправленных версий по веткам |
| [1.1] | Версия ядра | Сравнение с известными затронутыми диапазонами и исправленными базовыми версиями |
| [1.2] | Состояние модуля algif_aead | Четыре состояния: встроен / загружен / существует и может быть загружен по требованию / отсутствует |
| [1.3] | Шаблон шифрования authencesn | Доступен ли в /proc/crypto |
| [1.4] | Меры смягчения | initcall_blacklist + чёрный список modprobe.d |
| [1.5] | Комплексная оценка | Многофакторный перекрёстный анализ с выводом safe/medium/high/critical |
| № | Проверка | Описание |
|---|---|---|
| [2.1] | Проверка page cache SUID | Сравнение dd direct I/O и хэша кэша |
| [2.2] | История загрузки модулей | dmesg + время загрузки lsmod |
| [2.3] | Сканирование истории Shell | Сопоставление ключевых слов во всех .bash_history пользователей |
| [2.4] | Проверка системных файлов | Аномальные пользователи UID=0 / время изменения passwd и SUID |
| [2.5] | Сканирование временных каталогов | Подозрительные файлы в /tmp /var/tmp /dev/shm за последние 24 часа |
| [2.6] | Аудит системных журналов | Записи о неудачных su + ключевые слова уязвимости sudo |
| [2.7] | Обнаружение побега из контейнера | Среда Docker + seccomp + /proc/1/root |
| Способ | Принцип | Требуется ли перезагрузка | Сценарий применения |
|---|---|---|---|
| Способ 1 | Чёрный список modprobe.d + rmmod | Нет | CONFIG=m (режим модуля) |
| Способ 2 | Параметр ядра initcall_blacklist | Да | CONFIG=y (встроенный режим) или глубокая защита |
| Способ 3 | Обновление ядра до безопасной версии | Да | Постоянное исправление (рекомендуется) |
Ubuntu / Debian / Kali / CentOS / RHEL / Rocky / AlmaLinux / Fedora / openSUSE / Arch Linux / Alpine Linux
MIT License
Данный инструмент предназначен только для исследований в области безопасности и авторизованного тестирования на проникновение. Пользователь обязан соблюдать местные законы и нормативные акты и использовать инструмент только на целевых системах с явно полученным разрешением. Разработчик не несёт ответственности за любые последствия неавторизованного использования.