CVE-2026-0621: MCP TypeScript SDK의 Event-Loop 서비스 거부 공격
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)
- 공격자가 문서나 웹사이트에 악의적인 명령을 삽입한다.
- LLM이 해당 데이터를 소비한다.
- 에이전트가 악성 ReDoS URI를 생성한다.
- 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
- NVD Advisory: CVE‑2026‑0621
- Upstream Issue: GitHub Issue #965
- Fix Pull Request: GitHub PR #1365
- Disclosure Date: January 6 2026
- Patch Release Date: January 6 2026