[Paper] Unsafe by Flow: MCP 생태계에서 양방향 데이터 흐름 위험 탐구
발행: (2026년 5월 9일 AM 12:03 GMT+9)
9 분 소요
원문: arXiv
Source: arXiv - 2605.07836v1
개요
Model Context Protocols (MCPs)은 대형 언어 모델(LLM) 에이전트가 외부 도구를 호출할 수 있게 하는 접착제와 같습니다—예를 들어 “웹 검색”, “셸 명령 실행”, “데이터베이스 쿼리” 등을 생각해 보세요. 이러한 기능은 강력한 워크플로를 가능하게 하지만, 동시에 숨겨진 공격 표면을 드러냅니다: 데이터가 악의적인 방식으로 도구 into 로 흐를 수 있고, 결과가 도구 out 로 흐르면서 LLM이나 호스트 시스템에 안전하지 않게 전달될 수 있습니다. 논문 Unsafe by Flow는 실제 MCP 서버 전반에 걸쳐 이러한 양방향 데이터 흐름 버그를 자동으로 발견하는 정적 분석 프레임워크 MCP‑BiFlow를 소개합니다.
핵심 기여
- Bidirectional taint model은 MCP 핸들러를 통해 request‑side (입력)와 response‑side (출력) 데이터 전파를 동시에 추적합니다.
- MCP‑aware entry‑point recovery는 MCP 서버에서 사용되는 다양한 등록 및 디스패치 패턴(예: 데코레이터, 동적 라우팅 테이블)을 찾아냅니다.
- Interprocedural propagation engine은 “tool‑output is exposed to the LLM”(도구 출력이 LLM에 노출됨)과 “internal log is private”(내부 로그는 비공개)와 같은 MCP‑specific semantics를 존중합니다.
- Comprehensive evaluation은 선별된 벤치마크(32개의 알려진 MCP 버그)에서 93.8 %의 재현율을 달성했으며, 15 k 이상 오픈소스 MCP 서버에 대한 대규모 스캔을 통해 118개의 확인된 취약점 경로를 발견했습니다.
- Open‑source prototype(MCP‑BiFlow)와 커뮤니티를 위한 MCP 취약점 사례 데이터셋을 제공했습니다.
방법론
- 진입점 추출 – 분석기는 먼저 저장소에서 MCP 등록 코드(예:
register_tool,@mcp_handler)를 스캔합니다. 개발자는 정적 테이블, 런타임 리플렉션, 플러그인 로딩 등 다양한 방식으로 핸들러를 등록할 수 있기 때문에, MCP‑BiFlow는 모든 가능한 진입점을 포착하는 제어 흐름 그래프를 구축합니다. - 프로토콜‑특정 오염(taint) 의미론 – 저자들은 두 가지 오염 소스를 정의합니다:
- 요청자‑제어 입력 (JSON 페이로드, 명령 문자열).
- 민감한 내부 데이터 (환경 변수, 자격 증명).
그리고 두 가지 싱크를 정의합니다: - 민감한 연산 (파일 쓰기, OS 실행).
- MCP‑가시 출력 (LLM에 반환되는 응답).
분석은 각 변수에 방향(in/out) 태그를 부착하고, 할당, 함수 호출, 데이터 구조 조작을 통해 태그를 전파합니다.
- 절차간 데이터 흐름 분석 – 워크리스트 알고리즘을 사용하여 도구는 함수 경계를 넘어 오염을 추적하고, 일반적인 Python 관용구(데코레이터, async/await, 동적 임포트)를 처리합니다. 또한 툴‑스코프 실행 경로를 모델링합니다: 요청이 디스패처 → 핸들러 → 내부 라이브러리 → 응답 생성 순으로 흐릅니다.
- 후보 클러스터링 – 출력량을 관리하기 위해, 유사한 오염 경로를 공유된 소스‑싱크 패턴을 기준으로 “클러스터”로 병합한 뒤, 인간 검토자가 검증하도록 제시합니다.
Results & Findings
| Evaluation | Metric | Value |
|---|---|---|
| Benchmark (32 known bugs) | Recall | 30 / 32 (93.8 %) |
| Benchmark | Precision (manual check) | ~85 % (few false positives) |
| Real‑world scan (15 452 repos) | Candidate clusters | 549 (after overlap compression) |
| Manual validation | Confirmed vulnerable paths | 118 (in 87 distinct servers) |
| Comparison tools (CodeQL, Semgrep, Snyk Code, MCPScan) | Best recall | ≤ 55 % (none detected the bidirectional flows) |
What it means:
- 기존 정적 분석기는 데이터 흐름의 한 방향만을 보기 때문에 MCP‑관련 버그의 대부분을 놓칩니다.
- 안전하지 않은 전파는 일반적입니다: 스캔된 MCP 서버의 약 0.7 %에 최소 하나의 악용 가능한 양방향 흐름이 포함되어 있습니다.
- 양방향 모델은 필수적입니다; 많은 버그는 요청‑측 오염이 민감한 연산에 도달하고, 그 결과 출력이 이후 LLM에 다시 입력될 때만 나타납니다.
실용적 함의
- LLM‑tool 개발자를 위해: MCP‑BiFlow(또는 유사한 양방향 오염 검사)를 CI 파이프라인에 통합하여 배포 전에 안전하지 않은 인수 처리와 과도하게 관대한 응답 직렬화를 포착합니다.
- 플랫폼 운영자를 위해 (예: LangChain, AutoGPT 생태계): 프로토콜 인식 진입점 탐지를 채택하여 서드파티 툴 플러그인을 자동으로 감사하고 공급망 위험을 감소시킵니다.
- 보안 팀을 위해: 클러스터링 결과는 각 MCP 서버의 간결한 “공격 표면 지도”를 제공하므로, 대규모 코드베이스에서도 수동 트라이지를 실현 가능하게 합니다.
- API 설계자를 위해: 논문은 정적 도구가 활용할 수 있는 명시적 데이터 흐름 계약(예: 필드를 “private”와 “exposed”로 표시)의 필요성을 강조하여 더 안전한 MCP 사양을 장려합니다.
- 성능 영향: MCP‑BiFlow는 정적 분석 단계로 실행되며, 저자들은 일반적인 5 k‑라인 Python 프로젝트에 대해 분석 시간이 2 분 이하라고 보고하여 야간 빌드에 실용적임을 입증했습니다.
제한 사항 및 향후 작업
- 언어 범위: 프로토타입은 Python MCP 서버를 대상으로 합니다; 다른 언어(Node.js, Go)로 확장하려면 추가 진입점 히어리스트가 필요합니다.
- 동적 디스패치: 매우 동적인 등록(예: 사용자 제공 코드 문자열로 핸들러를 구성) 은 정적 복구를 회피할 수 있어 경로를 놓칠 수 있습니다.
- 오탐: 정밀도는 높지만, 일부 표시된 경로는 실제 악용이 아닌 정상 데이터(예: 사용자 입력 로그)를 포함합니다. 향후 작업에서는 런타임 프로파일링을 도입해 이를 필터링할 수 있습니다.
- 런타임 의미론: 이 분석은 실제 LLM 추론을 모델링하지 않으며, 악의적인 모델이 정상 흐름을 악용으로 확대할 수 있습니다. 정적 오염 분석과 샌드박스 실행 추적을 결합하는 것이 유망한 방향입니다.
저자
- Xinyi Hou
- Yanjie Zhao
- Haoyu Wang
논문 정보
- arXiv ID: 2605.07836v1
- Categories: cs.SE
- Published: 2026년 5월 8일
- PDF: Download PDF