
Инструменты обнаружения и смягчения последствий для CVE-2026-31431 (Copy Fail) на ядрах Linux. Включает скрипты Phalanx-CCS и Silent4Labs, а также плейбук Ansible для применения временного смягчения (блокировка модуля algif_aead или параметр загрузки) на серверах.
Этот пакет предоставляет автоматизированное решение для обнаружения и смягчения уязвимости CVE-2026-31431 (также известной как Copy Fail) на системах Linux под управлением уязвимых ядер (версии от 4.14 до 6.12.84, от 6.13 до 6.18.21 и т. д.).
Инструментарий состоит из:
mitigate_copyfail.sh), который:
CONFIG_CRYPTO_USER_API_AEAD=m|y).=m): создаёт файл /etc/modprobe.d/disable-algif-aead.conf с install algif_aead /bin/false и выгружает модуль (rmmod).=y): добавляет параметр загрузки ядра initcall_blacklist=algif_aead_init (требуется перезагрузка).mitigation.yml), который:
Важное замечание: Смягчение является временным. Постоянное исправление — обновление ядра до версии, включающей патч
a664bf3d603d(≥6.18.22, ≥6.19.12 или ≥7.0).
become: yes)sudo (для применения смягчения)Скрипты обнаружения (Phalanx-CCS и Silent4Labs) безопасны и не эксплуатируют уязвимость; они лишь проверяют поверхность атаки.
cve-2026-31431-mitigation/
├── README.md
├── scripts/
│ ├── mitigate_copyfail.sh # Единый скрипт (обнаружение + смягчение)
│ ├── check_copyfail.py # Phalanx-CCS (проверка достижимости)
│ └── check-copyfail.sh # Silent4Labs (оценка риска)
├── ansible/
│ ├── ansible.cfg # (опционально) Конфигурация Ansible
│ ├── inventory.ini # Инвентарь серверов
│ └── mitigation.yml # Основной плейбук
└── resultados_cve/ # Автоматически создаваемая папка для журналов
git clone https://github.com/your-username/cve-2026-31431-mitigation.git
cd cve-2026-31431-mitigation/ansible
inventory.ini)Пример для удалённого сервера:
[servers]
server1 ansible_host=192.168.1.10 ansible_user=root
[localhost]
localhost ansible_connection=local
[all:vars]
ansible_become=yes
# ansible_become_password=my_password # если используется пароль для sudo
В файле mitigation.yml задача Copy scripts to remote использует src: "../scripts/{{ item }}". Убедитесь, что относительный путь корректен, или измените его в соответствии с вашей структурой.
Из каталога ansible/:
ansible-playbook -i inventory.ini mitigation.yml -k -K
-k запрашивает пароль SSH.-K запрашивает пароль become (sudo).При использовании localhost с ansible_connection=local SSH не требуется.
Плейбук отображает текстовую сводку, подобную следующей:
==========================================
РЕЗУЛЬТАТЫ СМЯГЧЕНИЯ
==========================================
Хост: server1
------------------------------------------
- Статус: СИСТЕМА ЗАЩИЩЕНА
- Код: (не применимо)
------------------------------------------
- Итоговая оценка: 40 / 100
- Уровень риска: СРЕДНИЙ
==========================================
Дополнительно в папку resultados_cve/<hostname>_mitigation.log сохраняется файл журнала с полным выводом скрипта (дата, версия ядра, сообщения обнаружения и т. д.).
Если извлечённые значения показывают ? или Not detected, включите отладочные задачи в mitigation.yml:
when: false на when: true в трёх DEBUG-задачах (или установите when: true, чтобы просмотреть clean_stdout и результаты regex).Отредактируйте задачи Create local results directory и Save full output to local file:
path: /absolute/path/resultados_cve
dest: "/absolute/path/resultados_cve/{{ inventory_hostname }}_mitigation.log"
Закомментируйте задачи копирования и измените путь в задаче Run mitigation script, чтобы он указывал на существующее расположение.
Измените when: false на when: true в последней задаче (Clean up remote scripts).
initcall_blacklist) требует перезагрузки для вступления в силу. Плейбук не выполняет перезагрузку автоматически; необходимо запланировать окно обслуживания.CONFIG_CRYPTO_USER_API_AEAD=y (встроенный модуль) модуль нельзя выгрузить с помощью rmmod; единственный способ — параметр загрузки./proc/crypto и /boot/config-*; они выполняются с become: yes.Этот проект распространяется под лицензией MIT. Сторонние скрипты (Phalanx-CCS, Silent4Labs) сохраняют свои собственные лицензии.
Если вы считаете этот инструмент полезным, пожалуйста, поставьте ему звезду на GitHub!