
CVE-2025-40271 Modifed By MadEploits
Proof-of-Concept für eine lokale Privilegieneskalations-Schwachstelle im Linux-Kernel-Dateisystem proc. Der Fehler ist ein Use-After-Free in proc_readdir_de(), verursacht durch rb_erase() ohne RB_CLEAR_NODE(), wodurch veraltete Rot-Schwarz-Baum-Verknüpfungen zurückbleiben, die während der Verzeichnisauflistung durch einen Race-Condition-Angriff ausgenutzt werden können.
Autor: MadExploits
Original Vulnerability Research und C PoC von Aviral Srivastava (N-DAY RESEARCH). Dieses Repository enthält einen Shell-Port (
exploit.sh) für Umgebungen, in denen eine Kompilierung nicht praktikabel ist.
| Feld | Details |
|---|---|
| CVE | CVE-2025-40271 |
| Komponente | fs/proc — proc_readdir_de() / remove_proc_entry() |
| Typ | Use-After-Free (rb-tree stale links) |
| Auswirkung | Lokale Privilegieneskalation (LPE) |
| Architektur | x86_64 |
| Betroffen | Linux-Kernel bis einschließlich 6.18-rc5 |
Wenn ein proc-Verzeichniseintrag entfernt wird, wird rb_erase() auf den rb-Knoten des Eintrags aufgerufen, ohne RB_CLEAR_NODE(). Freigegebene Knoten können über veraltete Baumverknüpfungen erreichbar bleiben. Wenn getdents64() mit der Entfernung von Schnittstellen unter /proc/self/net/dev_snmp6/ um die Wette läuft, kann der Kernel freigegebenen Speicher lesen — der oft durch gesprayte msg_msg-Objekte zurückgewonnen wurde — und anomale d_ino-Werte zurückgeben, die Kernel-Heap-Pointer preisgeben.
Der PoC überprüft die laufende Kernelversion und beendet sich bei gepatchten Builds:
| Zweig |
|---|
| Datei | Beschreibung |
|---|---|
exploit.c | Vollständiger C PoC — Netlink-Veth-Verwaltung, pthread-Race, msg_msg-Spray |
exploit.sh | Shell-Port ohne Kompilierung — unshare, ip, eingebettetes Python 3 für Syscalls/Race |
Beide Implementierungen folgen dem gleichen Ausnutzungsablauf:
CAP_NET_ADMIN im Netz-NS erlangen)/proc/self/net/dev_snmp6/ befüllengetdents64() mit schneller Veth-Löschung + Heap-Spray um die Wette laufen lassend_ino-Werte erkennencat /proc/sys/kernel/unprivileged_userns_clone
# muss 1 sein
exploit.cgcc mit pthreadslinux/netlink.h, etc.)gcc -o exploit exploit.c -lpthread
exploit.shbashpython3ip (iproute2)unshare (util-linux mit --map-root-user-Unterstützung)Kein Compiler erforderlich.
chmod +x exploit.sh
./exploit.sh
gcc -o exploit exploit.c -lpthread
./exploit
Angreifbarer Kernel — UAF ausgelöst (teilweiser Erfolg):
[+] Kernel X.Y.Z — VULNERABLE
[+] Namespace ready...
[+] Created 32 veth pairs (/proc/self/net/dev_snmp6 populated)
[+] UAF HIT! d_ino=0xffff8880........ (kernel heap pointer)
[+] Kernel heap leak: 0xffff8880........
[*] PARTIAL SUCCESS: UAF + heap leak DEMONSTRATED
Gepatchter Kernel:
[-] Kernel X.Y.Z — PATCHED
[*] Kernel is patched. Nothing to do.
d_ino einen Wert, der dem x86_64-Kernel-Pointer-Muster (0xffff000000000000) entspricht, typischerweise vom msg_msg-Header m_list, der mit freigegebenen proc_dir_entry-Daten überlappt.modprobe_path erfordert den Offset zwischen der geleakten Heap-Adresse und der Kernel-Textbasis — dieser ist build-spezifisch (KASLR). Der PoC demonstriert den UAF und den Leak; eine vollständige Kette benötigt Offsets für Ihr Zielkernel-Image.sysctl -w kernel.unprivileged_userns_clone=0
Dieses Projekt ist ausschließlich für autorisierte Sicherheitsforschung, Bildung und defensive Tests bestimmt.
| Rolle | Name |
|---|---|
| Repository-Autor | MadExploits |
| Original CVE-Forschung & C PoC | Aviral Srivastava — N-DAY RESEARCH |
Nutzung auf eigene Gefahr. Es wird keine Gewährleistung übernommen.
| Behoben in |
|---|
| 5.10.x | 5.10.247+ |
| 6.1.x | 6.1.159+ |
| 6.6.x | 6.6.123+ |
| 6.12.x | 6.12.73+ |
| 6.18+ | 6.18-rc6+ |
| 7.x+ | Gepatcht |