
Preuve de concept pour CVE-2026-9198 - IBM Langflow RCE non authentifié via contournement de l'auto-connexion
Ce dépôt fournit une preuve de concept éducative pour CVE-2026-9198 affectant IBM Langflow OSS.
Le PoC (poc.py) montre comment un attaquant non authentifié peut enchaîner :
GET/POST /api/v1/auto_login (renvoie un jeton superutilisateur lorsque la connexion automatique est activée), etPOST /api/v1/validate/code (exécute du code Python contrôlé par l'attaquant)pour parvenir à une exécution de code à distance.
Ce code et les piles Docker fournies sont destinés uniquement aux tests de sécurité locaux et à l'éducation.
Ne les exécutez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas explicitement l'autorisation de tester.
.
├── poc.py
├── vulnerable/docker-compose.yaml
└── patched/docker-compose.yaml
poc.py : PoC d'exploitation.vulnerable/docker-compose.yaml : pile de laboratoire utilisant langflowai/langflow:1.10.0 (vulnérable).patched/docker-compose.yaml : pile de laboratoire utilisant langflowai/langflow:1.10.1 (comportement corrigé visé).Les deux fichiers compose sont intentionnellement configurés comme laboratoires pour tester poc.py sur http://127.0.0.1:9999.
pip install requests
Démarrez l'environnement vulnérable :
docker compose -f vulnerable/docker-compose.yaml up -d
Exécutez le PoC :
python3 poc.py
Le résultat vulnérable attendu comprend une ligne rouge [!] et une sortie de commande similaire à :
[!] /api/v1/auto_login is vulnerable: uid=... gid=...
Arrêtez d'abord la pile vulnérable (si elle est en cours d'exécution) :
docker compose -f vulnerable/docker-compose.yaml down -v
Démarrez l'environnement corrigé :
docker compose -f patched/docker-compose.yaml up -d
Exécutez le même PoC :
python3 poc.py
Le résultat corrigé attendu est une ligne verte [-] indiquant que la chaîne d'exploitation ne réussit plus.
Dans poc.py :
URL est par défaut http://127.0.0.1:9999CMD est par défaut idAjustez ces constantes si vous avez besoin de tester une autre cible locale ou une autre commande.