Back to skill

Security audit

Enable AI Agent to retrive data from websites that need user signin

Security checks for vulnerabilities and agentic risk

Overview

This skill is meant to control a browser for website data retrieval, but it gives a configured MCP server raw browser-control access with weak disclosure and conflicting login-safety instructions.

Only install this if you fully trust the configured MCP server and can keep CDP bound to a protected local interface. Review or fix the transport first: document SERVER_URL, enforce trusted HTTPS destinations, avoid sending raw CDP endpoints to remote services, and resolve the conflicting sign-in instructions before using it with sensitive accounts.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
script.js:9
Finding
Unrestricted MCP Server Receives the Browser CDP Endpoint and Sign-In Identifier## Vulnerability Details **File Location**: `script.js:9-19, 35-50` **Vulnerability Type**: Sensitive endpoint disclosure to an unrestricted remote service **Risk Level**: High ```js const SERVER_URL = process.env.SERVER_URL; const MCP_URL = `${SERVER_URL}/mcp`; const CDP_URL = process.env.CDP_URL; if (!CDP_URL) { throw new Error("CDP URL environment variable is required."); } if (!SERVER_URL) { throw new Error("SERVER URL environment variable is required."); } async function connectMcp(signinId) { // Disconnect if already connected to allow reconnection try { await mcpClient.close().catch(() => {}); } catch { // Ignore errors if not connected } const transport = new StreamableHTTPClientTransport(new URL(MCP_URL), { requestInit: { headers: { "x-signin-id": signinId ?? "", "x-incognito": "1", "x-cdp-url": CDP_URL, }, }, }); await mcpClient.connect(transport); } ``` ### Technical Analysis `SERVER_URL` is accepted directly from the environment and used without enforcing HTTPS, validating the destination against an allowlist, or requiring explicit approval for a new endpoint. The client then transmits both `CDP_URL` and `signinId` to that server as HTTP headers. A Chrome DevTools Protocol endpoint can provide extensive browser-control capabilities, including inspecting pages, executing JavaScript in browser contexts, navigating tabs, and interacting with authenticated websites. If the endpoint is reachable from the MCP server, disclosure can enable control over browser sessions. Even when it is not externally reachable, the value reveals internal network addressing and browser-control configuration. The documentation compounds this risk by showing a plaintext `http://` CDP URL in `SKILL.md:21` and claiming that the Skill enforces API-key authentication in `SKILL.md:8`, while the implementation sends no API key and con ...[truncated 1588 chars]
Remediation
## Remediation Suggestions 1. Require `https:` for every non-loopback `SERVER_URL` and reject plaintext HTTP before constructing the transport. 2. Restrict MCP destinations to an explicit hostname and port allowlist. Display the resolved destination and require user approval before trusting a new server. 3. Do not transmit a raw CDP endpoint to a remote service. Place browser access behind a local, authenticated broker that exposes narrowly scoped operations instead of unrestricted CDP. 4. Bind CDP to loopback or a private interface, protect it with strong authentication, and prevent access from untrusted networks. 5. Use short-lived, purpose-bound authorization tokens for MCP and browser operations. Do not treat `signinId` as sufficient authentication. 6. Validate MCP tool identities and schemas, and require confirmation for sensitive operations involving authenticated sessions, credential settings, purchases, or account changes. 7. Avoid exposing sensitive headers through redirects. Configure the transport to reject cross-origin redirects or strip `x-cdp-url` and `x-signin-id` before following them. 8. Update `SKILL.md` to document `SERVER_URL`, trusted-server requirements, transport-security requirements, CDP exposure risks, and the authentication mechanism actually implemented. 9. Remove the unsupported claim that API-key authentication is enforced unless authenticated requests are implemented and verified.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (16)

Known Vulnerable Dependency: @hono/node-server==1.19.9 — 3 advisory(ies): CVE-2026-39406 (@hono/node-server: Middleware bypass via repeated slashes in serveStatic); GHSA-frvp-7c67-39w9 (Node.js Adapter for Hono: Path traversal in `serve-static` on Windows via encode); CVE-2026-29087 (@hono/node-server has authorization bypass for protected static paths via encode)

