
Kernel-Privilege-Escalation-Exploit für CVE-2026-31431, der die AF_ALG-Schnittstelle missbraucht, um /bin/su zu überschreiben und eine Root-Shell zu starten. Enthält C-Implementierung und Troubleshooting-Anleitung.
Autor: 0xShe
Sprache / 语言
CVE-2026-31431 Leitfaden zum Tool zur Kernel-Privilegienerweiterung
0x01 Schnellstart
Einige Zielumgebungen haben kein Python installiert, daher wurde diese Logik zur Privilegienerweiterung in C neu geschrieben.
Führen Sie den folgenden Befehl auf Ihrem Linux-Rechner oder WSL aus (die Verwendung von -static wird empfohlen, um GLIBC-Versionsprobleme zu vermeiden):
gcc -static exploit.c -o exploit
2. Bereitstellen und Ausführen
Laden Sie die erzeugte Binärdatei auf den Zielrechner hoch:
chmod +x exploit
./exploit
Wenn der Exploit erfolgreich ist, führt das Programm automatisch su aus und startet direkt eine Root-Shell, ohne dass ein Passwort erforderlich ist.
0x02 Logik der Privilegienerweiterung: Wie funktioniert das?
Dieser Exploit nutzt einen Logikfehler in der AF_ALG-Schnittstelle des Linux-Kernels (Kernel Crypto API).
Einen Crypto-Socket erstellen Das Programm erstellt einen AEAD-Socket (Authenticated Encryption with Associated Data) mithilfe von socket(AF_ALG, ...).
Speicherinjektion (Splice) Durch die Nutzung des Linux-splice-Systemaufrufs können Daten aus einem Dateideskriptor (in diesem Fall /bin/su) direkt in den Kernel-Krypto-Puffer umgeleitet werden.
Payload-Überschreibung Mithilfe spezifischer Speicheroffsets ersetzt der Exploit einen Teil der Authentifizierungslogik von /bin/su durch einen Payload zur Privilegienerweiterung (ein minimales ELF-Programm, das /bin/sh startet).
Privilegienerweiterung auslösen Nachdem der Kernel die Reihe von Krypto-Operationen abgeschlossen hat, wurde der su-Prozess im Speicher bereits manipuliert. Wenn schließlich system("su") ausgeführt wird, führt das System tatsächlich den modifizierten Root-Shell-Payload aus.
0x03 Fehlerbehebungsleitfaden: Warum fragt es immer noch nach einem Passwort?
Wenn das Programm während des Debuggens Exploit finished ausgibt, aber die Ausführung von su weiterhin ein Passwort erfordert, wird das Problem normalerweise durch eines der folgenden Details verursacht.
Dies ist der häufigste Fehlerpunkt. Der sendmsg-Aufruf muss das MSG_MORE-Flag enthalten.
Grund: Dieses Flag teilt dem Kernel mit, dass weitere Daten folgen, und verhindert, dass der Krypto-Puffer zu früh abgeschlossen wird.
Konsequenz: Ohne dieses Flag schließt der Kernel den aktuellen Krypto-Kontext sofort. Infolgedessen kann die anschließende Splice-Injektion nicht in den richtigen Kernel-Puffer gelangen, wodurch die Überschreibung unmöglich wird.
Der Kernel ist äußerst streng bei Ausrichtungs- und Längenprüfungen für AEAD-zugehörige Daten.
Während der Schleife, die /bin/su modifiziert, muss jede Splice-Operation ab Offset 0 zu lesen beginnen.
Einige Systeme haben möglicherweise bereits stille Sicherheitspatches erhalten. Dies wurde während Tests auf mehreren Maschinen bestätigt – bestimmte Ziele hatten bereits inoffizielle oder zurückportierte Fixes erhalten.
0x04 Hinweise
Kernel-Version: Diese Schwachstelle betrifft hauptsächlich frühe 5.x-Linux-Kernel (wie die Erstveröffentlichung von Ubuntu 20.04). Wenn der Kernel bereits gepatcht wurde, funktioniert diese Methode nicht mehr.
Pfadunterschiede: Verschiedene Linux-Distributionen können su an unterschiedlichen Orten speichern (/bin/su oder /usr/bin/su). Der Code versucht, den richtigen Pfad automatisch zu erkennen. Wenn jedoch keiner existiert, überprüfen Sie ihn manuell mit which su und passen Sie den Code entsprechend an.
Haftungsausschluss: Dieser Artikel dient ausschließlich der technischen Forschung und Bildungszwecken. Verwenden Sie ihn nicht für illegale Aktivitäten. Benutzer sind allein für alle rechtlichen Konsequenzen verantwortlich, die aus der missbräuchlichen Verwendung des Tools resultieren.