1. Exploit Request
인증 없는 /api/v1/validate/code POST, Python code field, 비정상 User-Agent, 외부 IP 접근을 탐지한다.
Operation Hanguel Flow는 공개 노출된 Langflow 기반 AI/RAG 워크플로 서버를 대상으로 한 침해 캠페인이다. HanguelFlow는 Langflow CVE-2025-3248을 악용해 비인증 코드 검증 API에 접근하고, 애플리케이션 런타임 권한에서 Python 실행, 시스템 정보 확인, 파일 경로 탐색, credential 단서 수집, 후속 도구 전송과 HTTP 기반 외부 통신으로 이어지는 활동을 수행했다. 피해 환경은 nginx reverse proxy, Langflow 애플리케이션, 내부 문서 서버, Custom IR Agent, ELK Stack으로 구성된 기업형 AI 서비스 운영 환경으로 모델링된다.
Langflow는 AI agent와 workflow를 시각적으로 구성하는 오픈소스 플랫폼이다.
CVE-2025-3248은 /api/v1/validate/code 엔드포인트에서 인증 검증이 빠진 상태로 사용자 입력 코드가 실행될 수 있는 취약점으로 정리된다.
공개 노출된 AI 도구 서버는 업무 자동화, RAG, LLM 연동 API key를 포함할 수 있어 공격자의 초기 접근 지점으로 악용될 수 있다.
| ID | Name | Description |
|---|---|---|
| G-SB-006 | HanguelFlow | Operation Hanguel Flow 활동과 연결된 가상 공격 그룹이다. |
| Domain | ID | Name | Use | Primary Logs |
|---|---|---|---|---|
| Enterprise | T1590 | Gather Victim Network Information | Operation Hanguel Flow 당시 HanguelFlow는 공개 서비스 배너, URL 구조, reverse proxy 응답을 바탕으로 Langflow 운영 인프라 정보를 수집했다. | HFL-001, HFW-001, HFW-002 |
| Enterprise | T1595 | Active Scanning | Operation Hanguel Flow 당시 HanguelFlow는 공개 노출된 Langflow 웹 서비스와 API 포트를 식별하기 위해 HTTP 스캔을 수행했다. | HFL-001, HFL-003, HFW-001 |
| Enterprise | T1190 | Exploit Public-Facing Application | Operation Hanguel Flow 당시 HanguelFlow는 Langflow CVE-2025-3248의 비인증 코드 검증 API를 악용하여 외부에서 원격 코드 실행을 시도했다. | HFL-001, HFL-003, HFE-002 |
| Enterprise | T1059.006 | Command and Scripting Interpreter: Python | Operation Hanguel Flow 당시 HanguelFlow는 취약한 코드 검증 경로에서 Python 코드 또는 Python을 통한 시스템 명령 호출을 실행했다. | HFA-001, HFL-002, HFL-003 |
| Enterprise | T1082 | System Information Discovery | Operation Hanguel Flow 당시 HanguelFlow는 애플리케이션 런타임 권한에서 계정, 호스트명, 커널, 컨테이너 실행 환경과 같은 시스템 정보를 확인했다. | HFA-001, HFL-002, HFL-003 |
| Enterprise | T1083 | File and Directory Discovery | Operation Hanguel Flow 당시 HanguelFlow는 Langflow 설정, 업로드 디렉터리, workspace, 내부 문서 서버 연결 정보, secret 파일 위치를 탐색했다. | HFA-001, HFL-002, HFL-003 |
| Enterprise | T1552.001 | Unsecured Credentials: Credentials In Files | Operation Hanguel Flow 당시 HanguelFlow는 .env, 설정 파일, API key 파일에서 LLM provider token, DB credential, 내부 문서 서버 접근 단서를 찾으려 했다. | HFA-002, HFL-003 |
| Enterprise | T1105 | Ingress Tool Transfer | Operation Hanguel Flow 당시 HanguelFlow는 curl, wget, Python HTTP client를 이용해 후속 스크립트, 스캐너, 웹쉘 또는 봇넷 페이로드를 내려받으려 했다. | HFA-004, HFL-003, HFW-002 |
| Enterprise | T1071.001 | Application Layer Protocol: Web Protocols | Operation Hanguel Flow 당시 HanguelFlow는 HTTP/HTTPS를 이용해 명령 전달, 페이로드 다운로드, 외부 서버 통신을 수행했다. | HFL-001, HFW-002 |
| ID | Name | Description | Observed Role |
|---|---|---|---|
| S-SB-006-01 | Langflow | AI workflow와 agentic AI flow를 구성하는 웹 기반 플랫폼이며, 공개 노출된 AI/RAG 업무 자동화 서버로 모델링된다. | Public-facing AI workflow application |
| S-SB-006-02 | nginx | Langflow 앞단 reverse proxy로 동작하며, 외부 HTTP 요청과 API 접근 로그를 관찰하는 주요 지점이다. | HTTP access and routing layer |
| S-SB-006-03 | Internal Docs Server | Langflow와 연계된 내부 문서/데이터 서버로, AI workflow에서 참조할 수 있는 내부 업무 자료를 보관하는 시스템이다. | Internal data source |
| S-SB-006-04 | Custom IR Agent | 웹 로그, 컨테이너 로그, 프로세스/파일 이벤트를 정규화해 보안 분석 플랫폼으로 전송하는 침해사고 대응 에이전트다. | Endpoint and container telemetry |
| S-SB-006-05 | ELK Stack | Elasticsearch, Logstash, Kibana 기반의 수집, 검색, 시각화, 상관분석 환경이다. | SIEM and investigation platform |
인증 없는 /api/v1/validate/code POST, Python code field, 비정상 User-Agent, 외부 IP 접근을 탐지한다.
Langflow 프로세스 하위에서 sh, bash, python, curl, wget 실행을 확인한다.
API exploit 이후 10분 안에 discovery 명령과 tool transfer가 이어지면 하나의 사고 후보로 묶는다.
event.dataset: "langflow"
and http.request.method: "POST"
and url.path: "/api/v1/validate/code"
sequence by host.name, source.ip with maxspan=10m
[any where event.action == "langflow_rce_attempt"]
[process where process.command_line regex ".*(whoami|id|uname|env|ls).*"]
[process where process.name in ("curl", "wget", "python", "bash")]
관찰된 환경은 인터넷에 노출된 Langflow 인스턴스, reverse proxy, 컨테이너 기반 실행 환경, 중앙 로그 분석 플랫폼으로 구성된다. 공격자는 외부 HTTP 요청을 통해 코드 검증 엔드포인트에 접근하고, 애플리케이션 런타임 권한으로 시스템 정보를 확인한 뒤 추가 도구 다운로드와 외부 통신을 시도할 수 있다.
Internet
-> Reverse Proxy
-> Langflow API
-> Container Runtime
-> Internal Data Sources
# Analyst KQL
campaign.id: "HGC-2025-001"
event.action: "langflow_rce_attempt"
langflow.classification: "attack"
rule.id: "langflow-rce-seq-001"