50개 이상의 MCP 서버를 감사한 결과, CVSS 9.8 취약점을 발견했습니다
요약
본 기사는 Model Context Protocol(MCP) 생태계의 보안 취약점을 심층 분석한 결과입니다. 9,695개 서버 중 다수가 안전하지 않은 패턴을 보였으며, 특히 AWS 자격 증명 노출 등 CVSS 9.8 수준의 심각한 취약점이 발견되었습니다. 따라서 단순 정적 분석을 넘어선 런타임 검증(runtime verification) 계층 구축이 필수적임을 강조합니다.
핵심 포인트
- MCP 생태계는 시스템적인 보안 실패를 보이고 있습니다.
- AWS 자격 증명 노출 등 CVSS 9.8 수준의 심각한 취약점이 발견되었습니다.
- 취약점은 코드 패턴보다 데이터 흐름과 런타임에서 발생합니다.
- Landlock, bubblewrap 등을 활용한 OS 레벨 샌드박싱이 필수적입니다.
Model Context Protocol 생태계는 거의 10,000개의 서버로 성장했습니다. Trend Micro AI Security Report (2025)에 따르면 분석된 9,695개 MCP 서버 중 5,832개가 안전하지 않은 패턴을 보였습니다. 이것은 반올림 오차가 아닙니다. 이는 시스템적인 실패입니다.
지난 한 달 동안 저희 팀은 오픈 소스 MCP 서버에 대한 체계적인 보안 감사를 수행해 왔습니다. 6차례에 걸쳐 50개 이상의 저장소(repository)를 스캔하며 총 53개의 고유한 취약점을 기록했습니다. 일부는 예상된 것이었습니다. 잘못 구성된 CORS 헤더, 누락된 인증 등이 그것입니다. 하지만 다른 것들은 훨씬 더 심각했습니다.
이 글에서는 저희가 발견한 내용, 안전한 서버와 위험한 서버를 구분하는 패턴, 그리고 왜 이 생태계가 정적 분석(static analysis)에서 런타임 검증(runtime verification)으로 전환해야 한다고 생각하는지에 대해 공유하고자 합니다.
관점을 바꾼 두 가지 P0 사례
사례 1: bash -c의 자비에 맡겨진 AWS 자격 증명
저희가 발견한 첫 번째 심각한 취약점은 AWS CLI 래퍼 MCP 서버에서 발생했습니다. 이 서버는 LLM(대규모 언어 모델)으로부터 자연어 명령을 수락한 다음, `subprocess.run([
공격 체인(attack chain): 피해자가 악성 웹사이트를 방문 → MCP 서버로 크로스 오리진 요청(cross-origin request) 발생 → DNS 리바인딩이 보호 장치를 우회함 → 공격자가 Azure Cloud Shell에 명령을 전송 → 전체 Azure 구독 접근 권한 획득.
웹페이지 방문 외 사용자 상호작용 불필요합니다. CVSS 9.8 수준입니다.
스펙트럼: 위험한 것부터 잘 구축된 것까지
Tier P0: 완전 노출 (2개 서버)
- 검증 없이 직접적인 subprocess 실행
- 환경 변수를 통해 접근 가능한 클라우드 자격 증명(credentials)
- 샌드박싱(sandboxing) 없음, 허용 목록(allowlisting) 없음
Tier P1: 로컬 명령 실행 (2개 서버)
- 최소한의 제어만 있는 셸 명령어 실행
- 명령어 허용 목록 지정이나 인자 검증 부재
Tier P2: 불완전한 방어 (8개 이상 서버)
- 블랙리스트 기반 필터링
- 누락된 예외 케이스: 인코딩 우회, 경로 순회(path traversal)
Tier Safe: 전문적인 구현
가장 좋은 예시: cloud-mcp-server (★185, DoIT International 제작).
- Landlock / bubblewrap / macOS Seatbelt를 통한 OS 레벨 샌드박싱(sandboxing)
- 리스트 기반 subprocess 실행 — 절대
shell=True사용 안 함 - 명시적인 경로 허용 목록(path allowlists)
- 자격 증명 격리(Credential isolation)
- 실패 시 폐쇄 기본값(Fail-closed defaults)
정적 스캐닝이 충분하지 않은 이유
- 프롬프트 주입 → 명령 주입: 취약점은 코드 패턴이 아닌 _데이터 흐름_에 있습니다.
- 환경 변수 상속: 정적 분석은 자격 증명 흐름을 추적하지 못합니다.
- CORS + DNS 리바인딩 체인: 취약점은 런타임(runtime)에서만 나타납니다.
- LLM의 예측 불가능성: 정적 분석은 결정론적 입력(deterministic inputs)을 가정합니다.
우리가 구축한 것: 런타임 검증
이러한 취약점을 발견한 후, 저희는 MCP 런타임 검증 계층인 Correctover를 구축했습니다.
주요 기능:
주요 기능:
- 매개변수 유효성 검사 (Parameter validation): 실행 전에 잘못된 도구 호출 매개변수를 감지합니다.
- 경로 순회 탐지 (Path traversal detection):
../../etc/passwd스타일의 공격을 차단합니다. - 자격 증명 누출 방지 (Credential leak prevention): 도구가 비밀 정보를 유출하려고 할 때 이를 탐지합니다.
- 기본적으로 실패 폐쇄 (Fail-closed by default): 의심스러울 때는 요청을 거부합니다.
저희는 이 기능을 53개의 취약점 데이터셋으로 검증했습니다.
MCP 서버 개발자가 오늘 해야 할 일
즉각적인 조치 (Critical)
- 셸 실행 경로 감사: 절대
shell=True를 사용하지 마십시오. - 클라우드 자격 증명을 서브프로세스 환경과 격리하십시오.
- CORS 수정: 운영 환경에서 절대
Access-Control-Allow-Origin: *를 사용하지 마십시오.
단기적인 조치 (Important)
- 명령어 허용 목록 구현 (fail-closed 원칙 적용)
- DNS 리바인딩 보호 추가
- OS 수준의 샌드박싱 사용
장기적인 조치 (Strategic)
- 심층 방어를 위한 런타임 검증 추가
- 보안 표준에 참여하기
숫자는 거짓말을 하지 않습니다
| 카테고리 | 개수 |
|---|---|
| 스캔된 저장소 | 50개 이상 |
| ... | |
| 이 생태계는 보안 태세를 성숙시켜야 합니다. 정적 분석은 시작일 뿐입니다. 우리가 나아가야 할 곳은 런타임 검증입니다. |
이 연구는 Correctover MCP 보안 감사 이니셔티브의 일환으로 수행되었습니다. 취약점들은 책임 있는 공개(responsible disclosure)를 통해 보고되었습니다.
- NPM: correctover
- GitHub: Correctover
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기