
Prova di concetto per CVE-2026-9198 - RCE non autenticata in IBM Langflow tramite bypass del login automatico
Questo repository fornisce una proof of concept didattica per CVE-2026-9198 che colpisce IBM Langflow OSS.
Il PoC (poc.py) mostra come un attaccante non autenticato possa concatenare:
GET/POST /api/v1/auto_login (restituisce un token da superutente quando l'auto-login è abilitato), ePOST /api/v1/validate/code (esegue codice Python controllato dall'attaccante)per ottenere l'esecuzione remota di codice.
Questo codice e gli stack Docker forniti sono destinati esclusivamente a test di sicurezza locali e a scopo educativo.
Non eseguirlo contro sistemi che non possiedi o per i quali non hai esplicitamente il permesso di testare.
.
├── poc.py
├── vulnerable/docker-compose.yaml
└── patched/docker-compose.yaml
poc.py: PoC dell'exploit.vulnerable/docker-compose.yaml: stack di laboratorio che usa langflowai/langflow:1.10.0 (vulnerabile).patched/docker-compose.yaml: stack di laboratorio che usa langflowai/langflow:1.10.1 (target del comportamento corretto).Entrambi i file compose sono configurati intenzionalmente come laboratori per testare poc.py su http://127.0.0.1:9999.
pip install requests
Avvia l'ambiente vulnerabile:
docker compose -f vulnerable/docker-compose.yaml up -d
Esegui il PoC:
python3 poc.py
Il risultato atteso nell'ambiente vulnerabile include una riga rossa [!] e un output del comando simile a:
[!] /api/v1/auto_login is vulnerable: uid=... gid=...
Arresta prima lo stack vulnerabile (se è in esecuzione):
docker compose -f vulnerable/docker-compose.yaml down -v
Avvia l'ambiente corretto:
docker compose -f patched/docker-compose.yaml up -d
Esegui lo stesso PoC:
python3 poc.py
Il risultato atteso nell'ambiente corretto è una riga verde [-] che indica che la catena dell'exploit non riesce più.
In poc.py:
URL ha come default http://127.0.0.1:9999CMD ha come default idModifica queste costanti se devi testare un target locale o un comando diverso.