CVE-2026-0621: MCP TypeScript SDK의 Event-Loop 서비스 거부 공격

발행: (2026년 1월 15일 오후 03:34 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

TL;DR

즉시 패치: @modelcontextprotocol/sdk v1.25.2 로 업그레이드하세요.

Identifier

CVE-2026-0621 (GHSA-8r9q-7v3j-jr4g)

Severity

8.7 – High

Affected Component

@modelcontextprotocol/sdk

Impact

  • Node.js 이벤트 루프 전체 차단 (서비스 거부)
  • 단일 스레드에서 CPU 100 % 포화
  • MCP 서버 완전 중단, 도구 호출 실패 및 심각한 SLO 위반 발생

Affected / Unaffected Versions

  • Affected: = 1.25.2

Deployments at Risk

TypeScript SDK를 사용하는 모든 MCP 서버(셀프‑호스팅 또는 클라우드).

Exploitation Prerequisites

  • 폭발형 변수(*, RFC 6570)를 사용하는 등록된 리소스 템플릿 최소 1개
  • 인증 없이 공개된 MCP 엔드포인트

Technical Details

Root Cause

UriTemplate 클래스의 partToRegExp() 함수에서 발생하는 치명적인 백트래킹.
배열 기반 URI 패턴을 확장할 때 SDK는 중첩된 수량자(예: 반복 안에 또 다른 반복)를 포함한 정규식을 생성합니다. 입력이 거의 일치하지만 마지막 문자에서 실패하면 V8 정규식 엔진이 모든 가능한 순열을 탐색하게 되어 지수 시간 복잡도가 발생합니다.

Vulnerable Pattern

리소스 템플릿에 사용되는 폭발형 변수, 예:

{/ids*}

Attacker‑Controlled Input

많은 구분자(쉼표) 뒤에 일치하지 않는 문자가 붙은 URI, 예:

/resource/1,2,3,4,5,6,7,8,9,10X

Runtime Behavior

  • 쉼표가 하나 추가될 때마다 실행 경로가 두 배가 됨(2^n 복잡도).
  • Node.js 단일 스레드 이벤트 루프가 완전히 차단됨.
  • 헬스 체크가 실패하고, 프로세스를 종료할 때까지 서버가 응답하지 않음.

Indirect Prompt‑Injection Vector (2026 context)

  1. 공격자가 문서나 웹사이트에 악의적인 명령을 삽입한다.
  2. LLM이 해당 데이터를 소비한다.
  3. 에이전트가 악성 ReDoS URI를 생성한다.
  4. MCP 서버가 이를 실행해 전통적인 네트워크 수준 방어를 우회한다.

Fix

  • Version: @modelcontextprotocol/sdk@1.25.2
  • Commit: b392f02 – 정규식 생성 강화.
  • Change: 부정 문자 집합을 구분자와 상호 배타적으로 만들었음(예: [^\ /]+[^\ /,]+), 모호한 백트래킹 경로를 제거하고 선형 시간 평가를 보장함.

Compatibility

하위 호환 가능; 파괴적인 변경 없음.

Upgrade Command

npm update @modelcontextprotocol/sdk

Mitigation & Best Practices

  • 템플릿 감사: * 수식자를 사용하는 리소스 템플릿을 검색({?list*} 등).
  • WAF 제어: MCP 엔드포인트에 속도 제한을 두고 과도한 구분자 반복이 포함된 URI를 차단.
  • 타임아웃: 요청/워커 타임아웃을 적용(예: 실행이 500 ms를 초과하면 중단).
  • 리소스 격리: MCP 서버를 엄격한 CPU 할당량으로 실행해 호스트 수준의 starvation 방지.
  • 적대적 테스트: CI/CD 파이프라인에 URI 템플릿 및 에이전트 생성 입력에 대한 퍼즈 테스트 추가.
  • 일반 가이드:
    • “가용성은 보안이다”: 시스템이 사용 불가능하면 보안이 아니다.
    • LLM이 생성한 문자열을 원시 사용자 입력만큼 의심하라.
    • 템플릿을 실행 가능한 로직(정규식, AST, 쿼리 플래너 등)으로 변환하는 모든 구성 요소는 높은 위험 진입점이다.

References

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...