
Outillage de détection sûr pour CVE-2026-31431 "Copy Fail" et CVE-2026-43284 "Dirty Frag" — une élévation locale de privilèges dans le module algif_aead du noyau Linux affectant toutes les principales distributions depuis 2017.
Outils de détection sûrs pour deux familles de vulnérabilités d'élévation de privilèges locaux du noyau Linux — Copy Fail (CVE-2026-31431) et Dirty Frag (CVE-2026-43284 / CVE-2026-43500) — affectant toutes les principales distributions depuis 2017, toutes deux exploitables par tout utilisateur local non privilégié, et toutes deux nécessitant des mitigations indépendantes.
Ces sondes n'ouvrent aucun socket et n'effectuent aucune opération cryptographique ou réseau. La détection repose uniquement sur la version du noyau, les métadonnées des paquets de la distribution, l'état des modules et les indicateurs de mitigation actifs — le tout lisible par tous sans
sudo.
| Copy Fail | Dirty Frag | |
|---|---|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 + CVE-2026-43500 |
| Module(s) | algif_aead | esp4, esp6, rxrpc |
| Introduit | Août 2017 (noyau 4.14) | Janv. 2017 / Juin 2023 |
| Mitigation | liste noire modprobe.d pour algif_aead | liste noire modprobe.d pour esp4/esp6/rxrpc |
| Script de sonde | cve-2026-31431-check.sh | cve-2026-43284-check.sh |
Appliquer la mitigation Copy Fail ne protège PAS contre Dirty Frag. Les deux sondes doivent être exécutées et les deux mitigations appliquées indépendamment.
.
├── 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
L'exploit nécessite cette chaîne d'appels système exacte :
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
Aucun de ces appels n'est effectué par la sonde. La détection repose sur :
.ko sur disque (chargeable automatiquement)modprobe.d et indicateur initcall_blacklist de la ligne de commande du noyauchmod +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
Codes de sortie : 0 = CORRIGÉ ou MITIGÉ · 1 = VULNÉRABLE · 2 = INCONNU
| Distro | Version corrigée | Avis de sécurité |
|---|---|---|
| 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 | idem |
| RHEL / Rocky / Alma 10.1 | kernel-6.12.0-124.55.1.el10_1 | idem |
| 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 | Pas encore de noyau corrigé — mitigation 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 | Avis SUSE |
Le script compare automatiquement ces seuils et attribue le verdict CORRIGÉ lorsque le paquet installé atteint ou dépasse le seuil.
Sur RHEL, AlmaLinux, Rocky Linux et leurs dérivés, algif_aead est compilé dans le noyau. La solution de contournement modprobe.d n'a aucun effet. Seul initcall_blacklist=algif_aead_init sur la ligne de commande du noyau fonctionne. La sonde le détecte et émet un avertissement explicite.
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
Dirty Frag enchaîne deux bogues de décryptage en place sur le chemin rapide découverts par Hyunwoo Kim (@v4bel), divulgués vers le 7 mai 2026, une semaine après Copy Fail :
esp4, esp6) ; correctif en amont f4c50a4034e6rxrpc) ; correctif en amont aa54b1d27fe0L'exploit attache les pages de pipe du cache de pages de /usr/bin/su comme fragments paginés de socket-buffer, puis pilote le décryptage en place avec une clé choisie par l'attaquant — écrivant des octets arbitraires directement dans la copie en cache d'un binaire setuid, sans toucher au fichier sur disque.
La mitigation Copy Fail (liste noire algif_aead) ne prévient PAS 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 sonde vérifie esp4, esp6 et rxrpc indépendamment et rapporte des booléens distincts cve_43284_safe / cve_43500_safe dans la sortie JSON.
esp4 et esp6 sont les transformations ESP côté noyau utilisées par IPsec (strongSwan, Libreswan). Leur mise sur liste noire casse les tunnels IPsec. La sonde détecte l'utilisation active d'IPsec via ip xfrm state et la détection de démons, et adapte les recommandations de remédiation en conséquence :
modprobe.d complète pour les trois modules.rxrpc sur liste noire séparément si ce n'est pas nécessaire) :
# 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