
Reproduzierte den dateilosen LPE CVE‑2026‑31431 (“Copy Fail”) auf Kali Linux, erstellte dann auditd-, Sigma- und YARA-Erkennungen, um diesen heimlichen Kernel-Exploit zu fangen, der keine Datenträgerspur hinterlässt.
Dieses Repository dokumentiert die End-to-End-Reproduktion, das Detection Engineering und die Incident Response für **CVE-2026-31431 ("Copy Fail")", eine kritische lokale Privilegieneskalations-Schwachstelle im Linux-Kernel, die Kernel von 4.14 bis 7.0-rc betrifft.
Copy Fail ist ein Logikfehler, keine Speicherkorruption. Er ist deterministisch, betrifft praktisch jede seit 2017 ausgelieferte Linux-Distribution und ist vollständig dateilos – traditionelle Dateiintegritätsüberwachung (AIDE, Tripwire) kann ihn nicht erkennen. Ein funktionierender Proof-of-Concept passt in nur 732 Byte Python.
| Komponente | Details |
|---|---|
| Hypervisor | VirtualBox |
| Ziel-VM | Kali Linux 2026.1 |
| Kernel | 6.18.12+kali-amd64 |
| Exploit-PoC | theori-io/copy-fail-CVE-2026-31431 |
| Erkennung | auditd, Sigma, YARA |
Das Labor beginnt mit der Bestätigung, dass das Ziel einen verwundbaren Kernel ausführt.
Kali Linux 2026.1 Release- und Kernel-Details.
Ausgabe von uname -r, die den verwundbaren Kernel 6.18.12+kali-amd64 zeigt.
Der Exploit benötigt das Kernelmodul algif_aead und das Krypto-Template authencesn.
Modul geladen
lsmod und modinfo bestätigen, dass algif_aead verfügbar ist; /proc/crypto zeigt das verwundbare authencesn-Template.
Der PoC verwendet os.splice, was Python 3.10+ erfordert. Wir überprüfen den Interpreter.
Python-Version Python 3.12 ist installiert und einsatzbereit.
Bevor der vollständige Exploit ausgeführt wird, bestätigt ein sicherer Checker, dass das System verwundbar ist.
Der Checker meldet "potenziell verwundbar" und ebnet den Weg für die Ausnutzung.
Ein unprivilegiertes Konto testuser wird erstellt, um einen Angreifer ohne besondere Rechte zu simulieren.
id zeigt UID 1001 und bestätigt Nicht-Root-Zugriff.
Der offizielle Theori-PoC wird geklont und aus dem unprivilegierten Konto heraus ausgeführt.
Das Exploit-Repository wurde erfolgreich geklont.
Exploit-Ausführung
Der Python-Exploit überschreibt den Page-Cache und detoniert das korrumpierte /usr/bin/su-Binary.
Die Ausgabe von whoami und id belegt die vollständige Root-Eskalation.
Der Exploit korrumpiert nur den In-Memory-Page-Cache. Die Datei /usr/bin/su auf der Festplatte behält ihre ursprüngliche Prüfsumme.
SHA256-Übereinstimmung
Die sha256sum stimmt auch nach der Ausnutzung mit dem ursprünglichen Paket-Hash überein, was bestätigt, dass keine Festplattenänderung erfolgt ist.
Copy Fail kann nicht durch Dateiintegritätsüberwachung erkannt werden. Stattdessen konzentrieren wir uns auf die Primitive auf Syscall-Ebene, die es verwendet.
Wir stellen benutzerdefinierte auditd-Regeln bereit, die ausgelöst werden bei:
AF_ALG-Sockets (Familie 38)splice()-Syscalls
Alle benutzerdefinierten Regeln sind aktiv und mit auditctl -l verifiziert.
Nachdem der Exploit ein zweites Mal ausgeführt wurde, sehen wir Warnmeldungen für genau die verwendeten Syscalls:
ausearch zeigt ein AF_ALG-Socket-Erstellungsereignis aus dem testuser-Prozess.
ausearch zeigt ein splice()-Ereignis von derselben PID – eine starke Korrelation.
Eine Sigma-Regel übersetzt die auditd-Feststellungen in ein herstellerneutrales SIEM-Format.
Sigma-YAML-Regel zur Erkennung der Erstellung von AF_ALG-Sockets und von splice()-Aufrufen.
Eine YARA-Regel hilft dabei, Copy-Fail-Exploit-Code auf dem Datenträger zu identifizieren.
YARA-Regel, die auf die Zeichenkette authencesn, Socket-Konstanten und splice()-Referenzen aus PoCs passt.
| Ebene | Was sie erkennt | Status |
|---|---|---|
| auditd | AF_ALG-Socket + splice-Syscalls | ✅ Bereitgestellt |
| Sigma | Syscall-Muster über SIEM | ✅ Regel bereit |
| YARA | PoC-Code auf dem Datenträger | ✅ Regel bereit |
| FIM (AIDE/Tripwire) | Dateiänderungen | ❌ Blind – es erfolgt kein Schreiben auf den Datenträger |
Ein vollständiger Incident-Response-Bericht ist in reports/incident-copy-fail.md verfügbar. Er enthält:
Sofortige Gegenmaßnahme (kein Neustart erforderlich):
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead