T08 · Insecure Dependencies
- Location
SKILL.md:10- Finding
Unpinned and Unverifiable MCP Server and Browser Extension Dependencies
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 10-40
Vulnerability Type:T08: Insecure Dependencies
Risk Level: MediumEvidence
md - **Source:** [github.com/chrischall/musescore-mcp](https://github.com/chrischall/musescore-mcp) (private) > ⚠️ MuseScore has no public consumer API (the old one was shut down). This > server reads the same server-rendered data the musescore.com web app > hydrates from, dispatched through your own signed-in browser tab via the > fetchproxy extension. Use at your own discretion. ## Setup ### 1. Install musescore-mcp `.mcp.json` (project) or `~/.claude/mcp.json` (global): ```json { "mcpServers": { "musescore": { "command": "node", "args": ["/absolute/path/to/musescore-mcp/dist/bundle.js"] } } }2. Install the fetchproxy extension and sign in
Install the fetchproxy browser extension and open musescore.com signed in, with the Cloudflare check cleared. Every request rides that tab's session.
text ### Technical Analysis The Skill directs users to execute a local Node.js bundle from a private repository and install a browser extension from an external repository. Neither component is included in the audited project, and the documentation does not pin either dependency to an immutable commit, signed release, version, or integrity hash. The private MCP implementation therefore cannot be independently reviewed from this artifact. The behavior of both dependencies can also change after the Skill itself has been audited. This creates a supply-chain trust boundary in which the effective implementation is controlled outside the reviewed package. The browser extension is particularly sensitive because requests are routed through a signed-in MuseScore tab. Although the documentation states that authentication remains in the browser, the extension necessarily partic ...[truncated 2689 chars]- Remediation
View remediation
Remediation Suggestions
- Publish the complete MCP server source and make it available for independent review.
- Pin the MCP server and browser extension to immutable commit hashes or exact signed release versions.
- Publish cryptographic checksums and verify them before installation or execution.
- Use reproducible builds so users can verify that
dist/bundle.jscorresponds to reviewed source code. - Sign release artifacts and document the trusted signing keys and verification procedure.
- Document all browser-extension permissions, restrict host access to the minimum required MuseScore origins, and avoid broad permissions such as access to all websites.
- Restrict the MCP process using operating-system sandboxing, a dedicated low-privilege account, limited filesystem access, and outbound network controls.
- Prefer project-scoped
.mcp.jsonregistration over global~/.claude/mcp.jsonregistration to reduce exposure across unrelated projects. - Document the exact data exchanged through the browser bridge, including whether cookies, authorization headers, page content, or response bodies can be observed or stored.
- Add a dependency update and re-audit policy so changes to either external component trigger renewed security review.