High
Category
Supply Chain
Confidence
95% confidence
Finding
The lockfile pins @hono/node-server 1.19.9, which is reported as affected by multiple HIGH-severity issues including static file middleware bypass, path traversal on Windows, and authorization bypass for protected static paths. In a skill described as signing into websites and retrieving data via JavaScript, any HTTP/static-serving component increases exposure because route or path handling flaws can enable unintended file access or bypass of protections if the server functionality is used.

Known Vulnerable Dependency: express-rate-limit==8.2.1 — 1 advisory(ies): CVE-2026-30827 (express-rate-limit: IPv4-mapped IPv6 addresses bypass per-client rate limiting o)

High
Category
Supply Chain
Confidence
91% confidence
Finding
express-rate-limit 8.2.1 is flagged for bypass of per-client limits using IPv4-mapped IPv6 addresses. If this skill exposes an MCP/HTTP service, an attacker could evade throttling controls and increase the feasibility of brute force, credential stuffing, or resource exhaustion attacks against website sign-in and data retrieval workflows.

Known Vulnerable Dependency: fast-uri==3.1.0 — 7 advisory(ies): CVE-2026-13676 (fast-uri vulnerable to host confusion via failed IDN canonicalization); CVE-2026-18446 (fast-uri vulnerable to host confusion via backslash authority introducer); CVE-2026-75975 (fast-uri vulnerable to server-side request forgery via malformed IPv6 normalizat) +4 more

High
Category
Supply Chain
Confidence
82% confidence
Finding
fast-uri 3.1.0 is reported as affected by multiple HIGH-severity URI parsing issues including host confusion and SSRF-related malformed parsing cases. In a browser/web-retrieval skill, URL parsing correctness is security-critical because parsing discrepancies can let attackers redirect requests to unintended hosts or bypass hostname-based allow/deny logic.

Known Vulnerable Dependency: hono==4.11.9 — 16 advisory(ies): CVE-2026-56762 (Hono missing validation of cookie name on write path in setCookie()); CVE-2026-47676 (Hono: app.mount() strips mount prefix using undecoded path, causing incorrect ro); CVE-2026-47675 (Hono: Cookie helper does not sanitize sameSite and priority, allowing Set-Cookie) +13 more

High
Category
Supply Chain
Confidence
94% confidence
Finding
hono 4.11.9 is flagged with numerous HIGH-severity advisories affecting cookie handling, route/mount behavior, and other request-processing logic. Because this skill likely operates as a networked integration layer for authentication and data retrieval, framework-level parsing and routing bugs can materially affect authentication integrity, authorization checks, and safe request handling.

Known Vulnerable Dependency: ip-address==10.0.1 — 2 advisory(ies): CVE-2026-69192 (ip-address: Address4 decodes leading-zero octets as decimal while resolvers deco); CVE-2026-42338 (ip-address has XSS in Address6 HTML-emitting methods)

High
Category
Supply Chain
Confidence
80% confidence
Finding
ip-address 10.0.1 is reported vulnerable to parsing inconsistencies for leading-zero IPv4 octets and to XSS in HTML-emitting methods. The parsing issue is more relevant here: network-facing software that uses IP parsing for validation, rate limiting, or access control can make incorrect trust decisions when textual IP forms are interpreted differently across components.

Known Vulnerable Dependency: path-to-regexp==8.3.0 — 2 advisory(ies): CVE-2026-4923 (path-to-regexp vulnerable to Regular Expression Denial of Service via multiple w); CVE-2026-4926 (path-to-regexp vulnerable to Denial of Service via sequential optional groups)

