T09 · Insecure Skill Coding Practices
- Location
paper.sh:23- Finding
Unrestricted MCP Endpoint Allows Design Data Disclosure to Remote Servers
- Content
View full analysis
/dev/null | grep -q "200\|400\|405"; then ``` ```bash response=$(curl -s -i -X POST "$PAPER_MCP_URL" \ -H "Content-Type: application/json" \ -H "Accept: $ACCEPT_HEADER" \ -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"openclaw-paper-skill","version":"1.0.0"}},"id":1}' 2>&1) ``` ```bash response=$(curl -s -X POST "$PAPER_MCP_URL" \ -H "Content-Type: application/json" \ -H "Accept: $ACCEPT_HEADER" \ -H "Mcp-Session-Id: $session_id" \ -d "$payload" 2>&1) ``` ### Technical Analysis The skill is documented as a bridge to Paper's local MCP server, but `PAPER_MCP_URL` is accepted directly from the process environment without validating its scheme, hostname, port, or path. Every initialization request and subsequent MCP tool request is sent to that endpoint. An attacker who can influence the environment of the skill process can replace the loopback URL with a remote server. The transmitted payload can include MCP tool names, node identifiers, HTML content, text content, design metadata, or other arguments supplied during design operations. The MCP session identifier received from the configured server is also sent in later requests. Because the remote response is trusted as an MCP response, the issue additionally permits an attacker-controlled endpoint to supply arbitrary response content and image bytes to downstream response-processing functions. ### Attack Path 1 ...[truncated 1189 chars]- Remediation
View remediation
