
Testeur pour CVE-2026-43284
Un outil de diagnostic communautaire permettant de déterminer si un hôte XCP-ng dom0 est exposé à CVE-2026-43284 (« Dirty Frag »), une vulnérabilité locale d'élévation de privilèges dans le sous-système xfrm-ESP du noyau Linux.
TL;DR — Toutes les versions actuelles de XCP-ng (8.1, 8.2, 8.3) utilisant le noyau dom0 4.19 par défaut se situent dans la plage de code vulnérable. Aucun correctif officiel XCP-ng n'a été publié à ce jour (mai 2026). Cet outil vous indique de manière définitive si votre hôte est exposé et fournit une atténuation intermédiaire sûre.
« Dirty Frag » est une vulnérabilité locale d'élévation de privilèges divulguée publiquement en mai 2026 par le chercheur Hyunwoo Kim (@v4bel). Elle exploite un chemin rapide de déchiffrement sur place dans le sous-système IPsec ESP du noyau Linux, introduit en janvier 2017 (noyau 4.14+). Une preuve de concept publique fonctionnelle permet d'obtenir un shell root via des appels système standards, sans nécessiter d'exploit noyau.
Deux CVE ont été publiées :
| CVE | Sous-système | Introduit | S'applique à XCP-ng 4.19 ? |
|---|---|---|---|
| CVE-2026-43284 | xfrm-ESP (esp4/esp6) | noyau 4.14, janv. 2017 | OUI |
| CVE-2026-43500 | RxRPC (rxkad) | noyau 6.4, juin 2023 | Non — rxrpc.ko non fourni |
XCP-ng n'a pas besoin de CVE-2026-43500 pour être exploitable. Le chemin esp4 (CVE-2026-43284) seul est suffisant car le dom0 XCP-ng n'a pas de politique AppArmor et autorise la création d'espaces de noms utilisateur non privilégiés — la seule condition préalable requise par le chemin d'exploitation esp4. Voir TECHNICAL.md pour l'analyse complète.
Le script de diagnostic teste la condition nécessaire et suffisante de CVE-2026-43284 sur XCP-ng : savoir si un processus non privilégié peut engager le moteur de déchiffrement sur place esp4 via l'interface netlink XFRM à l'intérieur d'un espace de noms utilisateur.
Il ne fait pas :
Il peut être exécuté en toute sécurité sur un dom0 de production.
# Cloner le dépôt
git clone https://github.com/grabesec/XCP_ng_CVE-2026-43284_tester.git
cd XCP_ng_CVE-2026-43284_tester
# Exécuter le diagnostic (en tant que non-root pour la preuve la plus solide)
python3 XCP_ng_CVE_2026_43284_tester.py
Remarque : Exécutez de préférence en tant qu'utilisateur non root. Cela simule le modèle de menace réel : un compte de service compromis ou une évasion d'invité atteignant dom0. L'exécution en tant que root donne un résultat valide mais est moins illustrative.
=================================================================
XCP-ng Dirty Frag Diagnostic -- CVE-2026-43284
xfrm-ESP Page-Cache Write / Local Privilege Escalation
=================================================================
Kernel : 4.19.0+1
Host : xcpng-prod-01
PID : 52306 | UID: 1000
=================================================================
[Phase 0] Vérifications préliminaires de l'environnement
---------------------------------------------
[*] Espaces de noms utilisateur non privilégiés : AUTORISÉS
[*] Liste noire esp4 dans modprobe.d : NON TROUVÉE
[*] Correctif CVE-2026-43284 dans le RPM du noyau : NON TROUVÉ
[Phase 1] État de base du module esp4
---------------------------------------------
[*] esp4 est ENDORMI — actuellement non chargé dans le noyau.
Le mécanisme de chargement automatique peut le récupérer à la demande via XFRM.
[Phase 2] Tentative d'engagement de esp4 depuis un espace de noms non privilégié
---------------------------------------------
[*] Création d'un processus fils dans un espace de noms utilisateur+réseau isolé
(unshare -U -n -r) -- simulation d'un attaquant local non root
[*] Signal du processus fils : SA XFRM acceptée par le noyau
[*] Référence esp4 : 0 (avant) -> 1 (maintenant)
[*] /proc/modules : esp4 16384 1 - Live 0xffffffffc0a12000
[Phase 3] Verdict technique
=================================================================
[!!!] PREUVE D'EXPOSITION -- CVE-2026-43284 [!!!]
Référence esp4 augmentée : 0 -> 1
Un processus non privilégié à l'intérieur d'un espace de noms
utilisateur+réseau a enregistré avec succès une association de
sécurité XFRM et engagé le moteur de déchiffrement sur place
esp4 dans le noyau hôte. C'est la condition d'accès pour
CVE-2026-43284.
Analyse spécifique à XCP-ng :
[ÉCHEC] Le noyau 4.19 comporte le code vulnérable (depuis la 4.14)
[ÉCHEC] Les espaces de noms utilisateur sont ouverts -- le chemin esp4 est accessible
[OK] rxrpc.ko absent -- CVE-2026-43500 ne s'applique pas
[ÉCHEC] Le chemin esp4 seul est suffisant sur cette configuration
[Phase 0] Vérifications préliminaires de l'environnement
---------------------------------------------
[+] Liste noire esp4 trouvée dans /etc/modprobe.d/
L'atténuation par blocage de module semble en place.
...
[Phase 2] Tentative d'engagement de esp4 depuis un espace de noms non privilégié
---------------------------------------------
[+] L'ajout d'état XFRM a été REJETÉ par le noyau.
Le moteur esp4 n'a pas été engagé depuis l'espace de noms.
[RÉSULTAT] La faille de l'espace de noms n'a PAS accordé l'accès à esp4.
Le script mitigate.sh inclus applique l'atténuation de manière sécurisée, avec une détection IPsec intégrée pour éviter de casser les tunnels :
# Vérifier uniquement l'état actuel (aucune modification)
sudo ./mitigate.sh --check
# Appliquer l'atténuation (s'arrête si IPsec est détecté)
sudo ./mitigate.sh
# Supprimer l'atténuation (après application du correctif officiel du noyau)
sudo ./mitigate.sh --undo
Option A — Hôtes n'utilisant PAS IPsec (la plupart des dom0) :
echo 'install esp4 /bin/false' > /etc/modprobe.d/dirtyfrag-cve-2026-43284.conf
rmmod esp4 2>/dev/null || true
echo 3 > /proc/sys/vm/drop_caches
Option B — Hôtes utilisant IPsec (strongSwan / Libreswan) :
Ne PAS mettre esp4 en liste noire — cela casserait immédiatement tous les tunnels. À la place :
⚠️ Il s'agit d'une ÉLÉVATION DE PRIVILÈGES LOCALE. Un attaquant doit déjà disposer d'un shell ou d'une exécution de code sur dom0. La défense principale consiste à limiter les personnes ayant un accès local à dom0. Root dom0 = root hyperviseur = toutes les machines virtuelles invitées compromises.
| Prérequis | Remarques |
|---|---|
| Python 3.6+ | Fourni avec XCP-ng 8.x dom0 |
iproute2 (commande ip) | Fourni avec XCP-ng 8.x dom0 |
unshare | Fait partie de util-linux, fourni avec XCP-ng 8.x dom0 |
| Noyau Linux | Tout noyau 4.14–6.x sur un dom0 XCP-ng |
Aucune bibliothèque Python externe requise. Pas besoin de pip install.
XCP_ng_CVE-2026-43284_tester/
├── XCP_ng_CVE_2026_43284_tester.py # Script de diagnostic — exécutez-le en premier
├── mitigate.sh # Script d'atténuation avec détection IPsec
├── README.md # Ce fichier — démarrage rapide et aperçu
├── TECHNICAL.md # Analyse technique approfondie — chaîne d'attaque,
│ # pourquoi rxrpc n'est pas nécessaire sur XCP-ng,
│ # explication du fonctionnement interne du script
├── CHANGELOG.md # Historique des versions
└── LICENSE # MIT
Pour une explication complète :
Voir TECHNICAL.md.
| Version XCP-ng | Noyau | Vulnérable ? | Correctif officiel ? |
|---|---|---|---|
| 8.3 LTS | 4.19 + correctifs Vates | OUI | Non publié à ce jour (mai 2026) |
| 8.2 | 4.19 + correctifs Vates | OUI | Non publié à ce jour (mai 2026) |
| 8.1 (EOL) | 4.19 + correctifs Vates | OUI | Pas attendu |
Cet outil teste uniquement la condition préalable à l'exploitation (accès espace de noms + esp4). Il ne contient, ne reproduit et ne référence aucun code d'exploit. La vulnérabilité sous-jacente est publiquement connue, a une preuve de concept publiée par le chercheur original et a reçu des CVE. Le but de cet outil est d'aider les administrateurs XCP-ng à déterminer leur exposition et à appliquer des atténuations provisoires en attendant un correctif officiel du noyau de la part de Vates.
Rodrigo Gracia — Contribution communautaire à la sécurité
Praticien XCP-ng / Xen Orchestra
https://github.com/grabesec
Mai 2026