네 번째 레이어: MCP 공격이 IDE로 이동할 때
Source: Dev.to
번역을 진행하려면 번역하고자 하는 전체 텍스트(코드 블록 및 URL을 제외한 본문)를 제공해 주세요. 텍스트를 주시면 요청하신 대로 한국어로 번역해 드리겠습니다.
개요
3주 전, 나는 MCP 공격 표면을 세 가지 계층—servers, developer tooling, host applications—으로 분석한 보고서를 발표했습니다. 그 당시 우리는 30 CVEs를 보유하고 있었습니다.
오늘, Knostic.ai가 CVE‑2026‑27180에 대한 연구를 발표했으며, 이는 네 번째 계층을 추가합니다—그리고 이것이 지금까지 중 가장 위험한 계층입니다.
Target
Cursor IDE – 수백만 개발자가 사용하는 AI‑기반 코드 편집기
Researcher: Dor Munis, Knostic.ai
Attack type:
MCP server → JavaScript injection → credential theft → full workstation compromise
이 공격은 코드 실행이나 사용자가 직접 도구를 호출할 필요가 없습니다. Cursor가 MCP 서버의 도구 목록을 로드하는 순간 바로 트리거됩니다.
공격 흐름
- 악성 MCP 서버가 설치됩니다(예: GitHub, Discord 또는 선별된 목록에서).
- Cursor가
tools/list를 호출해 사용 가능한 도구를 탐색할 때, 악성 서버는:- Cursor의 내부 확장 디렉터리에 훅을 겁니다.
- Cursor에 내장된 브라우저에
document.body.innerHTML = [attacker payload]를 삽입합니다.
- Cursor에서 열리는 모든 브라우저 탭은 주소 표시줄에 정상 URL이 그대로 표시된 채 공격자가 제어하는 콘텐츠를 보여줍니다.
- 개발자는 자신의 애플리케이션 로그인 페이지처럼 보이는 곳에 자격 증명을 입력합니다.
결과 체인:
MCP discovery → IDE modification → browser hijack → credential theft
도구가 실행될 필요는 없으며, 수동 핸드쉐이크만으로도 충분합니다.
왜 Cursor가 취약한가
- Cursor는 AI 기능이 내장된 VS Code 포크입니다.
- VS Code는 자체 확장 파일에 대해 무결성 검사를 수행하지만 Cursor는 수행하지 않습니다.
- 따라서 MCP 서버, 확장 프로그램 또는 파일 시스템 접근 권한이 있는 어떤 프로세스에 의해 Cursor 내부 코드가 수정되더라도 경고나 체크섬 실패 없이 조용히 이루어집니다.
Knostic 연구원들은 이 악용을 **“다른 eval 위에 eval”**이라고 설명합니다: 주입된 코드는 Cursor 브라우저 컨텍스트에서 실행되며, 이 컨텍스트 자체가 사용자의 개발 상태에 대한 완전한 접근 권한을 가진 평가 환경입니다.
“MCP 서버는 보안 측면에서 VS Code 확장과 정확히 동일하게 취급되어야 합니다.” – Dor Munis to CSO
Source: …
기존 프레임워크 (3계층)
| 계층 | 예시 | CVE |
|---|---|---|
| L1: MCP 서버 | exec() 인젝션, eval() 우회, 경로 탐색 | 25 |
| L2: 개발자 도구 | MCP Watch, MCPJam Inspector, MCP Probe | 3 |
| L3: MCP 호스트 애플리케이션 | Dive 딥링크, Dive XSS/Mermaid | 2 |
새로운 네 번째 레이어 (L4)
| 레이어 | 설명 | CVEs |
|---|---|---|
| L4: MCP 클라이언트/IDE | Cursor 브라우저 인젝션 | 1 (계속 증가 중) |
L4가 L3와 다른 점은?
| 항목 | L3 – 호스트 애플리케이션 (예: Dive) | L4 – IDE 클라이언트 (예: Cursor) |
|---|---|---|
| 역할 | MCP 서버를 실행하고 연결을 관리합니다 (오케스트레이션 레이어). | 개발자들이 애플리케이션을 구축하는 곳이며, 높은 권한을 보유합니다 (파일 시스템 접근, 프로세스 실행, 개발자 자격 증명, 서명 키). |
| 신뢰 | 개발자들은 원격 서비스와 상호작용합니다. | 개발자들은 IDE를 자신의 도구로 신뢰하며, 제3자 서버가 아닙니다. |
| 침해 시 영향 | 단일 서비스 또는 워크플로에 영향을 미칠 수 있습니다. | 공격자에게 개발자가 사용하는 모든 서비스, 푸시하는 모든 저장소, 개발 중 저장된 모든 비밀에 대한 접근 권한을 부여합니다. |
tools/list 정찰 문제 — 재검토
- 이전에 AWS EC2 크롤러 동작을 분석했을 때, MCP 프로토콜 트래픽의 **70 %**가
initialize → tools/list → disconnect형태였으며 툴 호출은 전혀 없었습니다. 우리는 이를 공격자가 단순히 공격 표면을 매핑하고 있다고 해석했습니다. - CVE‑2026‑27180은 그와 반대임을 보여줍니다: 서버가
tools/list를 후크로 사용할 수 있다는 점—클라이언트만 정찰에 사용하는 것이 아니라는 점입니다.
핵심 인사이트:
tools/list는 수동적이 아닙니다. MCP 클라이언트가 이를 호출하면 신뢰 관계가 형성되고, 응답을 통해 클라이언트 환경을 변경할 수 있습니다.
이 표면은 다음과 같은 공격에도 활용됩니다:
- 툴‑포이징 공격 (LLM 동작을 조작하는 악성 툴 설명)
- 툴 메타데이터를 통한 프롬프트 인젝션
따라서 공격 표면은 툴 실행이 아니라 툴 탐색입니다.
전체 CVE 현황 (오늘 기준)
| 계층 | 하위 카테고리 | CVE 수 | 일반적인 문제 |
|---|---|---|---|
| L1 – 서버 | exec() class | 10 | 정제 없이 child_process.exec() |
eval() class | 3 | Python eval (범위 제한 포함/제외) | |
| Other server | 12 | 경로 탐색, 인증 우회, 자격 증명 노출, SSRF | |
| L2 – 개발자 도구 | — | 3 | 보안 스캐너, 디버거, 검사기 |
| L3 – 호스트 애플리케이션 | — | 3 | Dive (두 가지 벡터), eBay 환경 주입 |
| L4 – IDE/클라이언트 | — | 1 | Cursor 브라우저 주입 |
패턴: 생태계는 MCP 보안을 주로 서버‑사이드 문제로 간주합니다. L1을 제외한 모든 계층은 연구자들이 특별히 찾아낸 뒤에야 발견되었으며, 도구를 만든 개발자들에 의해 발견된 것이 아닙니다.
Immediate Actions
- Audit every MCP server you have installed.
cat ~/.cursor/mcp.json # or the equivalent path on your system - For each server:
- Locate its GitHub repository. → GitHub 저장소를 찾으세요.
- Review the source code. → 소스 코드를 검토하세요.
- Remember: MCP servers run with your IDE’s privileges—treat them like root access. → 기억하세요: MCP 서버는 IDE의 권한으로 실행됩니다—루트 접근처럼 다루세요.
- Disable YOLO/auto‑run mode.
- When agents execute actions without human confirmation, there is no checkpoint between tool discovery and arbitrary execution. → 에이전트가 인간 확인 없이 작업을 실행하면, 도구 탐색과 임의 실행 사이에 체크포인트가 없습니다.
- Avoid installing MCP servers from Discord, Reddit, or aggregator lists without code review.
- Even curated lists are imperfect; our dataset shows the official MCP registry has quality issues. → 심지어 선별된 목록도 완벽하지 않으며, 우리 데이터셋은 공식 MCP 레지스트리에 품질 문제가 있음을 보여줍니다.
- Be suspicious of MCP servers that request broad file‑system or network access unrelated to their stated purpose. → 명시된 목적과 무관하게 광범위한 파일 시스템 또는 네트워크 접근을 요청하는 MCP 서버를 의심하세요.
Recommended Mitigations for Cursor
| Mitigation | Rationale |
|---|---|
| 확장 파일 무결성 검사 (as VS Code does) | IDE 내부 코드에 대한 무단 수정 여부를 감지합니다. |
| 내장 브라우저 샌드박싱 (separate process, restricted permissions) | 삽입된 스크립트가 전체 개발 환경에 접근하는 것을 방지합니다. |
| MCP 서버 패키지에 대한 코드 서명 (similar to browser‑extension signing) | 출처를 보증하고 변조를 방지합니다. |
| 컨테이너 격리 (e.g., Docker) | 손상된 IDE의 영향을 제한하지만, CVE‑2026‑27180은 컨테이너가 시작되기 전에 발생합니다. |
Docker의 최근 “MCP Horror Stories” 시리즈는 방어 도구와 컨테이너화를 완화책으로 강조했습니다. 컨테이너 격리가 도움이 되지만, CVE‑2026‑27180은 호스트 환경에서 실행되므로 위의 IDE 수준 방어가 필수적입니다.
정리된 마크다운 종료.
rts.
공격 표면은 단일 방어 프레임워크가 다루기보다 더 빠르게 확대되고 있습니다. 컨테이너 격리는 서버를 보호하지만, 서버의 도구 목록을 로드하는 IDE는 보호하지 못합니다.
MCP에 대한 올바른 보안 모델은 **“서버를 컨테이너에서 실행한다”**가 아니라 “모든 MCP 서버를 개발 환경에서 실행되는 적대적인 바이너리로 간주한다” 입니다.
이는 기술적인 문제가 아니라 문화적인 문제입니다. 그리고 6주 동안 33개의 CVE가 발생한 것은 문화가 아직 따라잡지 못했음을 시사합니다.
Resources
- Live MCP 스캐너 및 CVE 레지스트리:
- 전체 33‑CVE 데이터셋:
mcp-disclosures.md - 이전 에세이: 두 개의 새로운 CVE — eval() bypass + Dive XSS