
Инструментарий для безопасного обнаружения CVE-2026-31431 "Copy Fail" и CVE-2026-43284 "Dirty Frag" — локальное повышение привилегий в модуле algif_aead ядра Linux, затрагивающее все основные дистрибутивы с 2017 года.
Безопасные средства обнаружения для двух семейств уязвимостей локального повышения привилегий в ядре Linux — Copy Fail (CVE-2026-31431) и Dirty Frag (CVE-2026-43284 / CVE-2026-43500) — обе затрагивают все основные дистрибутивы с 2017 года, обе могут быть эксплуатированы любым непривилегированным локальным пользователем, и обе требуют независимых мер смягчения.
Эти проверки не открывают сокетов и не выполняют криптографических или сетевых операций. Обнаружение основано исключительно на версии ядра, метаданных пакетов дистрибутива, состоянии модулей и активных флагах смягчения — все данные доступны для чтения без
sudo.
| Copy Fail | Dirty Frag | |
|---|---|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 + CVE-2026-43500 |
| Модули | algif_aead | esp4, esp6, rxrpc |
| Появился | Авг 2017 (ядро 4.14) | Янв 2017 / Июн 2023 |
| Смягчение | modprobe.d черный список для algif_aead | modprobe.d черный список для esp4/esp6/rxrpc |
| Скрипт проверки | cve-2026-31431-check.sh | cve-2026-43284-check.sh |
Применение смягчения Copy Fail НЕ защищает от Dirty Frag. Обе проверки должны быть запущены, и оба смягчения должны быть применены независимо.
.
├── cve-2026-31431-check.sh Copy Fail probe (all output modes)
├── copy_fail_userparameter.conf Zabbix agent UserParameter — Copy Fail
├── zabbix_template_copy_fail.yaml Zabbix 6.4 template — Copy Fail
├── copy_fail_auditd.rules auditd behavioral detection — Copy Fail
├── cve-2026-43284-check.sh Dirty Frag probe (all output modes)
├── dirty_frag_userparameter.conf Zabbix agent UserParameter — Dirty Frag
├── wazuh_sca/
│ └── copy_fail_sca.yml Wazuh SCA compliance policy
└── ansible/
└── copy_fall_scan.yml Fleet-wide Ansible scan playbook
Для эксплуатации требуется следующая цепочка системных вызовов:
socket(AF_ALG, SOCK_SEQPACKET, 0)
bind(fd, {alg_type="aead", alg_name="authencesn(hmac(sha256),cbc(aes))"})
accept(fd, ...)
splice(suid_binary_fd, op_fd) ← page cache fed into crypto subsystem
sendmsg / recvmsg ← 4-byte scratch write lands in page cache
Ни один из этих вызовов не затрагивается проверкой. Обнаружение основано на:
.ko на диске (автоматически загружаемый)modprobe.d и флаг командной строки initcall_blacklistchmod +x cve-2026-31431-check.sh
./cve-2026-31431-check.sh # human-readable
./cve-2026-31431-check.sh --json # machine-readable
./cve-2026-31431-check.sh --nagios # Nagios/Icinga/NRPE
./cve-2026-31431-check.sh --zabbix # integer 0/1/2 for Zabbix item
Коды возврата: 0 = ЗАПЛАЧЕНО или СМЯГЧЕНО · 1 = УЯЗВИМО · 2 = НЕИЗВЕСТНО
| Дистрибутив | Исправлено в | Уведомление |
|---|---|---|
| RHEL / Rocky / Alma 8.10 | kernel-4.18.0-553.123.1.el8_10 | Rocky 2026-05-11 |
| RHEL / Rocky / Alma 9.7 | kernel-5.14.0-611.54.1.el9_7 | same |
| RHEL / Rocky / Alma 10.1 | kernel-6.12.0-124.55.1.el10_1 | same |
| Debian 11 (bullseye) | linux 5.10.251-3 | DLA-4560-1 |
| Debian 12 (bookworm) | linux 6.1.170-1 | DSA-6243-1 |
| Debian 13 (trixie) | linux 6.12.85-1 | DSA-6238-1 |
| Ubuntu 22.04 / 24.04 | Нет исправленного ядра на данный момент — смягчение kmod через USN-8226-1 | USN-8226-1 |
| SLES 12 SP5 | kernel-default 4.12.14-122.299.1 | SUSE-SU-2026:1669-1 |
| SLES 15 SP5 | kernel-default 5.14.21-150500.55.144.1 | SUSE-SU-2026:1670-1 |
| SLES 15 SP6 | kernel-default 6.4.0-150600.23.92.1 | SUSE-SU-2026:1671-1 |
| SLES 15 SP7 | kernel-default 6.4.0-150700.53.40.1 | SUSE-SU-2026:1669-1 |
| SLES 16.0 | kernel-default 6.12.0-160000.29.1 | SUSE advisory |
Скрипт автоматически сравнивает с этими порогами и устанавливает вердикт «ЗАПЛАЧЕНО», когда текущий пакет соответствует порогу или превышает его.
На RHEL, AlmaLinux, Rocky Linux и их производных модуль algif_aead встроен в ядро. Обходной путь через modprobe.d не действует. Работает только initcall_blacklist=algif_aead_init в параметрах командной строки ядра. Проверка обнаруживает это и явно предупреждает.
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
Dirty Frag объединяет две ошибки быстрого пути дешифрования на месте, обнаруженные Hyunwoo Kim (@v4bel), раскрытые ~2026-05-07, через неделю после Copy Fail:
esp4, esp6); исправление upstream f4c50a4034e6rxrpc); исправление upstream aa54b1d27fe0Эксплойт присоединяет страницы pipe из кеша страниц /usr/bin/su в качестве фрагментов буфера сокета, затем запускает дешифрование на месте с помощью выбранного атакующим ключа — записывая произвольные байты непосредственно в кешированную копию setuid-бинарника, не затрагивая файл на диске.
Смягчение Copy Fail (черный список algif_aead) НЕ предотвращает Dirty Frag.
chmod +x cve-2026-43284-check.sh
./cve-2026-43284-check.sh # human-readable
./cve-2026-43284-check.sh --json # machine-readable
./cve-2026-43284-check.sh --nagios # Nagios/Icinga/NRPE
./cve-2026-43284-check.sh --zabbix # integer 0/1/2 for Zabbix item
Проверка независимо проверяет esp4, esp6 и rxrpc и сообщает отдельные булевы значения cve_43284_safe / cve_43500_safe в JSON-выводе.
esp4 и esp6 — это преобразования ESP на стороне ядра, используемые IPsec (strongSwan, Libreswan). Внесение их в черный список нарушает работу IPsec-туннелей. Проверка обнаруживает активное использование IPsec через ip xfrm state и обнаружение демонов, и соответствующим образом корректирует рекомендации по устранению:
modprobe.d для всех трёх модулей.rxrpc в черный список, если он не нужен):
# RHEL-family
sysctl -w user.max_user_namespaces=0
echo "install rxrpc /bin/false" >> /etc/modprobe.d/dirtyfrag.conf
# Ubuntu / Debian
sysctl -w kernel.unprivileged_userns_clone=0
echo "install rxrpc /bin/false" >> /etc/modprobe.d/dirtyfrag.conf
| Дистрибутив | CVE-2026-43284 | CVE-2026-43500 (rxrpc) |
|---|---|---|
| RHEL / Rocky / Alma 8.10 | 4.18.0-553.123.2.el8_10 | N/A — rxrpc не поставляется на RHEL 8 |
| RHEL / Rocky / Alma 9.x | Ожидается | Ожидается |
| Debian / Ubuntu / SLES | Ожидается | Ожидается |