COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
Langflow AI 파이프라인의 CVSS 9.8 취약점이 어드바이저리 공개 20시간 만에 실제 공격에 악용됐다. 패치 적용 전 이미 뚫린 타임라인.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 3월 17일 20:05 UTC, AI 파이프라인 빌더 Langflow의 치명적 취약점 어드바이저리가 공개됐다. 20시간 뒤인 3월 18일 16:04 UTC, Sysdig의 위협 연구팀이 실제 익스플로잇을 포착했다. 공개 PoC조차 없는 상태에서 공격자들은 어드바이저리 설명만으로 독자적으로 공격 코드를 제작한 것이다.
CVSS 9.8로 평가된 이 취약점은 3월 25일 CISA KEV(Known Exploited Vulnerabilities) 목록에 등재됐고, 연방기관은 4월 8일까지 패치를 적용해야 한다.
Langflow는 AI 에이전트와 RAG(Retrieval-Augmented Generation) 파이프라인을 시각적으로 구축하는 오픈소스 플랫폼이다. GitHub 스타 145,000개 이상을 기록한 인기 프로젝트로, 2025년 IBM이 인수한 DataStax가 관리하고 있다. LLM 체인, 멀티에이전트 워크플로우, 챗봇 개발에 널리 사용된다.
이 취약점의 핵심은 Python의 exec() 함수다. 사용자가 제출한 플로우 정의에 포함된 Python 코드가 어떤 샌드박싱도 없이 서버에서 직접 실행된다.
문제의 엔드포인트는 POST /api/v1/build_public_tmp/{flow_id}/flow다. 공개 플로우 빌드용으로 설계된 이 엔드포인트는 인증이 필요 없다. 요청 본문의 data 파라미터에 악성 Python 코드가 포함된 노드 정의를 보내면, 서버는 이를 그대로 exec()에 전달한다.
여기서 주목할 점은 Langflow가 2025년에 거의 동일한 취약점을 이미 경험했다는 사실이다. (CVSS 9.8)은 /api/v1/validate/code 엔드포인트에서 같은 exec() 문제가 발견되어, 인증을 추가하는 방식으로 패치됐다. 그러나 exec() 자체는 제거되지 않았다.
이 노린 공개 빌드 엔드포인트는 설계상 인증을 추가할 수 없었다. 인증된 빌드 엔드포인트(138행)와 공개 빌드 엔드포인트(580행)가 동일한 data 파라미터를 받아 동일한 파이프라인에 넘기는 구조였기 때문이다. 접근 제어를 패치했지만, 위험한 패턴 자체는 그대로 남아 있었다.
| 시간 | 이벤트 |
|---|---|
| 3월 17일 20:05 UTC | 어드바이저리 + Langflow 1.9.0 패치 동시 공개 |
| 3월 18일 16:04 UTC | 최초 익스플로잇 관측 (공개 후 약 20시간) |
| 3월 18일 20:55 UTC | 최초 자격증명 탈취 성공 (공개 후 약 25시간) |
| 3월 25일 | CISA KEV 목록 등재 |
| 4월 8일 | 연방기관 패치 마감일 |
Sysdig가 관측한 공격은 3단계로 진행됐다.
6개 IP에서 Nuclei 기반 스캐너가 가동됐다. id 명령어로 서버 권한을 확인하는 단순 테스트부터 시작했다. 공개 PoC가 없었음에도 어드바이저리의 엔드포인트 설명만으로 공격 코드를 제작한 것이다.
디렉터리 열거와 시스템 핑거프린팅이 이어졌다. curl을 통한 2단계 드로퍼 페이로드가 외부 C2 서버(143.110.183.86:8080)로 결과를 전송했다.
환경변수 덤프, .env 파일 탈취가 본격적으로 시작됐다. 공격자가 노린 것은 명확했다. OpenAI와 Anthropic의 LLM API 키, AWS 클라우드 토큰, PostgreSQL과 벡터 데이터베이스의 연결 문자열이었다. AI 파이프라인 서버에는 이런 고가치 자격증명이 집중되어 있다.
Langflow 사례가 보여주는 교훈은 분명하다. AI 파이프라인 서버는 다수의 외부 서비스 API 키를 한 곳에 보관하는 자격증명 집중 지점이다. 하나의 취약점으로 OpenAI, Anthropic, AWS, 데이터베이스 접근 권한을 동시에 탈취할 수 있다.
패치는 공개 빌드 엔드포인트에서 data 파라미터 자체를 제거하는 방식으로 이루어졌다. start_flow_build에 data=None을 하드코딩하여 공개 플로우는 데이터베이스에 저장된 정의만 사용하도록 변경한 것이다.
Langflow를 운영 중이라면 즉시 1.9.0 이상으로 업그레이드하고, 환경변수에 저장된 모든 API 키를 로테이션해야 한다. 그리고 근본적으로 — AI 파이프라인 서버를 공용 인터넷에 노출하지 않는 것이 가장 확실한 방어다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.