
Ferramentas de detecção segura para CVE-2026-31431 "Copy Fail" e CVE-2026-43284 "Dirty Frag" — uma escalada de privilégio local no módulo algif_aead do kernel Linux que afeta todas as principais distribuições desde 2017.
Ferramenta de detecção segura para duas famílias de vulnerabilidades de elevação de privilégio local no kernel Linux — Copy Fail (CVE-2026-31431) e Dirty Frag (CVE-2026-43284 / CVE-2026-43500) — ambas afetando todas as principais distribuições desde 2017, ambas exploráveis por qualquer usuário local sem privilégios, e ambas exigindo mitigação independente.
Estas sondas não abrem sockets e não realizam operações criptográficas ou de rede. A detecção é baseada exclusivamente na versão do kernel, metadados de pacotes da distribuição, estado do módulo e flags de mitigação ativas — todos legíveis mundialmente sem
sudo.
| Copy Fail | Dirty Frag | |
|---|---|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 + CVE-2026-43500 |
| Módulo(s) | algif_aead | esp4, esp6, rxrpc |
| Introduzida | Ago 2017 (kernel 4.14) | Jan 2017 / Jun 2023 |
| Mitigação | Lista negra modprobe.d para algif_aead | Lista negra modprobe.d para esp4/esp6/rxrpc |
| Script de sonda | cve-2026-31431-check.sh | cve-2026-43284-check.sh |
Aplicar a mitigação do Copy Fail NÃO protege contra Dirty Frag. Ambas as sondas devem ser executadas e ambas as mitigações aplicadas de forma independente.
.
├── cve-2026-31431-check.sh Sonda Copy Fail (todos os modos de saída)
├── copy_fail_userparameter.conf UserParameter do agente Zabbix — Copy Fail
├── zabbix_template_copy_fail.yaml Template Zabbix 6.4 — Copy Fail
├── copy_fail_auditd.rules Regras de detecção comportamental auditd — Copy Fail
├── cve-2026-43284-check.sh Sonda Dirty Frag (todos os modos de saída)
├── dirty_frag_userparameter.conf UserParameter do agente Zabbix — Dirty Frag
├── wazuh_sca/
│ └── copy_fail_sca.yml Política de conformidade SCA do Wazuh
└── ansible/
└── copy_fall_scan.yml Playbook de varredura Ansible em toda a frota
O exploit requer exatamente esta cadeia de chamadas de sistema:
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) ← cache de páginas alimentado no subsistema criptográfico
sendmsg / recvmsg ← gravação de 4 bytes no scratch na cache de páginas
Nenhuma destas é tocada pela sonda. A detecção é baseada em:
.ko no disco (carregável automaticamente)modprobe.d e flag de linha de comando initcall_blacklistchmod +x cve-2026-31431-check.sh
./cve-2026-31431-check.sh # legível por humanos
./cve-2026-31431-check.sh --json # legível por máquina
./cve-2026-31431-check.sh --nagios # Nagios/Icinga/NRPE
./cve-2026-31431-check.sh --zabbix # inteiro 0/1/2 para item Zabbix
Códigos de saída: 0 = PATCHED ou MITIGADO · 1 = VULNERÁVEL · 2 = DESCONHECIDO
| Distribuição | Corrigido em | Aviso |
|---|---|---|
| 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 | mesmo |
| RHEL / Rocky / Alma 10.1 | kernel-6.12.0-124.55.1.el10_1 | mesmo |
| 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 | Nenhum kernel corrigido ainda — mitigação kmod via 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 | Aviso SUSE |
O script compara automaticamente com esses limites e define o veredito como PATCHED quando o pacote em execução atende ou excede o limite.
No RHEL, AlmaLinux, Rocky Linux e derivados, algif_aead é compilado no kernel. A solução alternativa modprobe.d não tem efeito. Apenas initcall_blacklist=algif_aead_init na linha de comando do kernel funciona. A sonda detecta isso e avisa explicitamente.
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
Dirty Frag encadeia dois bugs de caminho rápido de descriptografia in-place descobertos por Hyunwoo Kim (@v4bel), divulgados ~2026-05-07, uma semana após Copy Fail:
esp4, esp6); correção upstream f4c50a4034e6rxrpc); correção upstream aa54b1d27fe0O exploit anexa páginas de pipe do cache de páginas de /usr/bin/su como fragmentos de socket-buffer paginados, então conduz a descriptografia in-place com uma chave escolhida pelo atacante — escrevendo bytes arbitrários diretamente na cópia em cache de um binário setuid, sem tocar no arquivo em disco.
A mitigação do Copy Fail (lista negra algif_aead) NÃO impede Dirty Frag.
chmod +x cve-2026-43284-check.sh
./cve-2026-43284-check.sh # legível por humanos
./cve-2026-43284-check.sh --json # legível por máquina
./cve-2026-43284-check.sh --nagios # Nagios/Icinga/NRPE
./cve-2026-43284-check.sh --zabbix # inteiro 0/1/2 para item Zabbix
A sonda verifica esp4, esp6 e rxrpc independentemente e relata booleanos separados cve_43284_safe / cve_43500_safe na saída JSON.
esp4 e esp6 são as transformações ESP do lado do kernel usadas pelo IPsec (strongSwan, Libreswan). Colocá-los na lista negra quebra túneis IPsec. A sonda detecta uso ativo de IPsec via ip xfrm state e detecção de daemon, e ajusta o conselho de remediação de acordo:
modprobe.d completa para todos os três módulos.rxrpc na lista negra separadamente se não for necessário):
# Família RHEL
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
| Distribuição | CVE-2026-43284 | CVE-2026-43500 (rxrpc) |
|---|---|---|
| RHEL / Rocky / Alma 8.10 | 4.18.0-553.123.2.el8_10 | N/A — rxrpc não distribuído no RHEL 8 |
| RHEL / Rocky / Alma 9.x | Pendente | Pendente |
| Debian / Ubuntu / SLES | Pendente | Pendente |