30 CVEs와 계속 증가: 아무도 말하지 않는 MCP 보안 위기

발행: (2026년 3월 1일 오후 02:31 GMT+9)
12 분 소요
원문: Dev.to

Source: Dev.to

위에 제공된 Source 라인만 보이며 번역할 본문 내용이 포함되어 있지 않습니다. 번역을 원하는 전체 텍스트를 알려주시면 한국어로 번역해 드리겠습니다.

개요

MCPModel Context Protocol – 은 AI 에이전트가 외부 서비스와 통신할 수 있게 합니다.
Anthropic가 이를 출시했으며, 모든 주요 AI 연구소가 채택했습니다. 오늘날 수천 개의 MCP 서버가 에이전트를 데이터베이스, API, 금융 플랫폼 및 클라우드 인프라와 연결하고 있습니다.

⚠️ 30 CVEs 가 이미 MCP에 대해 보고되었으며, 그 속도는 가속화되고 있습니다.

주요 지표

지표
전체 MCP CVE30
인증이 없는 서버36 %
공격 표면 레이어3
최신 CVE 이후1 일

최근 취약점 – CVE‑2026‑27896

  • Affected component: Official MCP Go SDK
  • Root cause: JSON 파서가 필드 이름을 대소문자를 구분하지 않게 처리합니다.
  • Impact:
    • 공격자는 "method" 대신 "Method"(또는 "params" 대신 "PARAMS")와 같은 응답을 보낼 수 있습니다.
    • SDK는 이를 조용히 받아들여 정확한 필드 이름을 확인하는 검증을 우회합니다.
    • 예시: "method": "tools/call"만 허용하도록 방화벽이 설정돼 있어도 "Method": "tools/call"은 통과됩니다.

Who is affected?
공식 Go SDK를 사용한 모든 Go 기반 MCP 구현 – 서버 및 클라이언트 모두.

Mitigation:
대소문자를 구분하는 JSON 파싱을 적용한 패치된 SDK 버전으로 업데이트하십시오.

MCP 보안이 독특하게 위험한 이유

공격 표면은 세 개의 구별되는 계층으로 구성됩니다. 어느 한 계층에 결함이 있으면 전체 체인이 손상될 수 있습니다.

1️⃣ MCP 서버

  • 예시: QuickBooks, Stripe, 데이터베이스 커넥터, 파일‑시스템 브리지.
  • 스캔된 MCP 서버의 **36 %**가 인증 없이 연결을 허용합니다.

일반적인 공격 벡터

  • 인증되지 않은 접근
  • 불충분한 권한 부여(어떤 클라이언트든 모든 도구를 호출 가능)
  • 입력 검증 누락
  • 도구 매개변수를 통한 SSRF
  • 도구 응답을 통한 데이터 유출

2️⃣ 프로토콜 구현 라이브러리

  • MCP 메시지를 파싱하는 공식 TypeScript, Python, Go SDK.
  • 여기에는 CVE‑2026‑27896을 비롯해 다른 파싱 버그, 직렬화 불일치, 타입 혼동 문제가 존재합니다.

일반적인 공격 벡터

  • 대소문자 구분 없는 파싱 우회(CVE‑2026‑27896)
  • 잘못된 메시지 처리
  • SDK 구현 간 타입 혼동
  • 신뢰할 수 없는 데이터 역직렬화
  • 프로토콜 버전 불일치

3️⃣ MCP 클라이언트 런타임

  • MCP 클라이언트를 실행하는 머신(노트북, 서버, AI‑에이전트 런타임).
  • 도구 호출은 호스트 프로세스의 권한으로 실행됩니다.

일반적인 공격 벡터

  • 제한 없는 도구 접근(허용 목록 없음)
  • 프롬프트 인젝션을 통한 쓰기 작업
  • 도구 응답을 통한 민감 데이터 유출
  • 연결된 MCP 서버를 통한 횡방향 이동
  • 도구 설정에서 자격 증명 탈취

갭: 대부분의 MCP 구현은 이 계층에서 제어가 전혀 없습니다 – 에이전트가 무엇을 호출할지 결정하고, 이를 검증하는 것이 없습니다.

CVE 타임라인

기간CVE주요 하이라이트
2025 Q1‑Q2~5초기 발견 – 인증, SSRF 기본
2025 Q3‑Q4~10SDK 수준 버그 등장, 구현 간 이슈
2026 Q1 (현재까지)~15가속화 – CVE‑2026‑27896 (Go SDK 우회), 서버 인증 실패
총계303계층 전체에 걸쳐

전체 MCP CVE의 절반이 지난 3개월 동안 발표되었습니다.

실제 영향

  • **> 33 %**의 MCP 서버는 클라이언트 신원을 확인하지 않고 모든 연결을 허용합니다.
  • 결과:
    1. Any AI agent(모든 AI 에이전트)이 엔드포인트를 발견하면 연결할 수 있습니다.
    2. All tool calls(파괴적인 쓰기 작업을 포함한 모든 도구 호출)가 허용됩니다.
    3. No audit trail(누가 무엇을 호출했는지에 대한 감사 로그가 없습니다).
    4. 하나의 에이전트에서 발생한 Prompt‑injection이 인증되지 않은 MCP 서버로 전이될 수 있습니다.

재무용 MCP 서버(QuickBooks, Stripe, Xero)의 경우 이는 재앙과도 같습니다 – 손상된 에이전트가 인증되지 않은 서버에서 직접 재무 작업을 호출할 수 있습니다.

방어 솔루션 – ClawMoat McpFirewall

