
Sicherheitserkennungs-Tooling für CVE-2026-31431 „Copy Fail" und CVE-2026-43284 „Dirty Frag" – eine lokale Rechteausweitung im algif_aead-Modul des Linux-Kernels, die seit 2017 alle großen Distributionen betrifft.
Sichere Erkennungswerkzeuge für zwei verwandte Familien von Local-Privilege-Escalation-Schwachstellen im Linux-Kernel – Copy Fail (CVE-2026-31431) und Dirty Frag (CVE-2026-43284 / CVE-2026-43500) – die seit 2017 alle großen Distributionen betreffen, von jedem unprivilegierten lokalen Benutzer ausgenutzt werden können und unabhängige Gegenmaßnahmen erfordern.
Diese Sonden öffnen keine Sockets und führen keine Krypto- oder Netzwerkoperationen aus. Die Erkennung basiert ausschließlich auf Kernelversion, Distributions-Paketmetadaten, Modulstatus und aktiven Mitigations-Flags – alles ohne
sudofür alle lesbar.
| Copy Fail | Dirty Frag | |
|---|---|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 + CVE-2026-43500 |
| Modul(e) | algif_aead | esp4, esp6, rxrpc |
| Eingeführt | Aug 2017 (Kernel 4.14) | Jan 2017 / Jun 2023 |
| Gegenmaßnahme | modprobe.d-Blacklist für algif_aead | modprobe.d-Blacklist für esp4/esp6/rxrpc |
| Sonden-Skript | cve-2026-31431-check.sh | cve-2026-43284-check.sh |
Die Anwendung der Copy-Fail-Gegenmaßnahme schützt NICHT vor Dirty Frag. Beide Sonden müssen ausgeführt und beide Gegenmaßnahmen unabhängig voneinander angewendet werden.
.
├── 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
Der Exploit erfordert genau diese Syscall-Kette:
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
Keine dieser Operationen wird von der Sonde berührt. Die Erkennung basiert auf:
.ko auf der Platte (automatisch ladbar)modprobe.d-Blacklist und initcall_blacklist-Kernelparameterchmod +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
Exit-Codes: 0 = PATCHED oder MITIGATED · 1 = VULNERABLE · 2 = UNKNOWN
| Distro | Patch-Stand | Advisory |
|---|---|---|
| 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 | wie oben |
| RHEL / Rocky / Alma 10.1 | kernel-6.12.0-124.55.1.el10_1 | wie oben |
| 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 | Noch kein gepatchter Kernel – kmod-Mitigation über 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 | SUSE-Advisory |
Das Skript vergleicht automatisch mit diesen Schwellenwerten und setzt das Ergebnis auf PATCHED, wenn das laufende Paket den Schwellenwert erreicht oder überschreitet.
Auf RHEL, AlmaLinux, Rocky Linux und Derivaten ist algif_aead fest in den Kernel einkompiliert. Der modprobe.d-Workaround hat keine Wirkung. Nur initcall_blacklist=algif_aead_init in der Kernel-Befehlszeile funktioniert. Die Sonde erkennt dies und warnt ausdrücklich.
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
Dirty Frag verknüpft zwei In-Place-Entschlüsselungsfehler im Fast-Path, die von Hyunwoo Kim (@v4bel) entdeckt und etwa am 07.05.2026, eine Woche nach Copy Fail, veröffentlicht wurden:
esp4, esp6); Upstream-Fix f4c50a4034e6rxrpc); Upstream-Fix aa54b1d27fe0Der Exploit hängt Pipe-Seiten aus dem Page Cache von /usr/bin/su als seitenbasierte Socket-Buffer-Fragmente an und treibt dann die In-Place-Entschlüsselung mit einem vom Angreifer gewählten Schlüssel an – wobei beliebige Bytes direkt in die zwischengespeicherte Kopie einer Setuid-Binary geschrieben werden, ohne die Datei auf der Festplatte zu verändern.
Die Copy-Fail-Gegenmaßnahme (algif_aead-Blacklist) verhindert Dirty Frag NICHT.
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
Die Sonde prüft esp4, esp6 und rxrpc unabhängig voneinander und meldet in der JSON-Ausgabe separate boolesche Werte cve_43284_safe / cve_43500_safe.
esp4 und esp6 sind die kernelseitigen ESP-Transformationen, die von IPsec (strongSwan, Libreswan) verwendet werden. Ihre Blacklistung unterbricht IPsec-Tunnel. Die Sonde erkennt aktive IPsec-Nutzung über ip xfrm state und Daemon-Erkennung und passt die Empfehlungen zur Behebung entsprechend an:
modprobe.d-Blacklist für alle drei Module anwenden.rxrpc separat blacklisten, falls nicht benötigt):# 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