## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-OCHEBOTAR-COPY-FAIL-CVE-2026-31431-DETECTION-PROBE
# Linux Kernel LPE Probe Suite — Copy Fail и Dirty Frag
     
Безопасные средства обнаружения для двух семейств уязвимостей локального повышения привилегий в ядре Linux — **Copy Fail** (CVE-2026-31431) и **Dirty Frag** (CVE-2026-43284 / CVE-2026-43500) — обе затрагивают все основные дистрибутивы с 2017 года, обе могут быть эксплуатированы любым непривилегированным локальным пользователем, и обе требуют **независимых** мер смягчения.
> **Эти проверки не открывают сокетов и не выполняют криптографических или сетевых операций.** Обнаружение основано исключительно на версии ядра, метаданных пакетов дистрибутива, состоянии модулей и активных флагах смягчения — все данные доступны для чтения без `sudo`.
* * *
## ⚠️ Важно: две отдельные уязвимости
**Применение смягчения Copy Fail НЕ защищает от Dirty Frag.** Обе проверки должны быть запущены, и оба смягчения должны быть применены независимо.
* * *
## Файлы
root@kitploit:~
.
├── 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
* * *
## CVE-2026-31431 — Copy Fail
### Предыстория
Для эксплуатации требуется следующая цепочка системных вызовов:
root@kitploit:~
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
Ни один из этих вызовов не затрагивается проверкой. Обнаружение основано на:
1. **Диапазон версий ядра** — регрессия в 4.14–6.17; исправлено в 6.18.22 / 6.19.12 / 6.20+
2. **Версия пакета дистрибутива** — обнаружение бэкпортов вендора с известными порогами исправлений
3. **Состояние модуля** — загружен, отсутствует, встроен или `.ko` на диске (автоматически загружаемый)
4. **Активные меры смягчения** — черный список `modprobe.d` и флаг командной строки `initcall_blacklist`
### Быстрый запуск
root@kitploit:~
chmod +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: особенность встроенного модуля
На RHEL, AlmaLinux, Rocky Linux и их производных модуль `algif_aead` встроен в ядро. **Обходной путь через`modprobe.d` не действует.** Работает только `initcall_blacklist=algif_aead_init` в параметрах командной строки ядра. Проверка обнаруживает это и явно предупреждает.
root@kitploit:~
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
* * *
## CVE-2026-43284 / CVE-2026-43500 — Dirty Frag
### Предыстория
Dirty Frag объединяет две ошибки быстрого пути дешифрования на месте, обнаруженные Hyunwoo Kim (@v4bel), раскрытые ~2026-05-07, через неделю после Copy Fail:
* **CVE-2026-43284** — xfrm-ESP быстрый путь (`esp4`, `esp6`); исправление upstream `f4c50a4034e6`
* **CVE-2026-43500** — RxRPC быстрый путь (`rxrpc`); исправление upstream `aa54b1d27fe0`
Эксплойт присоединяет страницы pipe из кеша страниц `/usr/bin/su` в качестве фрагментов буфера сокета, затем запускает дешифрование на месте с помощью выбранного атакующим ключа — записывая произвольные байты непосредственно в кешированную копию setuid-бинарника, не затрагивая файл на диске.
**Смягчение Copy Fail (черный список algif_aead) НЕ предотвращает Dirty Frag.**
### Быстрый запуск
root@kitploit:~
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-выводе.
### Предупреждение IPsec
`esp4` и `esp6` — это преобразования ESP на стороне ядра, используемые IPsec (strongSwan, Libreswan). Внесение их в черный список **нарушает работу IPsec-туннелей**. Проверка обнаруживает активное использование IPsec через `ip xfrm state` и обнаружение демонов, и соответствующим образом корректирует рекомендации по устранению:
* **Нет IPsec:** примените полный черный список `modprobe.d` для всех трёх модулей.
* **IPsec используется:** ограничьте непривилегированные пространства имён пользователей (блокирует ESP-путь; также отдельно внесите `rxrpc` в черный список, если он не нужен):
root@kitploit:~
# 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
Для систем, ожидающих исправленное ядро, немедленно примените черный список `modprobe.d` (с учетом оговорки об IPsec).
### RHEL 8 / rxrpc
AlmaLinux / RHEL 8 вообще не собирает модуль `rxrpc`. Проверка автоматически помечает `kernel_vuln_rxrpc=not_affected` на RHEL/Rocky/Alma 8.x.
* * *
## Интеграции мониторинга
### Zabbix
Разверните обе проверки на каждом контролируемом хосте:
root@kitploit:~
mkdir -p /etc/zabbix/scripts
install -m 750 -o zabbix -g zabbix cve-2026-31431-check.sh /etc/zabbix/scripts/
install -m 750 -o zabbix -g zabbix cve-2026-43284-check.sh /etc/zabbix/scripts/
cp copy_fail_userparameter.conf /etc/zabbix/zabbix_agentd.d/
cp dirty_frag_userparameter.conf /etc/zabbix/zabbix_agentd.d/
systemctl restart zabbix-agent # or zabbix-agent2
Импортируйте `zabbix_template_copy_fail.yaml` через **Configuration → Templates → Import**.
Предоставляемые элементы UserParameter:
Шаблон Copy Fail включает триггер **HIGH** при status=1, **WARNING** при status=2. `sudo` не требуется — все файлы, читаемые обоими скриптами, доступны для чтения всем.
### Nagios / Icinga / NRPE
root@kitploit:~
install -m 755 cve-2026-31431-check.sh /usr/lib/nagios/plugins/
install -m 755 cve-2026-43284-check.sh /usr/lib/nagios/plugins/
# NRPE — add to /etc/nagios/nrpe.cfg:
command[check_copy_fail]=/usr/lib/nagios/plugins/cve-2026-31431-check.sh --nagios
command[check_dirty_frag]=/usr/lib/nagios/plugins/cve-2026-43284-check.sh --nagios
# CheckMK local checks:
echo '#!/bin/bash
OUT=$(/usr/lib/nagios/plugins/cve-2026-31431-check.sh --nagios); RC=$?
echo "$RC CVE-2026-31431 - $OUT"' > /usr/lib/check_mk_agent/local/copy_fail
echo '#!/bin/bash
OUT=$(/usr/lib/nagios/plugins/cve-2026-43284-check.sh --nagios); RC=$?
echo "$RC CVE-2026-43284 - $OUT"' > /usr/lib/check_mk_agent/local/dirty_frag
chmod +x /usr/lib/check_mk_agent/local/copy_fail \
/usr/lib/check_mk_agent/local/dirty_frag
### auditd — поведенческое / runtime обнаружение
Обнаруживает **активную попытку эксплуатации** в процессе, дополняя обе статические проверки.
root@kitploit:~
cp copy_fail_auditd.rules /etc/audit/rules.d/
augenrules --load
# Watch for unexpected AF_ALG callers:
ausearch -k copy_fail_af_alg --interpret | \
grep -v -E 'cryptsetup|veritysetup|systemd-crypt|kcapi'
Заготовки правил Wazuh (уровень 13 / 15) встроены в комментарии файла `.rules`.
### Wazuh SCA
root@kitploit:~
cp wazuh_sca/copy_fail_sca.yml /var/ossec/etc/shared/default/
/var/ossec/bin/agent_control -r -a
Результаты: **Security → SCA → Filter by policy`cve_2026_31431_copy_fail`**
### Ansible — массовое сканирование
root@kitploit:~
ansible-playbook -i inventory/hosts ansible/copy_fall_scan.yml
# Limit to a subset:
ansible-playbook -i inventory/hosts ansible/copy_fall_scan.yml --limit webservers
Записывает JSON для каждого хоста + `summary.txt` в `/tmp/copy_fail_results/` на управляющем узле. Плейбук завершается с ненулевым кодом, если любой хост УЯЗВИМ.
* * *
## Трекеры безопасности вендоров
* * *
## Ссылки
**Copy Fail**
* Оригинальная статья Xint/Theori
* Уведомление CERT-EU 2026-005
* NVD CVE-2026-31431
* Уведомление безопасности Ubuntu USN-8226-1
* Уведомление Rocky Linux 2026-05-11
* Ответ SUSE на Copy Fail
**Dirty Frag**
* Статья о Dirty Frag (copy.fail)
* NVD CVE-2026-43284
* Уведомление AlmaLinux 2026-05-07
* Анализ обнаружения Dirty Frag от Sysdig TRT
* Блог Microsoft Security — активная атака
* Блог Wiz — Dirty Frag