MCP TypeScript SDK CVE-2026-104850 취약점이란 무엇인가?

MCP TypeScript SDK에서 발생한 CVE-2026-104850 취약점의 핵심 원인은 OAuth 클라이언트가 자격증명을 전송할 권한 서버를 충분히 고정하지 않는 데 있습니다. 그래서 MCP 서버가 안내하는 임의의 서버로 인증 정보가 전송될 수 있습니다. 신뢰할 수 없는 MCP 서버에 연결하면 핵심 보안 자격증명이 공격자의 서버로 유출될 위험이 있습니다.

CVE-2026-104850 취약점 개요 및 원인

이번 취약점은 Model Context Protocol(MCP)을 사용하는 TypeScript 클라이언트의 OAuth 구현 방식에서 발견되었습니다. 공식적으로 CVE-2026-104850 및 GHSA-6qxp-vccf-f47h라는 관리 번호로 식별된 이 이슈는 클라이언트가 인증 대상을 정할 때 서버 측 제안을 무비판적으로 받아들이는 설계적 결함이 숨어 있습니다.

구체적인 발생 원인은 다음과 같습니다.

  1. 권한 서버 바인딩 부족: OAuth 클라이언트가 자격증명을 전송할 권한 서버(Authorization Server)를 엄격하게 고정하지 않았습니다.
  2. 검증 프로세스 부재: 취약한 버전의 SDK를 사용하는 클라이언트는 서버가 제공하는 동적 토큰 엔드포인트가 실제로 신뢰할 수 있는 ID 제공자(IdP)에 속하는지 검증하지 않는 구조적 갭(Validation Gap)이 존재합니다.
  3. 서버 주도적 대상 선택: 결국 MCP 서버가 클라이언트의 인증 대상을 사실상 선택하는 구조가 되어, 원래 가야 할 곳이 아닌 다른 서버로 자격증명이 전달됩니다.

잠재적 영향 및 유출 정보

이 취약점이 악용되면 클라이언트는 자신이 신뢰한다고 믿는 서버가 아니라 공격자가 제어하는 서버로 민감한 인증 정보를 전송하게 됩니다. OAuth 흐름의 핵심 단계에서 쓰이는 다음 정보들이 직접 유출될 수 있습니다.

  • client_secret: 클라이언트의 정체성을 증명하는 핵심 비밀키
  • auth_code: 일시적으로 발급되는 인증 코드
  • PKCE verifier: 코드 교환 보안을 위해 사용되는 PKCE 검증자

이 정보들이 공격자의 서버로 넘어가면 공격자는 탈취한 자격증명으로 사용자의 계정 권한을 획득하거나 서비스에 무단 접근할 수 있습니다. 심각한 보안 위협입니다. 다만 지금까지 조사된 범위에서는 공개된 개념 증명(PoC)이나 실제 악용 사례가 확인되지 않았습니다.

기술적 분석: 인증 신뢰 경계 문제

이 취약점의 핵심은 ‘신뢰 경계(Trust Boundary)’의 설정 오류에 있습니다. 정상적인 OAuth 구현에서는 클라이언트가 사전에 정의된 신뢰할 수 있는 발급자(Issuer)로 인증 서버를 확인합니다. 그러나 CVE-2026-104850이 영향을 미치는 환경에서는 expectedIssuer(기대 발급자) 설정이 생략되면 클라이언트가 서버의 안내를 그대로 따르게 됩니다.

특히 다음 환경에서는 위험도가 더 높아집니다.

  1. 설정 미비 환경: OAuth 클라이언트 기능을 사용하면서 expectedIssuer 설정을 생략한 채 배포한 경우.
  2. 신뢰되지 않은 연결: 충분히 검증되지 않은 외부 MCP 서버에 클라이언트를 연결해 운영하는 구성.

이 조건들이 겹치면 서버가 제공하는 동적 엔드포인트에 대한 검증 없이 보안 경계가 무너집니다.

대응 방안 및 패치 버전 가이드

MCP TypeScript SDK 개발팀은 이 문제를 해결하려고 expectedIssuer 생략을 폐기(deprecate)하고 SEP-2352의 issuer 검사를 일관되게 적용하는 수정 사항을 반영했습니다. 이 변경 사항은 Pull Request #2887에서 처리되었고 최신 릴리스 코드베이스에 포함되었습니다.

보안 운영자와 개발자라면 현재 사용 중인 SDK 버전을 확인해 아래 표의 안전 버전으로 즉시 업그레이드하는 것이 우선입니다.

구분 취약 버전 권장 패치 버전
@modelcontextprotocol/sdk 1.31.0 미만 / 2.2.0 미만 1.31.0 이상 또는 2.2.0 이상
주요 조치 사항 expectedIssuer 생략 폐기 및 SEP-2352 issuer 검사 적용

실무적인 대응 순서는 다음과 같습니다.

  1. 의존성 확인: 프로젝트 package.json의 @modelcontextprotocol/sdk 버전을 확인합니다.
  2. 버전 업데이트: SDK 버전을 1.31.0 또는 2.2.0 이상으로 업그레이드합니다.
  3. 설정 검토: OAuth 클라이언트 설정 시 expectedIssuer 값을 명시적으로 지정해 신뢰할 수 있는 권한 서버로 바인딩을 강제하는지 점검합니다.
  4. 서버 검증: 연결하는 MCP 서버가 신뢰할 수 있는 출처인지 확인하고, 검증되지 않은 외부 서버와의 연결은 최소화합니다.

댓글 남기기