
Arbeitsfähiger Proof-of-Concept-Exploit für CVE-2026-31431, eine lokale Privilegieneskalation im Linux-Kernel über AF_ALG-AEAD-Page-Cache-Korruption, die eine Root-Shell gewährt.
2026-04-29 — Ich veröffentliche diesen Exploit einen Tag, nachdem ich ihn im MyDigitalLife-Forum geteilt habe. Er benötigt kein Python; er ist in C geschrieben und mit folgendem Befehl auf die kleinstmögliche Größe kompiliert:
musl-gcc -static -Os -o exploit exploit.c -sKritische Bedrohung. Die Exploit-Binärdatei ist ohne Abhängigkeiten kompiliert und kann zum Testen auf Schwachstellen auf jedem Linux-System verwendet werden.
CVE-2026-31431 ist eine von NIST bestätigte Schwachstelle im Linux-Kernel, die es einem nicht privilegierten lokalen Benutzer ermöglicht, innerhalb von Sekunden eine
root-Shell zu erhalten. Angesichts des öffentlich kursierenden Exploits für CVE-2026-31431 habe ich einen binären Proof-of-Concept (PoC) entwickelt, um die Gefährdung unserer internen Infrastruktur zu bewerten. Während einige Umgebungen die Verwendung von su einschränken, ist diese Schwachstelle für gemeinsam genutzte Server besonders kritisch, da sie die zugrunde liegende Kernel-Speicherverwaltung angreift. Folglich kann jede SETUID-Binärdatei — einschließlich sudo, passwd, mount oder newgrp — genutzt werden, um den Exploit auszulösen und eine root-Shell zu gewähren. Sofortiges administratives Handeln zum Patchen des Kernels ist erforderlich, da Standard-Benutzerraum-Einschränkungen nicht ausreichen, um diese Bedrohung zu entschärfen. Jedes Linux-System mit einem ungepatchten Kernel ist gefährdet.
Mein eigener funktionierender Exploit · Linux-Kernel · AF_ALG-Kryptografieschnittstelle (AEAD)
Ersetzt /usr/bin/su im Kernel-Page-Cache, ohne die Datei auf der Festplatte zu verändern
Lokaler Shell-Zugriff ist ausreichend — keine zusätzlichen Privilegien erforderlich
Betrifft ungepatchte Linux-Distributionen

CVE-2026-31431 ist ein Fehler in der Verarbeitung von Scatter-Gather-I/O-Operationen und Page-Cache-Referenzen im kryptografischen Subsystem des Linux-Kernels — insbesondere in der AF_ALG-Socket-Implementierung für AEAD-Algorithmen (crypto/af_alg.c, crypto/aead.c).
| Eigenschaft | Wert |
|---|---|
| Kennung | CVE-2026-31431 |
| Referenz | NIST NVD |
| Typ | Lokale Rechteausweitung (LPE) |
| Komponente | Linux-Kernel — AF_ALG / AEAD (authencesn) |
| Erforderlicher Zugriff | Nicht privilegierter lokaler Benutzer |
| Auswirkung | Interaktive root-Shell |
| Exploit-Status | Funktionierender PoC öffentlich auf GitHub verfügbar |
| Persistenz | Keine — die Änderung existiert nur im RAM; ein Neustart stellt den ursprünglichen Zustand wieder her |
Der Linux-Kernel stellt Benutzerprozessen über AF_ALG-Sockets eine kryptografische Schnittstelle bereit. Die Schwachstelle liegt darin, dass der Kernel während einer AEAD-Entschlüsselungsoperation die Entschlüsselungsausgabe fälschlicherweise direkt auf die Page-Cache-Seiten der Quelldatei abbildet — anstatt auf einen temporären Puffer. Ein Angreifer kann dadurch den Inhalt einer beliebigen Datei im Speicher überschreiben, ohne sie auf der Festplatte zu verändern, ohne root-Rechte und ohne sichtbare Spuren im Dateisystem zu hinterlassen.
| System | Status |
|---|---|
| Ubuntu 24.04 (bare Metal / VM) | ⚠️ Verwundbar bei ungepatchtem Kernel |
| Debian, Fedora, Arch bei ungepatchtem Kernel | ⚠️ Verwundbar |
Distributionen mit CONFIG_SECURITY_LOCKDOWN_LSM | ✅ Wahrscheinlich geschützt |
Systeme mit nosuid oder ProtectSUID (systemd) | ✅ Geschützt |
Systeme mit AppArmor/SELinux, die AF_ALG blockieren | ✅ Geschützt |
| macOS, Windows (nativ) | ✅ Nicht betroffen |
Der Exploit besteht aus zwei Komponenten: einem Hilfsskript unter /tmp/x und einer Korruptionsschleife basierend auf AF_ALG. Im Folgenden finden Sie eine exakte Schritt-für-Schritt-Beschreibung basierend auf der Quellcode-Analyse:
1. Einrichtung des Hilfsskripts
Der Exploit erstellt /tmp/x mit folgendem Inhalt:
#!/bin/sh
export TERM=xterm-256color
exec /bin/sh
Er setzt die Berechtigungen auf 0755. Der Grund: /usr/bin/su entfernt Umgebungsvariablen (einschließlich TERM) beim Start. Das Hilfsskript stellt sie wieder her, bevor es die echte Shell startet, und gewährleistet so ein funktionsfähiges Terminal.
2. Konstruktion des ELF-Payloads
Eine minimale 158-Byte-x86_64-ELF-Binärdatei mit rohem Shellcode wird im Speicher erstellt. Die Zeichenkette /bin/sh an Offset 150 wird dann über memcmp/memcpy zu /tmp/x\0 gepatcht. Details finden Sie unter ELF-Payload.
3. Öffnen von /usr/bin/su im Nur-Lese-Modus
int su_fd = open("/usr/bin/su", O_RDONLY);
Die Datei wird nur lesend geöffnet — der Exploit benötigt keinerlei Schreibrechte.
4. Korruptionsschleife — 39 Iterationen à 4 Bytes
Der Payload (158 Bytes) wird in 4-Byte-Blöcken verarbeitet (39 vollständige Blöcke). Jeder Block wird durch corrupt_binary_chunk() geleitet, das Folgendes ausführt:
AF_ALG-Socket (SOCK_SEQPACKET)authencesn(hmac(sha256),cbc(aes)) — einen zusammengesetzten AEAD-Algorithmusop_sock)sendmsg mit einem 8-Byte-Puffer (4× 'A' + 4 Payload-Bytes) und drei CMSGs: ALG_OP_DECRYPT, IV (20 Bytes), assoclen=8splice aus: su_fd → pipe → op_sock (Zero-Copy durch den Kernel)recv() ab — hier überschreibt der Kernel fälschlicherweise den Page-Cache5. Ausführung
execve("/usr/bin/su", args, NULL);
Der Kernel lädt /usr/bin/su über den Page-Cache — der nun vergiftet ist. Das SUID-Bit (chmod u+s) ist intakt, sodass der Kernel die Datei als root ausführt. Der Shellcode führt setuid(0) → execve("/tmp/x") → interaktive root-Shell aus.