
Laboratório reproduzível para CVE-2026-33017, uma RCE não autenticada no Langflow. Inclui um serviço vulnerável em Docker e um PoC de menor impacto que demonstra a execução de código por meio do endpoint público de build.
CVE-2026-33017 é uma vulnerabilidade de Execução Remota de Código (RCE) Não Autenticada no Langflow, onde um endpoint público de build aceita dados de fluxo controlados pelo atacante, permitindo que código de componente personalizado seja executado no servidor.
Neste laboratório, o fluxo de validação é:
PUBLICjob_idA prova é recuperada diretamente através do mecanismo de eventos da API do Langflow, tornando o resultado observável através da própria interface do sistema.
Este documento apresenta um laboratório somente de vulnerabilidade.
Atualmente, o docker compose contém apenas um serviço: , porque este projeto segue uma abordagem de e evita ambientes corrigidos que não sejam baseados em um artefato oficial corrigido.
vulnO seguinte comportamento foi verificado neste laboratório:
http://localhost:78611.8.1build_public_tmp retorna um job_idExemplo de objeto de prova:
{
"canary": "lf33017-c14fc1c9",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "155aa3fd5e2a",
"cwd": "/app",
"python_version": "3.12.12"
}
As evidências-chave são:
id_outputwhoamihostnamecwdpython_versionAs informações acima mostram que o código controlado pelo atacante foi realmente executado no lado do servidor.
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
7861 -> 7860Esta vulnerabilidade existe porque o endpoint público de build do Langflow aceita definições de fluxo fornecidas pelo usuário, mesmo que o endpoint já seja projetado para fluxos públicos. Quando um atacante envia uma definição de nó contendo código de componente personalizado, o sistema passa esse código para o caminho de build do fluxo, o que resulta em execução de código no servidor.
O PoC neste projeto usa um componente personalizado que retorna um objeto de prova em sua saída para demonstrar que o código controlado pelo atacante é realmente executado.
O PoC neste projeto é projetado para causar mínimo dano e foca em prova claramente observável através da API. Seu fluxo de trabalho é o seguinte:
PUBLICjob_idEste PoC não cobre:
docker compose up -d --build
curl -i http://localhost:7861/api/v1/version
python3 poc/poc.py --base-url http://localhost:7861 --artifact-dir ./artifacts/vuln
Quando o PoC for bem-sucedido, a saída será semelhante a esta:
[+] http://localhost:7861 pronto (version=1.8.1)
=== ALVO: vuln ===
Base URL : http://localhost:7861
Versão : 1.8.1
Flow ID : <uuid>
HTTP : 200
Job ID : <uuid>
Canary : lf33017-xxxxxxxx
Eventos : artifacts/vuln/events-<job_id>.ndjson
Consultas: 2
[+] Prova observada através do endpoint de eventos da API do Langflow:
{
"canary": "lf33017-xxxxxxxx",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "<container-hostname>",
"cwd": "/app",
"python_version": "3.12.x"
}
[+] Comportamento vulnerável observado
O arquivo artifacts/vuln/events-<job_id>.ndjson armazena dados brutos de eventos para depuração adicional.
Este PoC demonstra que:
Este PoC não tem a intenção de demonstrar persistência ou pós-exploração avançada e mantém o impacto no nível mínimo necessário para validar a vulnerabilidade.
Com base neste laboratório, o impacto demonstrado é:
Este repositório não inclui um serviço corrigido por design.
Seu escopo é limitado a reproduzir o comportamento vulnerável em um artefato upstream real. Um lado corrigido só é adicionado quando há um artefato oficial corrigido claramente verificável disponível do fornecedor ou do projeto upstream.
Por esse motivo, este repositório evita deliberadamente:
Isso mantém o laboratório com escopo restrito e tecnicamente honesto. Em vez de apresentar uma configuração lado a lado artificial, o repositório foca em três coisas:
Na prática, isso torna o repositório mais adequado para:
docker compose down -v
Este laboratório é projetado para testes apenas em localhost.
Requisitos de uso: