🇰🇷 한글 설명
MCP Registry의 OIDC 인증에서 클라이언트와 서버가 고정된 audience 문자열로만 검증되어, 한 registry 인스턴스에서 발급받은 토큰이 다른 registry 인스턴스에서도 그대로 수용되는 취약점입니다. 이로 인해 attackers가 정당한 토큰을 탈취하면 다른 registry 인스턴스에 접근할 수 있으며, 공개 배포 권한을 얻을 수 있습니다.
💡 쉬운 설명
MCP Registry(앱 스토어 같은 서버 목록)에서 인증 확인이 부실해서, 한 곳에서 얻은 접근 권한이 다른 곳에서도 작동합니다. 공격자가 이를 악용하면 자신이 소유하지 않은 서버를 배포할 수 있습니다.
🇺🇸 원문 (English)
The MCP Registry provides MCP clients with a list of MCP servers, like an app store for MCP servers. Prior to 1.7.6, the client-side and server-side GitHub OIDC flow is bound only to a global audience string, not to the specific registry instance being targeted. On the client side, the publisher always appends audience=mcp-registry when requesting the GitHub Actions ID token, regardless of the selected --registry URL. On the server side, the exchange endpoint validates only that same fixed audience and then derives publish permissions directly from repository_owner. As a result, a token legitimately obtained while interacting with one registry deployment remains acceptable to any other deployment that shares the same code and audience string. This vulnerability is fixed in 1.7.6.
📍 영향받는 시스템
MCP Registry 1.7.5 이하 버전
⚔️ 공격 벡터
GitHub Actions OIDC 토큰을 탈취한 후, audience 검증이 느슨한 다른 registry 배포 인스턴스에 재사용하여 unauthorized publish 수행
🛡️ 대응 방법
MCP Registry를 1.7.6 이상으로 업그레이드하고, registry-specific audience 바인딩 및 audience 검증 로직 적용 확인
🔧 검증 코드
설치된 @mcp/registry 버전이 1.7.6 이상이면 'Patched', 그 이하면 'Vulnerable' 출력
npm list @mcp/registry 2>/dev/null | grep @mcp/registry | awk '{print $2}' | grep -E '^1\.(7\.[6-9]|[8-9]|[1-9][0-9])' && echo 'Patched' || echo 'Vulnerable'