Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script — Скрипт обнаружения для CVE-2026-31431 (Copy Fail), который проверяет версию ядра, наличие патча, конфигурации ядра, доступность сокета AF_ALG, setuid-бинарники и меры смягчения для определения статуса уязвимости в Linux-системах. | Kitploit
Инструменты/GitHubGitHub/liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script
Безопасность облачной инфраструктурыСканеры уязвимостейБезопасность контейнеровАнализ уязвимостейАудит конфигурацииDevSecOpsОбнаружение ВторженийРеагирование на Инциденты
GitHubliamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script

CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script

Скрипт обнаружения для CVE-2026-31431 (Copy Fail), который проверяет версию ядра, наличие патча, конфигурации ядра, доступность сокета AF_ALG, setuid-бинарники и меры смягчения для определения статуса уязвимости в Linux-системах.

Репозиторий
262415 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-31431 — Copy Fail — скрипт обнаружения уязвимости

Только обнаружение. Рабочий PoC уже существует на copy.fail/#exploit. Этот скрипт предназначен для системных администраторов и команд безопасности, чтобы определить, где они уязвимы — или всё ещё уязвимы после установки патча.


О чём это?

29 апреля 2026 года исследовательская группа Xint Code Research публично раскрыла уязвимость под названием Copy Fail (CVE-2026-31431). Это логическая ошибка, которая незаметно присутствует в ядре Linux примерно с 2017 года — почти десятилетие — и позволяет любому непривилегированному локальному пользователю получить root.

Не «получить root при определённых условиях, с некоторой удачей и попутным ветром». Просто... получить root. Надёжно. Практически на каждом крупном дистрибутиве Linux.

Она затрагивает Ubuntu, Amazon Linux, RHEL, SUSE и всё остальное, что работает на стандартном ядре последних ~8 лет. Тот же скрипт, без перекомпиляции, без изменений под каждый дистрибутив.

Да, всё настолько плохо, как звучит.

Краткая версия того, как это работает

Ядро Linux имеет криптоподсистему, доступную непривилегированным пользователям через сокеты AF_ALG. Существует механизм под названием splice(), который может передавать данные файла напрямую в эту подсистему без их копирования — это означает, что кэшированная в памяти ядра копия файла («page cache») оказывается внутри криптографической операции.

Один конкретный алгоритм — authencesn, используемый для расширенных порядковых номеров IPsec — имеет особенность: он использует выходной буфер как рабочую область и записывает 4 байта чуть дальше, чем положено. Обычно это безвредно. Но когда страницы page cache из setuid-бинарника, такого как /usr/bin/su, оказываются в цепочке этого выходного буфера (благодаря «оптимизации» 2017 года в algif_aead.c), эти 4 байта попадают прямо в кэшированную ядром копию бинарника.

Операция завершается ошибкой. Ядро никогда не помечает эту страницу как «грязную». Файл на диске не тронут. Инструменты проверки целостности файлов, проверяющие контрольные суммы на диске, не видят ничего подозрительного.

Но page cache — это то, что исполняется. А su имеет setuid root.

Полное техническое описание находится на xint.io и действительно стоит прочтения.


Что проверяют скрипты

Python-скрипт — 13 проверок

Семь из оригинального релиза плюс шесть новых проверок, добавленных для закрытия пробелов в обнаружении:

№ПроверкаЧто она ищет
1Версия ядраНаходится ли это ядро в затронутом диапазоне (4.10–6.14)?
2Наличие патчаПрисутствует ли исправляющий коммит в вашем работающем ядре?
3Модуль algif_aeadЗагружен ли уязвимый модуль или может быть загружен?
4CONFIG_CRYPTO_AUTHENC (новое)Встроен ли CONFIG_CRYPTO_AUTHENC (=y) или он модуль (=m)? Эта единственная опция собирает и authenc, и authencesn. Встроенный вариант означает, что блокировка через modprobe blacklist не работает.
5CONFIG_CRYPTO_USER_API_AEAD (новое)Скомпилирован ли вообще пользовательский интерфейс AF_ALG AEAD? Если нет, весь путь эксплуатации закрыт на этапе компиляции.
6Сокет AF_ALGМожет ли непривилегированный пользователь открыть его прямо сейчас?
7Python os.spliceДоступен ли путь эксплуатации на чистом Python?
8Setuid-бинарникиРасширенный список читаемых setuid-root целей, присутствующих в системе.
9Смягчающие мерыAppArmor, SELinux, seccomp — что установлено?
10Пользовательские пространства имён (новое)Включены ли непривилегированные пользовательские пространства имён? (Не блокирует Copy Fail напрямую, но влияет на более широкую поверхность локального повышения привилегий.)
11Прозрачные огромные страницы (новое)Статус THP — может влиять на выравнивание page cache и надёжность эксплуатации.
12Определение окружения (новое)Контекст Docker/контейнера/ВМ — контейнеры используют ядро хоста; патчить нужно хост.
13Предупреждение о root-пользователе (новое)Предупреждает при запуске от root, поскольку несколько проверок дают ложные срабатывания для root независимо от ограничений для непривилегированных пользователей.

