Sploitus

Exploit for copy-fail-CVE-2026-31431-detection-probe

kitploit · 2026-08-27

Exploit Code

MARKDOWN274 lines
## 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

![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) ![CVE-2026-31431](https://img.shields.io/badge/CVE-2026--31431-red) ![CVE-2026-43284](https://img.shields.io/badge/CVE-2026--43284-red) ![CVE-2026-43500](https://img.shields.io/badge/CVE-2026--43500-red) ![CVSS](https://img.shields.io/badge/CVSS-7.8%20HIGH-orange) ![Shell](https://img.shields.io/badge/shell-bash-89e051)

Безопасные средства обнаружения для двух семейств уязвимостей локального повышения привилегий в ядре 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