
Exploit für CVE-2026-31431, einen Linux-Kernel-authencesn-Fehler, der lokale Privilegienerweiterung und Container-Escape über einen 4-Byte-Page-Cache-Write ermöglicht.
732 Bytes bis Root auf jeder großen Linux-Distribution
CVE-2026-31431 (Copy Fail) ist ein Logikfehler in der authencesn-Kryptografievorlage des Linux-Kernels. Er ermöglicht 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-Sequenznummern, schreibt 4 vom Angreifer kontrollierte Bytes und stellt sie nie wieder her.
Die beschädigte Seite wird nie 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 sofort systemweit sichtbar wird.
Der Exploit korrumpiert 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 die Ausführung von su den Payload aus und öffnet eine Root-Shell.
python3 exp.py
gcc -o exp exp.c
./exp
| 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.
| Portabel |
| Dasselbe Skript funktioniert auf Ubuntu, Amazon Linux, RHEL, SUSE und mehr — keine distrospezifischen Offsets erforderlich |
| Winzig | Python-Exploit ist ~732 Bytes groß |
| Unauffällig | Umgeht den VFS-Schreibpfad; Seite wird nie als dirty markiert; Prüfsummen auf der Festplatte bleiben unverändert |
| Container-übergreifend | Page Cache wird über Container hinweg geteilt — Container-Escape-Vektor (siehe Teil 2) |