🔍 CVE-2026-44429

5.4
CVSS Score
MEDIUM
2026-05-14
2026-10-26 14:10
✅ 완료

🇰🇷 한글 설명

MCP Registry 공개 카탈로그 UI의 server.websiteUrl 필드가 입력값을 충분히 검증하지 않아 저장된 XSS 취약점을 가짐. 공격자가 큰따옴표 문자를 삽입하여 href 속성을 벗어나고 onclick 같은 이벤트 핸들러를 추가할 수 있으며, CSP 설정이 'unsafe-inline'을 허용하여 악의적인 코드가 실행됨. 1.7.7 이전 모든 버전이 영향받음.

💡 쉬운 설명

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.7, the public catalogue UI served at GET / (file internal/api/handlers/v0/ui_index.html) is vulnerable to stored cross-site scripting via the server.websiteUrl field of any published server.json. Server-side validation in internal/validators/validators.go (validateWebsiteURL) only checks that the URL parses, is absolute, and uses the https scheme; it does not reject quote characters. Client-side, the value is interpolated into a double-quoted href attribute via innerHTML, using a homegrown escapeHtml helper that performs the standard textContent → innerHTML round-trip. Per the HTML serialisation algorithm, that round-trip encodes only &, <, > and U+00A0 inside text nodes — it does not encode " or '. A literal " in websiteUrl therefore breaks out of the href attribute, allowing arbitrary on* event handlers to be appended to the same <a> element. The Content-Security-Policy on / is script-src 'self' 'unsafe-inline' https://cdn.tailwindcss.com, so the injected event handlers execute. Any user able to obtain a publish token (e.g. via POST /v0/auth/github-at with their own GitHub account, or POST /v0/auth/none on a deployment that has anonymous auth enabled) can plant a poisoned record visible to every visitor of the registry homepage. This vulnerability is fixed in 1.7.7.

📍 영향받는 시스템

MCP Registry 1.7.7 이전 버전

⚔️ 공격 벡터

publish token을 획득한 공격자가 poisoned server.json을 등록하여 registry 홈페이지 방문자를 공격

🛡️ 대응 방법

MCP Registry를 1.7.7 이상으로 업그레이드

🔧 검증 코드

명령어 실행 결과 'VULNERABLE'이면 1.7.7 미만 버전 설치됨 (즉시 업그레이드 필요), 'PATCHED'이면 안전함.

Shell / Script
mcp-registry --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | awk -F. '{if($1==1 && $2<7) print "VULNERABLE"; else print "PATCHED"}' || echo 'Version check failed'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N