
Nuclei-Vorlage zur Erkennung von CVE-2026-33017, einer nicht authentifizierten Remote-Code-Ausführung-Sicherheitslücke in Langflow ≤ 1.8.2. Führt zerstörungsfreie Vorprüfungen durch, um verwundbare von gepatchten Versionen mittels HTTP-Antwortanalyse zu unterscheiden.
Nuclei-Vorlage, die CVE-2026-33017 erkennt — eine nicht authentifizierte Remote-Code-Ausführungs-Schwachstelle in Langflow ≤ 1.8.2, die über den öffentlichen flow-build-Endpunkt erreichbar ist:
POST /api/v1/build_public_tmp/{flow_id}/flow
Der angreifbare Handler akzeptiert ein angreifergesteuertes data-Flussdiagramm und übergibt data.nodes[].data.node.template.code.value während des Diagrammbaus direkt an Python exec(), ohne Sandboxing. Der Fix (≥ 1.9.0) entfernt den data-Parameter aus der Handler-Signatur, sodass ein gepatchter Build dieselbe Anfrage auf der FastAPI-Validierungsebene mit HTTP 422 ablehnt.
Die Vorlage ist nicht destruktiv. Sie sendet eine inerte Nutzlast gegen eine Null-UUID-Flow-ID, sodass sie selbst auf einem anfälligen Host nicht exec() erreichen kann. Sie unterscheidet den anfälligen Handler vom gepatchten allein durch die HTTP-Antwortsignatur.
| Stufe | Anfrage | Was sie dir sagt |
|---|---|---|
| 1 |
Routing für Stufe 2:
Eine echte RCE-Bestätigung erfordert (a) eine echte PUBLIC-Flow-UUID auf dem Ziel und (b) einen Out-of-Band-Callback (DNS/HTTP). Dieser Schritt ist absichtlich nicht enthalten – diese Vorlage ist die sichere Vorprüfung, die entscheidet, ob die Durchführung eines aktiven Exploits überhaupt sinnvoll ist.
Einzelner Host:
nuclei -t CVE-2026-33017.yaml -u https://target.example.com
Massenscan aus einer Liste:
nuclei -t CVE-2026-33017.yaml -l targets.txt -rl 20 -c 10
Mit Debug-Ausgabe (siehe die rohen Anfragen/Antworten):
nuclei -t CVE-2026-33017.yaml -u https://target.example.com -debug-req -debug-resp
Vorlage lokal validieren, bevor Sie sie ausführen:
nuclei -validate -t CVE-2026-33017.yaml
Vulnerable target:
[CVE-2026-33017] [http] [critical] https://target.example.com [vulnerable-flow-not-found] ["1.8.2","base"]
Gepatchtes Ziel – kein Finding ausgegeben (422-Antwort stimmt mit keiner Regel überein).
Häufige Suchanfragen für Langflow-Hosts (nur gegen Vermögenswerte verwenden, für die Sie autorisiert sind, Tests durchzuführen):
http.title:"Langflow"app="Langflow"intitle:"Langflow" inurl:"/flows"AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HIn anfälligen Builds wird der öffentliche Handler ungefähr wie folgt deklariert:
@router.post("/build_public_tmp/{flow_id}/flow")
async def build_public_flow(flow_id: UUID, data: FlowDataRequest | None = None, ...):
...
await verify_public_flow_and_get_user(flow_id, ...)
...
# data.nodes[].data.node.template.code.value reaches exec() in the
# Component build path
data wird vom Angreifer kontrolliert. Der gepatchte Handler entfernt den Parameter vollständig und erzwingt data=None, weshalb eine Anfrage, die ein data-Body-Feld enthält, auf gepatchten Builds mit 422 abgelehnt wird.
/api/v1/build_public_tmp/ am Reverse-Proxy.LANGFLOW_AUTO_LOGIN=False, konfigurieren Sie Superuser-Anmeldedaten und rotieren Sie LANGFLOW_SECRET_KEY.access_type=PUBLIC-Flows sind diejenigen, die ein Angreifer in der URL anvisieren würde.Diese Vorlage wird nur für defensive Sicherheit und autorisierte Tests veröffentlicht. Die Ausführung gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben, ist in den meisten Rechtsordnungen illegal und verstößt gegen die Nutzungsbedingungen der Plattform.
Durch die Nutzung dieser Vorlage stimmen Sie zu, dass:
lopseg — https://github.com/lopseg
Pull-Requests und Issues sind willkommen.
MIT
GET /api/v1/version| Bestätigt, dass das Ziel Langflow ist, und extrahiert die Build-Version. |
| 2 | POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000000/flow mit einem Body, der das data-Feld und einen inerten template.code.value enthält | Routing-Entscheidung unten |
| Status | Body enthält | Ergebnis |
|---|
404 | flow / public | ANFÄLLIG — Handler hat data akzeptiert, die Suche schlug dann fehl, weil die UUID gefälscht ist |
200 | job_id / build / task | ANFÄLLIG — Handler hat data akzeptiert und den Build-Pfad betreten |
5xx | exec / Component / traceback | ANFÄLLIG — Handler erreichte den Exec-Code-Pfad, bevor er fehlschlug |
422 | Field required / extra / data | GEPATCHT — Handler-Signatur akzeptiert data nicht mehr |