
CVE-2026-33017을 탐지하기 위한 Nuclei 템플릿입니다. 이 취약점은 Langflow ≤ 1.8.2에서 인증 없이 원격 코드 실행이 가능한 취약점입니다. HTTP 응답 분석을 통해 취약한 빌드와 패치된 빌드를 구분하기 위해 비파괴적인 사전 점검을 수행합니다.
CVE-2026-33017을 탐지하는 Nuclei 템플릿입니다 — Langflow ≤ 1.8.2에서 공개 flow-build 엔드포인트를 통해 접근 가능한 인증 없는 원격 코드 실행 취약점입니다:
POST /api/v1/build_public_tmp/{flow_id}/flow
취약한 핸들러는 공격자가 제어하는 data flow 그래프를 허용하며, 그래프 빌드 중 data.nodes[].data.node.template.code.value를 샌드박스 없이 Python exec()에 직접 전달합니다. 수정 버전(≥ 1.9.0)에서는 핸들러 시그니처에서 data 매개변수를 제거하여, 패치된 빌드는 동일한 요청을 FastAPI의 유효성 검사 계층에서 HTTP 422로 거부합니다.
이 템플릿은 비파괴적입니다. 0-UUID flow ID에 무해한 페이로드를 전송하므로, 취약한 호스트에서도 exec()에 도달할 수 없습니다. HTTP 응답 시그니처만으로 취약한 핸들러와 패치된 핸들러를 구분합니다.
| 단계 | 요청 | 알려주는 내용 |
|---|---|---|
| 1 | GET /api/v1/version | 대상이 Langflow임을 확인하고 빌드 버전을 추출합니다. |
단계 2의 라우팅:
실제 RCE 확인을 위해서는 여전히 (a) 대상에 실제 공개 flow UUID와 (b) **대역 외 콜백(DNS/HTTP)**이 필요합니다. 이 단계는 의도적으로 여기에 포함되지 않았습니다 — 이 템플릿은 능동적인 익스플로잇을 실행하는 것이 의미 있는지 판단하기 위한 안전한 사전 점검입니다.
단일 호스트:
nuclei -t CVE-2026-33017.yaml -u https://target.example.com
목록에서 대량 스캔:
nuclei -t CVE-2026-33017.yaml -l targets.txt -rl 20 -c 10
디버그 출력 포함 (원시 요청/응답 확인):
nuclei -t CVE-2026-33017.yaml -u https://target.example.com -debug-req -debug-resp
템플릿을 실행하기 전에 로컬에서 검증:
nuclei -validate -t CVE-2026-33017.yaml
취약한 대상:
[CVE-2026-33017] [http] [critical] https://target.example.com [vulnerable-flow-not-found] ["1.8.2","base"]
패치된 대상 — 결과 없음 (422 응답이 어떤 규칙과도 일치하지 않음).
Langflow 호스트를 발견하기 위한 일반적인 검색 쿼리 (승인된 자산에 대해서만 사용):
http.title:"Langflow"app="Langflow"intitle:"Langflow" inurl:"/flows"AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H취약한 빌드에서 공개 핸들러는 대략 다음과 같이 선언됩니다:
@router.post("/build_public_tmp/{flow_id}/flow")
async def build_public_flow(flow_id: UUID, data: FlowDataRequest | None = None, ...):
...
await verify_public_flow_and_get_user(flow_id, ...)
...
# data.nodes[].data.node.template.code.value가 Component 빌드 경로에서
# exec()에 도달
data는 공격자가 제어합니다. 패치된 핸들러는 매개변수를 완전히 제거하고 data=None을 강제하므로, 패치된 빌드에서 data 본문 필드가 포함된 요청은 422로 거부됩니다.
/api/v1/build_public_tmp/를 차단하십시오.LANGFLOW_AUTO_LOGIN=False를 설정하고, 관리자 자격 증명을 구성하며, LANGFLOW_SECRET_KEY를 교체하십시오.access_type=PUBLIC인 flow가 공격자가 URL에서 대상으로 삼는 flow입니다.이 템플릿은 방어적 보안 및 승인된 테스트 전용으로 게시됩니다. 귀하가 소유하지 않거나 명시적인 서면 허가 없이 시스템에 대해 실행하는 것은 대부분의 관할권에서 불법이며 플랫폼 이용약관을 위반합니다.
이 템플릿을 사용함으로써 다음에 동의하는 것으로 간주됩니다:
lopseg — https://github.com/lopseg
풀 리퀘스트와 이슈를 환영합니다.
MIT
| 2 |
POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000000/flow (본문에 data 필드와 무해한 template.code.value 포함) |
| 아래 라우팅 결정에 사용됩니다. |
| 상태 | 본문 포함 내용 | 판정 |
|---|
404 | flow / public | 취약 — 핸들러가 data를 수락했으며, UUID가 가짜이므로 조회 실패 |
200 | job_id / build / task | 취약 — 핸들러가 data를 수락하고 빌드 경로 진입 |
5xx | exec / Component / traceback | 취약 — 핸들러가 실패 전 exec 코드 경로에 도달 |
422 | Field required / extra / data | 패치됨 — 핸들러 시그니처가 더 이상 data를 수락하지 않음 |