High
Category
Supply Chain
Confidence
88% confidence
Finding
path-to-regexp 8.3.0 is flagged for ReDoS/DoS issues from crafted route patterns. If the vulnerable code path is exercised by attacker-controlled paths against an exposed HTTP interface, repeated malicious requests can consume CPU and degrade or deny service availability.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill exposes code-execution-relevant capabilities (`env`, `mcp`) but does not declare any explicit tool scope or allowed-tools boundary. This weakens least-privilege controls and can let the agent invoke broader capabilities than a reviewer or user would expect, especially given the skill's browser/CDP and sign-in workflow.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The skill is described in very broad terms—signing in and retrieving data from websites, and directly using a browser via CDP if no tool exists—without clear trigger limits, target-site restrictions, or sensitivity boundaries. Overbroad activation makes misuse more likely, including accessing account data from high-risk domains such as banking or e-commerce with insufficient user awareness or policy checks.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill discusses retrieving account data from websites that may require authentication, including examples like banking and purchase history, but does not clearly warn users about privacy, credential, session, and sensitive-data exposure risks. In this context, lack of disclosure increases the chance that users enable collection of highly sensitive information without informed consent or proper safeguards.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The skill text says sign-in URLs must not be opened automatically, but the embedded `system_message` explicitly tells the agent to try opening the URL with a browser tool if available. This instruction conflict is dangerous because downstream agents may privilege the embedded message and automate navigation to authentication pages, undermining the intended human-in-the-loop control around sensitive logins.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The behavior constraints prohibit automatically opening sign-in URLs, yet the skill also instructs the agent to directly browse via CDP when no tool exists. In context, this creates a loophole that can be interpreted as authorization to navigate to protected account pages or login flows through browser automation, bypassing the stated safeguard.

Known Vulnerable Dependency: ajv==8.17.1 — 1 advisory(ies): CVE-2025-69873 (ajv has ReDoS when using `$data` option)

Low
Category
Supply Chain
Confidence
73% confidence
Finding
ajv 8.17.1 is flagged for a ReDoS condition when the $data option is enabled. This is a real dependency risk, but its exploitability depends on the application actually enabling $data and validating attacker-controlled schemas or inputs in a way that reaches the vulnerable code path.

Known Vulnerable Dependency: body-parser==2.2.2 — 1 advisory(ies): CVE-2026-12590 (body-parser vulnerable to denial of service when invalid limit value silently di)

Low
Category
Supply Chain
Confidence
72% confidence
Finding
body-parser 2.2.2 is reported vulnerable to denial of service involving invalid limit handling. This is a genuine package hygiene issue, though the impact is limited to availability and depends on the application exposing affected request parsing paths to attacker-controlled traffic.

Known Vulnerable Dependency: qs==6.14.1 — 3 advisory(ies): CVE-2026-82417 (qs: Denial of Service via Attacker Controlled isBuffer); CVE-2026-8723 (qs has a remotely triggerable DoS: qs.stringify crashes with TypeError on null/u); CVE-2026-2391 (qs's arrayLimit bypass in comma parsing allows denial of service)

Low
Category
Supply Chain
Confidence
76% confidence
Finding
qs 6.14.1 is reported as affected by several denial-of-service issues related to parsing and stringify edge cases. This is a real dependency concern, but the impact is primarily availability-related and depends on whether untrusted query/body structures reach the vulnerable parsing behavior.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"call": "node script.js call"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "dotenv": "^16.4.0"
  }
}
Confidence
83% confidence
Finding
The dependency is version-ranged with a caret, which permits automatic installation of newer minor/patch releases that have not been explicitly reviewed. In a tool that signs into websites and retrieves data, a compromised or breaking upstream release could affect credential handling or browser automation behavior, making supply-chain risk more relevant than in a purely local utility.

Unpinned Dependencies

Low
Category
Supply Chain
Content
},
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "dotenv": "^16.4.0"
  }
}
Confidence
82% confidence
Finding
Using a caret range for dotenv allows unreviewed patch/minor updates to be pulled in during installation, creating avoidable supply-chain and reproducibility risk. Because this skill likely handles environment-based secrets for website sign-in, any dependency compromise in the configuration-loading path could expose sensitive credentials or alter runtime behavior.

Static analysis

No suspicious patterns detected.