CVSS: 9.3
대상 서비스
Langflow
- LLM을 기반으로 한 애플리케이션을 노코드/로우코드 방식으로 설계, 실행할 수 있는 비주얼 워크플로우 도구
- 깃허브 스타 145,000
- 기업에서 AI 워크플로우 자동화 도구로 많이 사용.
대상 버전
- 영향 받는 버전 : Langflow 1.9.0 이전 모든 버전
- 패치 버전 : Langflow 1.9.0
취약점 개요
취약점의 종류
- RCE
- 비인증 원격 코드 실행
- 인증 누락
- 공개 플로우 빌드 엔드포인트(/api/v1/build_public_tmp/{flow_id}/flow)가 인증 없이 접근 가능함.
- 코드 인젝션
- 공격자가 제공한 플로우 정의 데이터 내에 임의의 Python 코드를 삽입할 수 있음.
- Eval 인젝션
- 삽입된 코드라 exec() 함수에 직접 전달되어 샌드박싱 없이 실행되는 구조임.
발생한 원인
- 공개 플로우 기능에서 설계적 결함이 있었음.
- Langflow의 build_public_tmp 엔드포인트는 공개 플로우를 빌드하기 위해 의도적으로 인증을 요구하지 않도록 설계되어 있음. 근데 이 엔드포인트가 선택적 data 파라미터를 받아들이는데 이 파라미터가 제공되면 데이터베이스에 저장된 플로우 데이터 대신 공격자가 제공한 플로우 데이터를 사용함.
- 이전에 CVE-2025-3248에서 /api/v1/validate/code 엔드포인트에 인증을 추가하는 패치가 진행되었으나 동일한 exec() 호출 체인이 build_public_tmp 에도 존재해서 발생하였다.
- build_public_tmp 는 공개 플로우를 위한 엔드포인트기에 단순히 인증을 추가하는 것으로 해결이 불가능하다. 인증을 추가하면 공개 플로우 기능이 동작하지 않게 된다.
취약점 원리
공격 흐름
- 공격자 → POST /api/v1/build_public_tmp/{flow_id}/flow
- 요청 본문에 data 파라미터 포함
- 노트 정의 내에 임의의 Python 코드 삽입
- 서버 측 처리
- data 파라미터가 존재하므로 DB의 신뢰된 플로우 데이터를 무시함
- 공격자가 제공한 플로우 데이터를 그대로 사용함
- exec() 호출
- 서버 프로세스 권한으로 임의 코드 실행
공격자가 인증 없이 접근을 시작하는 시점에서 /api/v1/build_public_tmp/{flow_id}/flow 엔드포인트가 공개 플로우를 빌드하기 위한 것이라서 인증이 필요없음. 그래서 공격자는 아무런 자격 증명 없이 이 엔드포인트에 HTTP POST 요청을 보내는게 가능함
exec() 함수를 호출할 때 공격자가 데이터 내의 노트 정의에 임의의 코드를 삽입하면 검증이나 격리 없이 서버 프로세스 권한으로 실행하게 되어 RCE가 발생함.
이후 패치 사항
Langflow 1.9.0
공개 엔드포인트에서 data 파라미터를 완전히 제거함.(공개 플로우는 서버 측 데이터베이스에 저장된 신뢰된 플로우 데이터만 실행 가능하도록)
- Langflow 1.9.0에서 해당 취약점 외에도 관련 취약점(파일 업로드 경로 탐색을 통한 RCE)인 CVE-2026-33309 도 함께 패치했음.
'공부한 것' 카테고리의 다른 글
| CVE-2026-3672 (0) | 2026.05.12 |
|---|---|
| CVE-2026-21236 (0) | 2026.05.10 |
| 블록 암호 - AES (0) | 2026.01.23 |
| 암호학 - 고전 암호 공격 (0) | 2026.01.23 |
| 암호학 - 고전 암호 (0) | 2026.01.23 |