
Prova de Conceito para CVE-2026-9198 - IBM Langflow RCE não autenticado via bypass de login automático
Este repositório fornece uma prova de conceito educacional para CVE-2026-9198 que afeta o IBM Langflow OSS.
O PoC (poc.py) demonstra como um atacante não autenticado pode encadear:
GET/POST /api/v1/auto_login (retorna um token de superusuário quando o auto-login está habilitado), ePOST /api/v1/validate/code (executa código Python controlado pelo atacante)para obter execução remota de código.
Este código e as stacks Docker fornecidas são apenas para testes de segurança locais e educação.
Não execute contra sistemas que você não possui ou para os quais não tem permissão explícita para testar.
.
├── poc.py
├── vulnerable/docker-compose.yaml
└── patched/docker-compose.yaml
poc.py: PoC do exploit.vulnerable/docker-compose.yaml: stack de laboratório usando langflowai/langflow:1.10.0 (vulnerável).patched/docker-compose.yaml: stack de laboratório usando langflowai/langflow:1.10.1 (comportamento alvo corrigido).Ambos os arquivos compose são configurados intencionalmente como laboratórios para testar o poc.py em http://127.0.0.1:9999.
pip install requests
Inicie o ambiente vulnerável:
docker compose -f vulnerable/docker-compose.yaml up -d
Execute o PoC:
python3 poc.py
O resultado esperado para o ambiente vulnerável inclui uma linha vermelha [!] e uma saída de comando semelhante a:
[!] /api/v1/auto_login is vulnerable: uid=... gid=...
Pare a stack vulnerável primeiro (se estiver em execução):
docker compose -f vulnerable/docker-compose.yaml down -v
Inicie o ambiente corrigido:
docker compose -f patched/docker-compose.yaml up -d
Execute o mesmo PoC:
python3 poc.py
O resultado esperado para o ambiente corrigido é uma linha verde [-] indicando que a cadeia de exploração não é mais bem-sucedida.
Em poc.py:
URL tem como padrão http://127.0.0.1:9999CMD tem como padrão idAjuste essas constantes se precisar testar um alvo local diferente ou um comando diferente.