Shell-скрипт — 10 проверок

Bash-скрипт покрывает ту же основную логику обнаружения, но опускает три специфичных для Python пункта:

№ПроверкаПримечания
1Версия ядра
2Наличие патча
3Модуль algif_aead
4Сокет AF_ALGИспользует Python как помощник, если доступен; иначе полагается на вывод из конфигурации ядра
5Setuid-бинарникиРасширенный список, как в Python-версии
6Смягчающие мерыAppArmor, SELinux, seccomp
7CONFIG_CRYPTO_AUTHENC
8Пользовательские пространства имён
9Прозрачные огромные страницы
10Определение окружения

Отсутствует в shell-скрипте (по сравнению с Python):

Отсутствующая проверкаПричина
CONFIG_CRYPTO_USER_API_AEADЕщё не реализовано — запланировано
Доступность Python os.spliceНеприменимо к shell-скрипту
Предупреждение о root-пользователеЕщё не реализовано — запланировано

Ни один из скриптов ничего не исправляет и не эксплуатирует. Они сообщают вам правду о вашей системе, чтобы вы могли действовать.


Требования

  • Python 3.6+
  • Без внешних зависимостей — только стандартная библиотека
  • Root не требуется (намеренно — мы проверяем то, что может видеть непривилегированный атакующий)
  • Рекомендуется: запуск от непривилегированного пользователя — некоторые проверки (сокет AF_ALG, stat setuid) всегда успешны для root и будут сообщать ложные срабатывания

Использование

# Склонируйте или скачайте скрипт, затем:
python3 cve-2026-31431-detect.py

Вот и всё. Цветной отчёт с итогом в конце.

Коды выхода

Скрипт завершается с ненулевым кодом при обнаружении уязвимых условий, что делает его пригодным для использования в конвейерах:

КодЗначение
0Уязвимых условий не обнаружено
1Обнаружено одно или несколько уязвимых условий
# Пример: провалить шаг CI, если хост уязвим
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
  echo "УЯЗВИМ — блокировать развёртывание"
elif [ $rc -ne 0 ]; then
  echo "ОШИБКА — скрипт не завершился (код выхода $rc)"
fi

Пример вывода

CVE-2026-31431 'Copy Fail' — Обнаружение уязвимости
Повреждение page cache authencesn / локальное повышение привилегий
Запуск от uid=1001, euid=1001

=== Версия ядра ===
  [УЯЗВИМ] Версия ядра
          Причина : Ядро находится в уязвимом диапазоне (4.10 – 6.14)
          Детали : Релиз: 6.12.0-124.45.1.el10_1 — статус патча необходимо подтвердить

=== CONFIG_CRYPTO_AUTHENC (Конфигурация ядра) ===
  [УЯЗВИМ] CONFIG_CRYPTO_AUTHENC
          Причина : Собран как модуль (=m): автоматически загружается при bind() AF_ALG; блокировка через modprobe blacklist — правильная мера смягчения

=== CONFIG_CRYPTO_USER_API_AEAD (Конфигурация ядра) ===
  [УЯЗВИМ] CONFIG_CRYPTO_USER_API_AEAD
          Причина : Интерфейс AF_ALG AEAD — загружаемый модуль — непривилегированные пользователи могут получить доступ к криптоподсистеме через сокеты AF_ALG

...

  СИСТЕМА, ВЕРОЯТНО, УЯЗВИМА К CVE-2026-31431

  Рекомендуемые действия:
    1. Примените обновление ядра вашего дистрибутива для CVE-2026-31431
    2. До установки патча заблокируйте модуль:
         echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
         rmmod algif_aead 2>/dev/null
       ПРИМЕЧАНИЕ: это работает ТОЛЬКО когда CONFIG_CRYPTO_AUTHENC=m (модуль).
       Если CONFIG_CRYPTO_AUTHENC=y (встроен), единственное решение — патч.

Скачать инструмент