McpFirewallLayer 3 (AI 에이전트와 MCP 서버 사이) 에 위치합니다. 서버에 도달하기 전에 모든 도구 호출을 가로채며, MCP 자체에서 제공하지 않는 보안 정책을 적용합니다.

수행 기능

  • 쓰기 작업29개의 패턴(예: create_, add_, update_, delete_, transfer_, pay_ 등)과 매칭하여 차단합니다.
  • 읽기 전용 모드에서도 MCP 응답에서 민감한 필드(주민등록번호, 은행 계좌 번호, API 키 등)를 삭제합니다.

예시 (Node.js)

const { McpFirewall } = require('clawmoat/finance/mcp-firewall');

const firewall = new McpFirewall({
  mode: 'read-only',
  onBlock: (event) => {
    console.log(
      `Blocked ${event.tool} on ${event.server}: ${event.reason}`
    );
  }
});

// Agent tries to create an invoice via MCP
const result = firewall.intercept({
  tool: 'create_invoice',
  args: { amount: 50000, customer: 'Acme Corp' },
  server: 'quickbooks-mcp'
});

// result.blocked === true
// result.reason === "Write operation 'create_invoice' blocked in read-only mode"

쓰기 패턴 목록 (29개 항목)

create_, add_, update_, edit_, modify_, delete_, remove_,
send_, post_, submit_, approve_, void_, cancel_, refund_,
transfer_, pay_, charge_, issue_, record_, close_, batch_,
import_, set_, assign_, link_, unlink_, archive_, restore_, merge_

방화벽 구성 개요

const firewall = new McpFirewall({
  mode: 'read-only',
  redactFields: ['ssn', 'tax_id', 'bank_account', 'routing_number'],
  redactResponses: true
});

예시 – MCP 응답 마스크 처리 전후

{ customer: "Jane", ssn: "123-45-6789", balance: 5000 }{ customer: "Jane", ssn: "***-**-****", balance: 5000 }

도구 허용 목록

에이전트가 어떤 도구가 안전한지 스스로 결정하게 하지 마세요. 명시적인 허용 목록을 정의하세요:

const firewall = new McpFirewall({
  mode: 'read-only',
  allowedTools: ['get_invoices', 'get_profit_loss', 'get_balance_sheet'],
  blockedTools: ['delete_company', 'export_all_data']
});

속도 제한

빠른 연속 툴 호출을 통한 데이터 유출 방지:

const firewall = new McpFirewall({
  mode: 'read-only',
  rateLimit: 10,               // max 10 calls per tool per minute
  allowedTools: ['get_transactions']
});

인식된 금융 MCP 서버

McpFirewall는 15개의 인기 있는 금융 MCP 서버에 대한 패턴 인식을 제공합니다:

  • QuickBooks
  • Xero
  • FreshBooks
  • Stripe
  • Plaid
  • Square
  • PayPal
  • Braintree
  • Coinbase
  • Mercury
  • Wise
  • Wave
  • Gusto
  • Rippling
  • Bill.com

공격 시나리오 (Go SDK 우회)

  1. 공격자 페이로드 – 대소문자가 혼합된 필드 이름:

    {"Method": "tools/call", "Params": {"name": "transfer_funds"}}
  2. 통과되는 이유 – 검증은 "method"(소문자)만 확인하므로 검증에 실패한다.

  3. Go SDK 동작encoding/json은 대소문자를 구분하지 않으므로 SDK가 여전히 요청을 파싱한다.

  4. 결과 – 도구 호출이 MCP 서버가 부여한 권한으로 실행된다.

  5. 완화 방안 – McpFirewall은 SDK 파싱 후에 동작한다; 해결된 도구 이름과 인수를 검사하여 메시지가 어떻게 파싱되었든 관계없이 무단 호출을 차단한다.

즉각적인 조치

  • MCP 서버 감사 – 인증이 필요하도록 확인합니다.
  • SDK 업데이트 – 특히 Go SDK (CVE‑2026‑27896 참조).
  • 방화벽 레이어 추가 – 에이전트가 MCP 도구를 무제한으로 호출하지 못하도록 합니다.
  • MCP 연결 인벤토리 – 에이전트가 접근할 수 있는 서버를 파악합니다.
  • 보안 스캔 실행 – 빠른 평가를 위해 ClawMoat의 무료 스캐너를 사용합니다.

왜 보안이 중요한가

MCP는 AI 에이전트에게 HTTP가 웹 브라우저에게 그랬던 것처럼, 서비스에 연결하기 위한 범용 프로토콜입니다.
하지만 보안 모델은 사후에 고려되었습니다:

  • Authentication – 선택 사항.
  • Authorization – “구현에 맡김”.
  • Encryption – 필수 아님.
  • Tool‑level access control – 표준 없음.

30 CVEs in ~15 months 은 단순한 숫자가 아니라 패턴입니다. 이 프로토콜은 보안이 아니라 기능성을 위해 설계되었습니다.

McpFirewall 기능

  • 29 write patterns 탐지
  • Field‑level redaction (필드 수준 레드액션)
  • Tool allowlisting (툴 허용 목록)
  • Rate limiting (속도 제한)
  • Zero dependencies (의존성 없음)
  • 277 automated tests (277 자동 테스트)

이것은 host layer를 보호하고 서버 및 SDK 수준 제어를 보완합니다.

시작하기

npm install clawmoat
  • GitHub에 별표 달기
  • 🔍 무료 보안 스캐너

McpFirewall은 오픈‑소스(MIT 라이선스)이며 clawmoat/finance/mcp-firewall에 있습니다.

시간이 흐르고 있습니다. 지금 바로 MCP 생태계를 강화하세요.

0 조회
Back to Blog

관련 글

더 보기 »

일이 정신 건강 위험이 될 때

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...