
Herramientas de detección segura para CVE-2026-31431 "Copy Fail" y CVE-2026-43284 "Dirty Frag": una escalada de privilegios local en el módulo algif_aead del kernel de Linux que afecta a todas las distribuciones principales desde 2017.
Herramientas de detección seguras para dos familias de vulnerabilidades relacionadas de escalada de privilegios local del kernel de Linux — Copy Fail (CVE-2026-31431) y Dirty Frag (CVE-2026-43284 / CVE-2026-43500) — ambas afectan a todas las distribuciones principales desde 2017, ambas explotables por cualquier usuario local sin privilegios, y ambas requieren mitigaciones independientes.
Estas sondas no abren sockets y no realizan operaciones criptográficas ni de red. La detección se basa únicamente en la versión del kernel, los metadatos de paquetes de la distribución, el estado de los módulos y los indicadores de mitigación activos — todo legible por cualquier usuario sin
sudo.
| Copy Fail | Dirty Frag | |
|---|---|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 + CVE-2026-43500 |
| Módulo(s) | algif_aead | esp4, esp6, rxrpc |
| Introducido | Ago 2017 (kernel 4.14) | Ene 2017 / Jun 2023 |
| Mitigación | Lista negra de modprobe.d para algif_aead | Lista negra de modprobe.d para esp4/esp6/rxrpc |
| Script de sondeo | cve-2026-31431-check.sh | cve-2026-43284-check.sh |
Aplicar la mitigación de Copy Fail NO protege contra Dirty Frag. Deben ejecutarse ambas sondas y aplicarse ambas mitigaciones de forma independiente.
.
├── 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
El exploit requiere exactamente esta cadena de syscalls:
socket(AF_ALG, SOCK_SEQPACKET, 0)
bind(fd, {alg_type="aead", alg_name="authesn(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
La sonda no toca ninguna de ellas. La detección se basa en:
.ko en disco (auto-cargable)modprobe.d y el indicador initcall_blacklist en la línea de comandos del kernelchmod +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
Códigos de salida: 0 = PATCHED o MITIGATED · 1 = VULNERABLE · 2 = UNKNOWN
| Distribución | Parcheado en | 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 | 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 | Aún no hay kernel parcheado — mitigación con kmod mediante 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 de SUSE |
El script compara automáticamente contra estos umbrales y establece el veredicto en PATCHED cuando el paquete en ejecución iguala o supera el umbral.
En RHEL, AlmaLinux, Rocky Linux y derivados, algif_aead está compilado dentro del kernel. La solución alternativa de modprobe.d no tiene efecto. Solo funciona initcall_blacklist=algif_aead_init en la línea de comandos del kernel. La sonda detecta esta situación y advierte explícitamente.
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
Dirty Frag encadena dos errores de ruta rápida (fast-path) de descifrado in-place descubiertos por Hyunwoo Kim (@v4bel), divulgados alrededor del 2026-05-07, una semana después de Copy Fail:
esp4, esp6); corrección upstream f4c50a4034e6rxrpc); corrección upstream aa54b1d27fe0El exploit adjunta páginas de pipe de la caché de páginas de /usr/bin/su como fragmentos paginados de socket-buffer y luego realiza un descifrado in-place con una clave elegida por el atacante — escribiendo bytes arbitrarios directamente en la copia en caché de un binario setuid, sin tocar el archivo en disco.
La mitigación de Copy Fail (lista negra de algif_aead) NO previene 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
La sonda comprueba esp4, esp6 y rxrpc de forma independiente e informa de los booleanos separados cve_43284_safe / cve_43500_safe en la salida JSON.
esp4 y esp6 son las transformaciones ESP del lado del kernel utilizadas por IPsec (strongSwan, Libreswan). Ponerlas en la lista negra rompe los túneles IPsec. La sonda detecta el uso activo de IPsec mediante ip xfrm state y la detección de daemons, y ajusta el consejo de remediación en consecuencia:
modprobe.d para los tres módulos.rxrpc en la lista negra por separado si no es necesario):
# 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