
Golang-Neufassung des Exploits für die lokale Rechteausweitung Copy Fail (CVE-2026-31431), der den Page Cache beschädigt, um Root-Rechte auf Linux-Systemen zu erlangen.
732 Bytes bis Root auf jeder großen Linux-Distribution
CVE-2026-31431 (Copy Fail) ist ein Logikfehler in der kryptografischen Vorlage authencesn des Linux-Kernels. Er ermöglicht es einem nicht privilegierten lokalen Benutzer, einen deterministischen, kontrollierten 4-Byte-Schreibvorgang in den Page Cache einer beliebigen lesbaren Datei auf dem System auszulösen.
CONFIG_CRYPTO_AUTHENC (praktisch alle großen Distributionen seit 2017)Der Fehler verknüpft zwei Verhaltensweisen:
AF_ALG + splice: splice() überträgt Page-Cache-Seiten per Referenz in die Scatterlist eines AF_ALG-Sockets. Im In-Place-Modus der AEAD-Entschlüsselung bleiben die Tag-Seiten (aus dem Page Cache der Zieldatei) über sg_chain() mit der Ausgabe-Scatterlist verkettet.
authencesn Scratch-Schreibvorgang: crypto_authenc_esn_decrypt() verwendet dst[assoclen + cryptlen] (hinter dem Tag, in den Page-Cache-Seiten) als Scratch-Bereich für die Neuordnung der ESN-Sequenznummer, schreibt 4 vom Angreifer kontrollierte Bytes und stellt sie nie wieder her.
Die beschädigte Seite wird niemals als dirty markiert, sodass die Datei auf der Festplatte unverändert bleibt. Aber der In-Memory-Page-Cache ist das, was tatsächlich gelesen wird — wodurch die Korruption systemweit sofort sichtbar wird.
Der Exploit beschädigt den Page Cache von /usr/bin/su (oder einer beliebigen setuid-Binärdatei) mit einem kleinen Shellcode-Payload, jeweils 4 Bytes auf einmal. Nach allen Iterationen führt su den Payload aus und öffnet eine Root-Shell.
python3 exp.py
go run exp.go
go build -ldflags "-w -s" -trimpath -o exp exp.go
tinygo build -o exp exp.go
| Fähigkeit | Details |
|---|---|
Dieses Repository wird ausschließlich zu Bildungs- und Verteidigungsforschungszwecken veröffentlicht. Verwenden Sie diesen Code nicht auf Systemen, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Testberechtigung haben.
| Dasselbe Skript funktioniert auf Ubuntu, Amazon Linux, RHEL, SUSE und weiteren — keine distrospezifischen Offsets |
| Winzig | Python-Exploit ist ~732 Bytes |
| Unauffällig | Umgeht den VFS-Schreibpfad; Seite wird nie als dirty markiert; Prüfsummen auf der Festplatte bleiben unverändert |
| Container-übergreifend | Der Page Cache wird zwischen Containern geteilt — Container-Escape-Vektor (siehe Teil 2) |