T09 · Insecure Skill Coding Practices
- Location
scripts/mcp_bridge.mjs:49- Finding
Caller-Controlled Local File Exfiltration to an Arbitrary Network Destination
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
Review before installing: this Outline integration is coherent overall, but its upload helper can read any process-readable local file and send it to an agent-supplied URL.
Install only in a trusted, least-privileged environment. Use a minimally scoped Outline API key, restrict what local files the OpenClaw process can read, verify OUTLINE_URL is an HTTPS trusted Outline origin, and avoid enabling the upload or bulk-sync paths unless you are comfortable with agent-directed local file uploads. The publisher should add URL allowlisting, file path restrictions, and explicit permission declarations before this is treated as routine install material.
scripts/mcp_bridge.mjs:49Caller-Controlled Local File Exfiltration to an Arbitrary Network Destination
scripts/mcp_bridge.mjs:11Outline Bearer Token Can Be Transmitted to an Untrusted or Plaintext Endpoint
fast-uri 3.1.0 is associated with multiple URI parsing and canonicalization flaws, including host confusion and SSRF-adjacent issues. In an MCP bridge that may fetch remote resources, process URLs, or connect to Outline/SSE endpoints, malformed URLs could bypass host validation or redirect requests to unintended internal/external targets.
hono 4.12.9 has numerous published advisories affecting routing, cookies, and request handling. Because this skill is an MCP bridge exposed over SSE/HTTP and may mediate document management plus filesystem-assisted uploads, framework-level routing or cookie flaws can meaningfully expand attack surface, potentially enabling auth bypass, path confusion, or unsafe response behavior depending on implementation.
ip-address 10.1.0 is flagged for address parsing inconsistencies and an XSS issue in HTML-emitting helpers. In this project, the most relevant concern is parsing ambiguity if IP-based trust, rate limiting, or SSRF protections rely on this library transitively; the XSS angle is less likely unless the application renders library-produced HTML.
path-to-regexp 8.3.0 is reported vulnerable to ReDoS/DoS through crafted route patterns or path inputs. In an HTTP/SSE-facing MCP service, this can allow unauthenticated attackers to tie up CPU and degrade availability if affected matching paths are reachable.
The skill requires sensitive environment variables (OUTLINE_API_KEY, OUTLINE_URL) and also exposes filesystem-capable operations, but it does not declare any explicit tool scope such as permissions or allowed-tools. That omission weakens least-privilege controls and makes it easier for an agent or operator to enable the skill with broader capabilities than intended, increasing the chance of unauthorized data access or misuse.
This code performs an HTTPS POST to an external Outline API using a bearer token and transmits the requested document ID, but there is no user-facing notice, confirmation, or explanatory comment/docstring describing that remote data access occurs. For code files, outbound network calls that transmit user or system data should include some form of disclosure unless the warning is clearly provided elsewhere.
The upload path accepts an arbitrary upload URL and a caller-supplied local filePath, then reads the file from disk and POSTs it to that remote endpoint with no validation, allowlisting, or user confirmation. In the context of an MCP bridge that explicitly exposes local filesystem access, this increases the risk of an agent or prompt-influenced workflow exfiltrating sensitive local files to attacker-controlled infrastructure, not just to trusted Outline storage.
The lockfile pins @hono/node-server 1.19.11, and the cited advisories affect static file serving behavior, including repeated-slash middleware bypass and Windows path traversal in serve-static. In this skill’s context, the risk is elevated because the MCP bridge explicitly includes local filesystem access and likely exposes HTTP/SSE endpoints; if static serving is used anywhere in the runtime, these bugs could enable unauthorized file access or bypass of intended protections.
body-parser 2.2.2 is flagged for a denial-of-service condition involving invalid limit handling. This is a real dependency risk, but its practical impact here is limited to service instability rather than direct compromise, assuming the application accepts attacker-controlled HTTP request bodies.
qs 6.15.0 is associated with denial-of-service and parsing edge-case issues. This is a real supply-chain weakness, but in this context it most likely affects robustness of query/body parsing rather than confidentiality or privilege boundaries unless attacker-controlled nested parameters are heavily processed.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"license": "ISC",
"type": "commonjs",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.27.1"
}
}
The script reads OUTLINE_API_KEY from the environment and immediately uses it to authenticate outbound API requests, but the file contains no comment, docstring, or user-visible message explaining that a credential is required and will be used. Access to sensitive environment variables is in scope for missing-warning findings when no disclosure is present.
No suspicious patterns detected.