## Resumo
**CVE-2026-33017** é uma vulnerabilidade crítica de **Execução Remota de Código (RCE) não autenticada** no [[langflow]], plataforma open-source com mais de 145.000 estrelas no GitHub, amplamente utilizada para construção de agentes de IA e pipelines RAG (_Retrieval-Augmented Generation_). A falha, com CVSS 9.8, permite que um atacante execute código Python arbitrário em qualquer instância Langflow exposta na internet com um único request HTTP - sem necessidade de autenticação, credenciais ou interação do usuário.
Divulgada em 17 de março de 2026, a vulnerabilidade foi adicionada ao catálogo [[cisa-kev]] da CISA em **25 de março de 2026**, com prazo de remediação para agências federais dos EUA até **8 de abril de 2026**. As primeiras tentativas de exploração foram observadas apenas **20 horas após a divulgação do advisory**, antes mesmo da existência de qualquer PoC público.
> [!danger] CISA KEV - Exploração Ativa Confirmada
> Esta vulnerabilidade está catalogada no **CISA Known Exploited Vulnerabilities Catalog** desde 25/03/2026. Instâncias Langflow versões 1.8.1 e anteriores devem ser atualizadas imediatamente para a versão **1.9.0**. Tratar todas as credenciais conectadas como comprometidas.
---
## Detalhes Técnicos
### Endpoint Vulnerável
O endpoint afetado é:
```
POST /api/v1/build_public_tmp/{flow_id}/flow
```
Este endpoint foi projetado para permitir que usuários acessem fluxos públicos **sem autenticação** - comportamento intencional para o recurso de fluxos públicos do Langflow. O problema surge quando o parâmetro opcional `data` é fornecido na requisição: em vez de usar a definição de fluxo armazenada no servidor, o endpoint aceita e executa a definição fornecida pelo atacante.
### Causa Raiz - Code Injection
A cadeia de execução maliciosa percorre as seguintes funções internas:
```
start_flow_build()
→ generate_flow_events()
→ create_graph()
→ build_graph_from_data() ← payload do atacante entra aqui
→ Graph.from_payload()
→ vertex.instantiate_component()
→ instantiate_class()
→ eval_custom_component_code() ← Python eval sem sandbox
```
O campo `code` presente nos `nodes` do payload JSON é extraído e passado diretamente para a função de avaliação de código Python **sem qualquer sandbox ou validação**. A técnica se enquadra em [[t1059-command-scripting-interpreter|T1059]] (Command and Scripting Interpreter) e [[t1190-exploit-public-facing-application|T1190]] (Exploit Public-Facing Application).
### Vetor de Ataque - Single HTTP Request
A exploração é trivialmente simples: um único request `POST` com um payload JSON contendo código Python malicioso no campo `code` dos nós do fluxo é suficiente para RCE imediato. Quando `AUTO_LOGIN=true` (configuração padrão), o pré-requisito de conhecer o UUID de um fluxo público desaparece: o atacante pode chamar `/api/v1/auto_login` para obter um token de superusuário e criar o próprio fluxo público.
O request de exploração consiste em:
- Método: `POST`
- Endpoint: `/api/v1/build_public_tmp/{flow_id}/flow`
- Cookie: `client_id=<qualquer string>`
- Body: JSON com nós contendo código Python arbitrário no campo `template.code.value`
### CWEs Associados
| CWE | Descrição |
|-----|-----------|
| CWE-94 | Improper Control of Code Generation (Code Injection) |
| CWE-95 | Improper Neutralization of Directives in Eval (Eval Injection) |
| CWE-306 | Missing Authentication for Critical Function |
### Distinção de CVE-2025-3248
Esta vulnerabilidade é **diferente** de [[cve-2025-3248|CVE-2025-3248]], a RCE anterior do Langflow (CISA KEV desde maio de 2025). Enquanto a CVE-2025-3248 afetava o endpoint `/api/v1/validate/code` (corrigido com adição de autenticação), a CVE-2026-33017 explora o endpoint `build_public_tmp` - que **por design não pode exigir autenticação** sem quebrar o recurso de fluxos públicos. A correção adequada foi remover o parâmetro `data` do endpoint público.
---
## Impacto
Um atacante que explore com sucesso a CVE-2026-33017 obtém execução de código arbitrário com os **privilégios completos do processo Langflow**. O impacto é amplificado pelo perfil típico de implantação da ferramenta: ambientes Langflow frequentemente contêm credenciais de alto valor conectadas a infraestrutura crítica de IA.
### O que pode ser comprometido
- **Chaves de API de LLMs** - OpenAI, Anthropic, Google: execução de inferência às custas da vítima, acesso a modelos ajustados e potencial exfiltração de dados de treinamento
- **Credenciais de bancos de dados vetoriais** - Pinecone, Weaviate, Chroma, pgvector - bases de conhecimento proprietárias embutidas
- **Senhas de bancos de dados** - todos os bancos conectados ao Langflow para recuperação RAG
- **Variáveis de ambiente** - todos os segredos armazenados no ambiente (arquivos `.env`)
- **Arquivos do sistema** - `/etc/passwd`, `/etc/shadow`, arquivos de configuração
- **Execução de payloads de segunda etapa** - entrega de malware, backdoors, reverse shells
- **Comprometimento de cadeia de suprimentos de software** - via acesso a pipelines de CI/CD conectados
A coleta de credenciais mapeia para [[t1552-unsecured-credentials|T1552]] e [[t1083-file-and-directory-discovery|T1083]]. A exfiltração se enquadra em [[t1041-exfiltration-over-c2-channel|T1041]].
> [!latam] Impacto no Brasil e América Latina
> O **Langflow** é amplamente adotado por startups de IA, fintechs e equipes de desenvolvimento no Brasil e LATAM. Os setores de tecnologia e financeiro são os mais expostos, especialmente projetos que integram LLMs a dados proprietários ou sistemas bancários. Instâncias Langflow comprometidas em ambientes financeiros brasileiros podem expor chaves de API de modelos de linguagem, bases de conhecimento vetoriais com dados de clientes, e credenciais de infraestrutura de IA - com potencial de impacto regulatório sob a **LGPD**.
O [[technology|setor de tecnologia]] e [[financial|financeiro]] são os mais expostos na região, especialmente projetos que integram LLMs a dados proprietários ou sistemas bancários.
---
## Exploração Ativa
### Timeline de Exploração
| Data | Evento |
|------|--------|
| 25/02/2026 | Pesquisador Aviral Srivastava reporta via GitHub Security Advisory |
| 10/03/2026 | Equipe Langflow confirma o relatório e incorpora correção (PR #12160) |
| 16/03/2026 | Advisory publicado (GHSA-vwmf-pq79-vjvx) |
| 17/03/2026 | CVE-2026-33017 atribuído; primeiras explorações em honeypots Sysdig (+20h) |
| 18-19/03/2026 | Fase 2: reconhecimento ativo com infraestrutura pré-preparada |
| 19+/03/2026 | Fase 3: exfiltração direcionada de credenciais de vítimas identificadas |
| 25/03/2026 | CISA adiciona ao catálogo KEV - prazo federal: 08/04/2026 |
### Fases do Ataque Observado (Sysdig TRT)
A equipe Sysdig Threat Research Team (TRT) monitorou a progressão em honeypots:
```mermaid
graph TB
A["📡 Fase 1: Scanning Automatizado<br/>4 IPs - payload idêntico<br/>Horas 20-21 após advisory"] --> B["🔍 Fase 2: Reconhecimento Ativo<br/>5º IP com infra pré-preparada<br/>Identificação de alvos com APIs e DBs<br/>Horas 20-48"]
B --> C["💰 Fase 3: Exfiltração de Credenciais<br/>Scripts Python customizados<br/>6 IPs únicos observados<br/>Horas 48+"]
C --> D["🔗 Impacto Final<br/>LLM APIs, DBs vetoriais<br/>Variáveis .env, supply chain de IA"]
```
**Nenhum PoC público existia** quando as primeiras explorações ocorreram - atacantes reverse-engineeraram o exploit diretamente da descrição do advisory, evidenciando [[t1588-obtain-capabilities|T1588]] (Obtain Capabilities) avançado.
### PoCs Públicos Identificados
Após a divulgação, múltiplos repositórios PoC surgiram no GitHub:
- `omer-efe-curkus/CVE-2026-33017-Langflow-RCE-PoC` - Python, publicado ~21/03/2026
- `SimoesCTT/Sovereign-Echo-33017` - exploit via endpoint `build_public_tmp`
A existência de PoCs públicos aumenta significativamente o risco para instâncias ainda não atualizadas.
---
## Mitigação
### Ação Primária - Atualização Imediata para 1.9.0
> [!warning] Atualizar para Langflow 1.9.0 imediatamente
> Esta é a única mitigação definitiva. A versão 1.9.0 remove o parâmetro `data` do endpoint público, impedindo que definições de fluxo fornecidas pelo atacante sejam aceitas.
```bash
pip install langflow==1.9.0
# ou, em Docker:
docker pull langflowai/langflow:1.9.0
```
**Referência:** [GHSA-vwmf-pq79-vjvx](https://github.com/langflow-ai/langflow/security/advisories/GHSA-vwmf-pq79-vjvx) | [Commit de correção #73b6612](https://github.com/langflow-ai/langflow/commit/73b6612e3ef25fdae0a752d75b0fabd47328d4f0)
### Mitigações Adicionais
1. **Colocar o Langflow atrás de autenticação** - proxy reverso com auth, VPN ou zero-trust; não expor diretamente à internet mesmo após o patch
2. **Rotacionar todas as credenciais** conectadas a qualquer instância rodando Langflow ≤ 1.8.1 - tratar como comprometidas: chaves OpenAI/Anthropic/Google, credenciais de bancos de dados, variáveis de ambiente
3. **Desabilitar `AUTO_LOGIN`** - esta configuração padrão remove o requisito de conhecer um UUID de fluxo público
4. **Bloquear endpoint no WAF/proxy:** `POST /api/v1/build_public_tmp/*/flow`
5. **Monitorar** conexões de saída incomuns do processo Langflow - especialmente para `*.oast.live`, `*.oastify.com` ou IPs desconhecidos
### Mapeamento de Mitigações MITRE ATT&CK
| Mitigação | Controle |
|-----------|---------|
| [[m1042-disable-or-remove-feature-or-program\|M1042]] | Desabilitar endpoint público ou implementar WAF |
| [[m1026-privileged-account-management\|M1026]] | Executar Langflow com conta de serviço com privilégios mínimos |
| [[m1030-network-segmentation\|M1030]] | Isolar instâncias Langflow em segmentos de rede restritos |
| [[m1022-restrict-file-and-directory-permissions\|M1022]] | Restringir acesso a arquivos `.env` e diretórios de configuração |
---
## Indicadores de Comprometimento
> [!ioc]- IOCs - CVE-2026-33017 Langflow RCE / Exploração Ativa (TLP:GREEN)
> Fonte: Sysdig TRT, The Hacker News, confirmados em exploracao ativa.
>
> **IPs de C2 (Defanged)**
> - `143.110.183[.]86` porta 8080 - servidor C2 de exfiltracao
> - `173.212.205[.]251` porta 8443 - entrega de payload de segunda etapa
>
> **Dominios OOB (Out-of-Band Callback)**
> - `*.oast.live` - subdomínios gerados por atacantes para validar execucao de codigo
> - `*.oastify.com` - servico OOB alternativo usado na exploracao
> - `*.interactsh.com` - subdomínios únicos por request para validacao de RCE
>
> **Behavioral IoCs**
> - Processo Langflow executando comandos de sistema: `id`, `whoami`, `uname -a`
> - Leitura de `/etc/passwd`, `/etc/shadow`, arquivos `.env`
> - Conexoes DNS para `*.oast.live` ou `*.oastify.com` originadas do processo Langflow
> - Dropper de segunda etapa via `curl` para IPs externos desconhecidos
> - Exfiltracao de output codificado em base64 para IPs externos
---
## Referências
| Fonte | Link |
|-------|------|
| NVD | [nvd.nist.gov/vuln/detail/CVE-2026-33017](https://nvd.nist.gov/vuln/detail/CVE-2026-33017) |
| GitHub Advisory (GHSA) | [GHSA-vwmf-pq79-vjvx](https://github.com/langflow-ai/langflow/security/advisories/GHSA-vwmf-pq79-vjvx) |
| CISA KEV | [www.cisa.gov/known-exploited-vulnerabilities-catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
| Sysdig TRT - Análise de Exploração | [sysdig.com/blog/CVE-2026-33017](https://www.sysdig.com/blog/CVE-2026-33017-how-attackers-compromised-langflow-ai-pipelines-in-20-hours) |
| The Hacker News | [thehackernews.com/2026/03/critical-langflow-flaw](https://thehackernews.com/2026/03/critical-langflow-flaw-CVE-2026-33017.html) |
| Pesquisador (Aviral Srivastava) | [dev.to/aviral_srivastava](https://dev.to/aviral_srivastava_ba4f282/CVE-2026-33017-how-i-found-an-unauthenticated-rce-in-langflow-by-reading-the-code-they-already-3l2b) |
| Commit de Correção | [github.com/langflow-ai/langflow/commit/73b6612](https://github.com/langflow-ai/langflow/commit/73b6612e3ef25fdae0a752d75b0fabd47328d4f0) |
| Infosecurity Magazine | [infosecurity-magazine.com](https://www.infosecurity-magazine.com/news/hackers-exploit-critical-langflow/) |
| OpenCVE | [app.opencve.io/cve/CVE-2026-33017](https://app.opencve.io/cve/CVE-2026-33017) |