
Ein Bericht über Dirty Frag, eine Linux Local Privilege Escalation (LPE) Schwachstellenkette, die es einem unprivilegierten Benutzer ermöglicht, root Zugriff zu erlangen
Dieses Repository dokumentiert die durchgängige Reproduktion, Erkennungsentwicklung und Incident Response für die Dirty Frag Linux-Kernel-LPE-Chain (Local Privilege Escalation). Dirty Frag verkettet zwei deterministische Logikfehler – CVE‑2026‑43284 (xfrm/ESP) und CVE‑2026‑43500 (RxRPC) – um es einem unprivilegierten lokalen Benutzer zu ermöglichen, den Page-Cache von schreibgeschützten Dateien (z. B. /usr/bin/su) zu überschreiben und eine Root-Shell zu erhalten.
Dirty Frag ist ein Logikfehler, keine Speicherkorruption. Er ist deterministisch, betrifft praktisch alle Linux-Distributionen, die seit 2017 ausgeliefert wurden, und ist völlig fileless – herkömmliche Dateiintegritätsüberwachung (AIDE, Tripwire) kann ihn nicht erkennen. Der öffentliche PoC ist eine einzelne C-Datei, die sowohl den ESP- als auch den RxRPC-Pfad verkettet.
| Komponente | Details |
|---|---|
| Hypervisor | VirtualBox |
| Ziel-VM |
Das Labor beginnt damit, zu bestätigen, dass das Ziel einen verwundbaren Kernel ausführt.
cat /etc/os-release | head -3
uname -r
📸 screenshots/pre_exploit_id.png — Kali 2026.1 Release- und Kernel-Details. Die Ausgabe von uname -r zeigt den verwundbaren Kernel 6.18.12+kali‑amd64.
Der Exploit benötigt die Kernel-Module esp4, esp6 und rxrpc.
lsmod | grep -E "esp4|esp6|rxrpc"
modinfo esp4 esp6 rxrpc 2>/dev/null | grep -E "^(name|depends)"
📸 screenshots/module_mitigation.png — lsmod und modinfo bestätigen, dass die verwundbaren Module verfügbar sind.
Die Python-basierte Variante des PoC benötigt Python 3.10+. Wir überprüfen den Interpreter.
python3 --version
Python 3.12 ist installiert und bereit.
Vor dem Ausführen des vollständigen Exploits bestätigt ein sicheres Prüfskript, dass das System verwundbar ist.
python3 poc/check_vulnerable.py
Der Prüfer meldet "potentially vulnerable", was den Weg für die Ausnutzung freimacht.
Ein unprivilegierter testuser-Account simuliert einen Angreifer ohne besondere Rechte.
sudo useradd -m testuser
sudo passwd testuser
su - testuser
id
📸 id zeigt UID 1001, was den Nicht-Root-Zugriff bestätigt.
Der offizielle V4bel-PoC wird vom unprivilegierten Account aus geklont und kompiliert.
git clone https://github.com/V4bel/dirtyfrag.git
cd dirtyfrag
gcc -O0 -Wall -o exp exp.c -lutil
./exp
📸 screenshots/exploit_execution.png — Der Exploit überschreibt den Page-Cache von /usr/bin/su und löst die beschädigte Binärdatei aus.
📸 screenshots/post_exploit_root.png — whoami- und id-Ausgabe beweisen die vollständige Root-Eskalation.
Der Exploit beschädigt nur den arbeitsspeicherinternen Page-Cache. Das /usr/bin/su auf der Festplatte behält seine ursprüngliche Prüfsumme.
sha256sum /usr/bin/su
Der sha256sum stimmt auch nach der Ausnutzung mit dem ursprünglichen Paket-Hash überein, was keine Datenträgeränderung bestätigt.
Nach dem Ausführen des Exploits ist der Page-Cache kontaminiert. Leeren Sie ihn immer:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# Oder starten Sie das System neu
Dirty Frag kann nicht durch Dateiintegritätsüberwachung erkannt werden. Stattdessen konzentrieren wir uns auf die Syscall-Primitive, die es verwendet.
Wir setzen benutzerdefinierte auditd-Regeln ein, die auslösen bei:
# /etc/audit/rules.d/dirtyfrag.rules
-a always,exit -F arch=b64 -S socket -F a0=38 -F uid!=0 -k dirtyfrag_af_alg
-a always,exit -F arch=b64 -S socket -F a0=21 -F uid!=0 -k dirtyfrag_rxrpc
-a always,exit -F arch=b64 -S splice -F uid!=0 -k dirtyfrag_splice
-a always,exit -F arch=b64 -S unshare -F uid!=0 -k dirtyfrag_namespace
-w /usr/bin/su -p r -k dirtyfrag_suid_read
Alle benutzerdefinierten Regeln sind aktiv, verifiziert mit auditctl -l.
Nach erneuter Ausführung des Exploits sehen wir Alarme für die genau verwendeten Syscalls:
Eine Sigma-Regel übersetzt die auditd-Ergebnisse in ein anbieterneutrales SIEM-Format.
Datei: detection/sigma/dirty_frag_exploit.yml
Eine YARA-Regel hilft, Dirty-Frag-Exploit-Code auf der Festplatte und im Speicher zu identifizieren.
Datei: detection/yara/dirty_frag_exploit.yar
Zusammenfassung der Erkennungsabdeckung
Ein vollständiger Incident-Response-Bericht ist unter reports/incident-dirtyfrag.md verfügbar. Er enthält:
Sofortige Gegenmaßnahmen (kein Neustart erforderlich):
echo "install esp4 /bin/false" | sudo tee /etc/modprobe.d/dirtyfrag.conf
echo "install esp6 /bin/false" | sudo tee -a /etc/modprobe.d/dirtyfrag.conf
echo "install rxrpc /bin/false" | sudo tee -a /etc/modprobe.d/dirtyfrag.conf
sudo rmmod esp4 esp6 rxrpc 2>/dev/null
⚠️ Auswirkungen: Das Deaktivieren dieser Module unterbricht die Funktionalität von IPsec-VPNs und AFS-Dateisystemen.
Ein einsatzbereites Gegenmaßnahmen-Skript ist unter mitigation/dirtyfrag_mitigation.sh enthalten.
Permanente Lösung: Aktualisieren Sie Ihren Kernel auf eine gepatchte Version.
| Kali Linux 2026.1 |
| Kernel | 6.18.12+kali‑amd64 |
| Exploit PoC | V4bel/dirtyfrag |
| Erkennung | auditd, Sigma, YARA |
| Ebene | Was es erkennt | Status |
|---|
| auditd | AF_ALG/AF_RXRPC Socket + splice-Syscalls + unshare | ✅ Bereitgestellt |
| Sigma | Syscall-Muster via SIEM | ✅ Regel bereit |
| YARA | PoC-Code auf Festplatte / im Speicher | ✅ Regel bereit |
| FIM (AIDE/Tripwire) | Dateiänderungen | ❌ Blind – kein Datenträgerschreibzugriff erfolgt |