
Schreibgeschützter Bash-Checker für die „Copy Fail"-Linux-Kernel-Schwachstelle (CVE-2026-31431)
Ein kleines, abhängigkeitsarmes Bash-Skript, das Ihnen mitteilt, ob Ihr Linux-System der Copy Fail-Schwachstelle zur lokalen Rechteausweitung (CVE-2026-31431) ausgesetzt ist.
Das Skript ist schreibgeschützt: Es nutzt den Fehler nie aus, lädt nie Kernel-Module und verändert nie das System.
Copy Fail ist ein Logikfehler in der authencesn-AEAD-Kryptografievorlage des Linux-Kernels, der aus dem Userspace über die AF_ALG-Socketschnittstelle (algif_aead) erreichbar ist.
| Feld | Wert |
|---|---|
| CVE | CVE-2026-31431 |
| Offengelegt | 2026-04-29 |
| CVSS v3.1 | 7.8 (Hoch) |
| Klasse | Lokale Rechteausweitung |
| Betroffene Komponente | crypto/authencesn + crypto/algif_aead |
| Eingeführt in | 2017 (In-Place-AEAD-Optimierung in algif_aead.c) |
| Hauptlinien-Fix | Commit a664bf3d603d, zusammengeführt am 2026-04-01 |
Ein nicht-privilegierter lokaler Benutzer kann einen deterministischen, kontrollierten 4-Byte-Schreibvorgang in den Page Cache jeder Datei auslösen, die er lesen kann. Ein öffentlicher Proof-of-Concept (732 Bytes Python) nutzt diese Primitive, um ein Setuid-Binary zu überschreiben und auf praktisch jeder seit 2017 ausgelieferten Mainstream-Distribution Root-Rechte zu erlangen.
Jede Linux-Distribution, die einen seit 2017 gebauten Kernel mit aktiviertem algif_aead ausliefert. Bestätigt betroffene Familien sind:
# Download the script
curl -fsSLO https://raw.githubusercontent.com/samanzamani/copy-fail-checker/main/check-copy-fail.sh
# Make it executable
chmod +x check-copy-fail.sh
# Run it
./check-copy-fail.sh
Oder klonen Sie das Repository:
git clone https://github.com/samanzamani/copy-fail-checker.git
cd copy-fail-checker
./check-copy-fail.sh
Das Skript benötigt keine root-Rechte. Wenn Sie es als Ihr normaler Benutzer ausführen, erhalten Sie die realistischste Sicht auf die Angriffsfläche, denn das ist genau der Kontext, den ein Angreifer hätte.
Das Skript führt drei unabhängige Prüfungen durch und fasst sie zu einem einzigen Urteil zusammen.
Es liest /etc/os-release und uname -r und vergleicht dann Ihren laufenden Kernel mit der offiziellen gepatchten Version, die vom Sicherheitsteam Ihrer Distribution veröffentlicht wurde. Die Versionstabelle deckt derzeit ab:
Wenn Ihre Distribution nicht in der Tabelle enthalten ist, greift das Skript auf die folgenden Laufzeitprüfungen zurück.
algif_aead-ModulsDas Skript prüft vier Dinge, ohne etwas zu verändern:
lsmod)modinfo)/etc/modprobe.d, /usr/lib/modprobe.d oder /run/modprobe.d auf der Blacklist steht/boot/config-<uname> oder /proc/config.gz eingebaut (built-in) istEin auf der Blacklist stehendes, nicht geladenes und nicht eingebautes Modul schließt die Angriffsfläche selbst bei einem ungepatchten Kernel.
AF_ALG-SocketsDas zuverlässigste Signal ist das, was ein Angreifer tatsächlich sehen würde. Das Skript verwendet eine winzige Python-Sonde (socket.socket(AF_ALG, SOCK_SEQPACKET, 0) gefolgt von bind() auf die AEAD-Vorlage authencesn(hmac(sha256),cbc(aes))), um herauszufinden, ob AF_ALG-Sockets aus einem nicht-privilegierten Kontext heraus erstellt und gebunden werden können. Die Sonde erstellt den Socket, bindet ihn und schließt ihn sofort wieder, ohne etwas Ausnutzbares zu hinterlassen.
Wenn python3 nicht installiert ist, wird die Sonde übersprungen und das Urteil stützt sich auf die Prüfungen 1 und 2.
Für Pipelines, Konfigurationsmanagement oder Flotten-Scans übergeben Sie --json:
./check-copy-fail.sh --json
Beispielausgabe:
{
"verdict": "vulnerable",
"distro_id": "ubuntu",
"distro_version_id": "24.04",
"kernel": "6.8.0-31-generic",
"patched_version": "",
"kernel_status": "unknown",
"module_loaded": 0,
"module_builtin": 0,
"module_available": 1,
"module_blacklisted": 0,
"af_alg_status": "reachable"
}
Dies ist der einzige vollständige Fix. Starten Sie nach dem Update neu, damit der neue Kernel tatsächlich läuft.
# Debian / Ubuntu
sudo apt update && sudo apt full-upgrade && sudo reboot
# RHEL / AlmaLinux / Rocky / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# openSUSE / SLES
sudo zypper refresh && sudo zypper update && sudo reboot
# Amazon Linux 2023
sudo dnf upgrade --releasever=latest && sudo reboot
algif_aead deaktivierenWenn Sie nicht sofort in einen gepatchten Kernel neu starten können, setzen Sie das verwundbare Modul auf die Blacklist. Dadurch werden alle Anwendungen beeinträchtigt, die legitimerweise AF_ALG-AEAD-Chiffren verwenden (auf den meisten Servern selten — prüfen Sie dies zuerst in einer Staging-Umgebung).
# Persist the blacklist across reboots
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
# Unload it from the running kernel right now
sudo rmmod algif_aead 2>/dev/null || true
Wenn das Modul eingebaut (built-in) ist, funktioniert die Blacklist nicht, aber es ist möglich, den Initcall zu deaktivieren. Ein Neustart ist erforderlich.
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
Blockieren Sie bei containerisierten Workloads zusätzlich die AF_ALG-Socket-Familie in Ihrem seccomp-Profil, damit ein kompromittierter Container die Kernel-Oberfläche nicht erreichen kann.
== System information ==
[INFO] Distribution : Ubuntu 24.04.2 LTS (ubuntu 24.04)
[INFO] Kernel : 6.8.0-31-generic
== Check 1 / 3 — Kernel version ==
[WARN] No vendor-fixed kernel version is recorded for ubuntu 24.04.
[WARN] Falling back to runtime mitigation checks below.
== Check 2 / 3 — algif_aead kernel module ==
[WARN] algif_aead is not loaded but can be autoloaded on demand (no blacklist found).
== Check 3 / 3 — AF_ALG socket reachability ==
[VULN] AF_ALG sockets are reachable from this unprivileged context.
== Verdict ==
[VULN] This system appears to be VULNERABLE to CVE-2026-31431.
[VULN] Apply the vendor kernel update or blacklist algif_aead as a temporary mitigation.
uname -r. Wenn Sie einen Out-of-Tree- oder neu gebauten Kernel verwenden, spiegelt der Versionsvergleich möglicherweise nicht wider, ob der Fix tatsächlich zurückportiert wurde.blocked_permission für AF_ALG melden, einfach weil seccomp aktiv ist — der Host-Kernel selbst kann weiterhin verwundbar sein.MIT — frei verwenden, modifizieren und verteilen. Ohne Gewährleistung.
| Distribution | Gepatchter Kernel (≥) |
|---|
| AlmaLinux / RHEL / Rocky / CentOS 8 | 4.18.0-553.121.1.el8_10 |
| AlmaLinux / RHEL / Rocky / CentOS 9 | 5.14.0-611.49.2.el9_7 |
| AlmaLinux / RHEL / Rocky / CentOS 10 | 6.12.0-124.52.2.el10_1 |
| Ubuntu 26.04+ („Resolute“) | nicht betroffen |
| Ubuntu 18.04 – 25.10 | rollierend, siehe apt |
| Debian (alle Suites) | rollierend, siehe DSA |
| Urteil | Exit-Code | Bedeutung |
|---|
patched | 0 | Der laufende Kernel entspricht der vom Hersteller korrigierten Version oder ist neuer. |
mitigated | 0 | AF_ALG ist blockiert und das Modul ist nicht geladen. |
likely_mitigated | 0 | Das Modul ist auf der Blacklist und nicht geladen; keine Live-Sonde war möglich. |
vulnerable | 1 | Der Kernel ist ungepatcht und algif_aead / AF_ALG ist erreichbar. |
unknown | 2 | Nicht genügend Hinweise für eine Entscheidung. Als potenziell verwundbar behandeln. |
not_applicable | 3 | Läuft nicht unter Linux. |