
# Linux-Kernel-Exploit für CVE-2026-31431 Lokaler Privilege-Escalation-Exploit für den Linux-Kernel (CVE-2026-31431), der einen zuverlässigen Single-Shot-PoC mit mehreren Sprachimplementierungen, einem Schwachstellen-Scanner und einem Mitigationsskript bereitstellt.
Eine 100 % zuverlässige lokale Privilegieneskalation unter Linux, die seit 2017 alle gängigen Distributionen betrifft.
Ein Logikfehler in
authencesn, verkettet überAF_ALGundsplice()zu einem 4-Byte-Schreibzugriff auf den Page-Cache — fast ein Jahrzehnt lang still ausnutzbar.
Der gesamte Code und die Dokumentation in diesem Repository dienen ausschließlich autorisierten Sicherheitsforschungs- und Bildungszwecken.
Das Ausführen von Exploit-Code gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben, ist illegal. Durch die Nutzung dieses Repositorys übernehmen Sie die volle Verantwortung für Ihre Handlungen.
.
├── README.md ← Sie befinden sich hier
├── LICENSE ← MIT
├── .gitignore
├── docs/
│ ├── analysis-report.md ← Umfassende Sicherheitsanalyse
│ ├── analysis-report.html ← Gestylte HTML-Version
│ ├── exploit-walkthrough.md ← Zeilenweise PoC-Analyse
│ └── exploit-walkthrough.html ← Gestylte HTML-Version
└── poc/
├── README.md ← PoC-Bedienungsanleitung
├── copy_fail_exp.py ← Offizieller PoC (732 Bytes, verschleiert)
├── copy_fail_exp_readable.py ← Entschleierte + kommentierte Version
├── copy_fail_exp_compat.py ← Python-3.6+-Kompatibilität (ctypes splice)
├── copy_fail_exp_alpine.py ← Alpine-Linux-Variante
├── copy_fail_exp.c ← C-Implementierung (keine Abhängigkeiten)
├── copy_fail_exp.go ← Go-Implementierung (keine Abhängigkeiten)
├── copy_fail_rust/ ← Rust-Implementierung
│ ├── Cargo.toml
│ └── src/main.rs
├── check_vulnerable.py ← Schwachstellen-Scanner
└── mitigate.sh ← Ein-Klick-Mitigationsskript
# Von GitHub Releases — vorgefertigte Binärdateien (Linux amd64/arm64) + alle Python-Skripte
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-go-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-c-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-python.tar.gz
tar xzf copy-fail-go-linux.tar.gz
tar xzf copy-fail-c-linux.tar.gz
tar xzf copy-fail-python.tar.gz
# Go-Statikbinärdatei (kein Python erforderlich)
chmod +x copy-fail-exp-amd64
./copy-fail-exp-amd64
# C-Statikbinärdatei
chmod +x copy-fail-exp-c-amd64
./copy-fail-exp-c-amd64
# Oder Python-Skripte direkt verwenden
python3 check_vulnerable.py
📦 Releases werden automatisch über GitHub Actions bei jedem Push eines
v*-Tags erstellt. Go- und C-Binärdateien werden für linux/amd64 und linux/arm64 als statische Binärdateien gebaut.
python3 poc/check_vulnerable.py
sudo bash poc/mitigate.sh
Dies setzt das Kernelmodul algif_aead auf die Blacklist — bricht bei 99 % der Systeme nichts.
# Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-*
# RHEL/CentOS/Fedora
sudo dnf update kernel
# In den gepatchten Kernel neu starten
sudo reboot
python3 poc/check_vulnerable.py
# Exit-Code 1 = geschützt ✓
WARNUNG: Nur auf Systemen ausführen, die Ihnen gehören oder für die Sie eine Testgenehmigung haben.
# C
gcc -static -o exp ./poc/copy_fail_exp.c && ./exp
# Python
python3 poc/copy_fail_exp.py
python3 poc/copy_fail_exp_compat.py # Python < 3.10
# Go
go build -o exp ./poc/copy_fail_exp.go && ./exp
# Rust
cd poc/copy_fail_rust && cargo run --release
Alle Versionen akzeptieren ein optionales Argument, um eine andere SUID-Binärdatei anzusteuern:
python3 poc/copy_fail_exp.py /usr/bin/passwd
./exp /usr/bin/sudo
Vollständige Schwachstellenbewertung mit:
authencesn-Scratch-Schreibzugriff)Zeilenweise PoC-Analyse mit:
AF_ALG-Socket-Ablauf, splice()-Page-Cache-Zustellung, sg_chain()-Mechanikauthencesn-ESN-Scratch-Schreibzugriff, der Scatterlist-Grenzen überschreitet/etc/passwd-Injektion, Shared-Library-Ansteuerung, Container-EscapeBeiträge sind willkommen:
Bitte eröffnen Sie ein Issue oder einen Pull Request.
MIT — Verantwortungsvoll verwenden.
| Feld | Detail |
|---|
| CVE | CVE-2026-31431 |
| Alias | Copy Fail |
| Typ | Lokale Privilegieneskalation im Linux-Kernel (LPE) / beliebiger Schreibzugriff auf den Page-Cache |
| CVSS v3.1 | 7.8 HOCH — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-669 (Falsche Ressourcenübertragung zwischen Sphären) |
| Komponente | crypto/algif_aead — authencesn-Kryptografievorlage |
| Eingeführt | 2017 (Commit 72548b093ee3) |
| Behoben | Mainline-Commit a664bf3d603d (01.04.2026) |
| Gepatchter Kernel | v6.18.22+, v6.19.12+, v7.0+ |
| Entdecker | Xint / Theori (Taeyang Lee + Xint Code KI-gestützte Prüfung) |
| Offenlegung | 29.04.2026 — copy.fail |
| Typische Linux-LPE | Copy Fail |
|---|
| Race Condition | Erforderlich | Keine |
| Distro-spezifische Offsets | Erforderlich | Keine |
| Zuverlässigkeit | 30–80 % | 100 %, ein einziger Versuch |
| Betroffenes Zeitfenster | Schmal | 2017 → 2026 (9 Jahre) |
| Änderungen auf der Festplatte | Möglich | Keine (heimlich) |
| Container-übergreifend | Nein | Ja |
| Datei | Sprache | Anforderungen | Hinweise |
|---|
copy_fail_exp.py | Python 3.10+ | nur stdlib | Offizieller 732-Byte-PoC |
copy_fail_exp_compat.py | Python 3.6+ | stdlib + ctypes | Funktioniert auf CentOS 7, AL2 usw. |
copy_fail_exp_alpine.py | Python 3.10+ | nur stdlib | Ziel: /bin/ping auf Alpine |
copy_fail_exp.c | C | gcc + Linux-Header | Statische Binärdatei, keine Abhängigkeiten |
copy_fail_exp.go | Go 1.21+ | nur stdlib | Statische Binärdatei, keine Abhängigkeiten |
copy_fail_rust/ | Rust 1.70+ | libc + flate2-Crates | Statische Binärdatei |
| Umgebung | Risiko | Warum |
|---|
| Multi-Tenant-Linux-Hosts | 🔴 Hoch | Jeder Benutzer → root |
| Kubernetes / Container | 🔴 Hoch | Gemeinsamer Page-Cache → Container-Escape |
| CI-Runner (selbst gehostet) | 🔴 Hoch | Bösartiger PR → Runner-root |
| Cloud-SaaS (Benutzercode) | 🔴 Hoch | Mandant → Host-root |
| Standard-Server | 🟡 Mittel | Verkettung mit Web-RCE / gestohlenen Anmeldedaten |
| Einzelbenutzer-Laptops | 🟢 Niedrig | Bereits der einzige Benutzer |