T08 · Insecure Dependencies
- Location
SKILL.md:9- Finding
Unpinned npm Package Is Downloaded and Executed Automatically
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears related to its stated identity-badge purpose, but its install path and reporting behavior need review before use.
Review before installing. Prefer a pinned package version or locally installed audited build, keep PAYCLAW_API_URL set only to the official HTTPS endpoint, and treat the API key plus merchant/outcome data as sensitive. The source does not show destructive behavior or local credential harvesting, but the unpinned npx execution and inconsistent reporting flow are material concerns.
SKILL.md:9Unpinned npm Package Is Downloaded and Executed Automatically
src/sampling.ts:194Outcome Reporter Can Send API Credentials and Trip Data to an Unvalidated Endpoint
The skill description frames the package as a simple identity badge provider, but the documented behavior and static findings indicate additional monitoring, reporting, and stateful tracking of merchant interactions and trip outcomes. This mismatch is dangerous because users may authorize the skill expecting a narrow authentication function while it performs broader telemetry and behavioral inference, increasing privacy and data-exposure risk.
The lockfile pins @hono/node-server 1.19.9, which is reported with multiple high-severity path handling flaws in static file serving, including traversal and authorization bypass cases. Even though this package is transitive via @modelcontextprotocol/sdk, shipping a known vulnerable version means a consumer may inherit exploitable routing or static-file exposure behavior if the affected functionality is used.
express-rate-limit 8.2.1 is reported vulnerable to bypass using IPv4-mapped IPv6 addresses, allowing attackers to evade per-client throttling. In an agent-facing credential/provider skill, rate-limit bypass can materially increase brute-force, abuse, or resource exhaustion risk if any HTTP-exposed endpoints rely on this control.
fast-uri 3.1.0 is flagged for several URL parsing and host confusion issues, including SSRF-relevant edge cases. This is a true dependency risk because malformed URI normalization bugs can undermine allowlists, origin checks, or outbound request validation when the library is used for security-sensitive URL processing.
hono 4.12.3 is listed with numerous high-severity advisories spanning cookie handling, routing, and path processing issues. Because the skill depends on an SDK that embeds Hono-based server components, these issues can become directly relevant in MCP/HTTP deployments, especially for auth, routing, or request handling paths.
ip-address 10.0.1 is flagged for parsing inconsistencies and an HTML-emitting XSS issue. The rate-limit bypass context makes the parsing flaw more relevant here, since incorrect interpretation of IP forms can weaken client identity checks or network-based enforcement if this package is used in request filtering logic.
path-to-regexp 8.3.0 is reported vulnerable to ReDoS conditions via crafted route patterns or matching behavior. In server-side frameworks, regex-based route parsing DoS can let remote attackers consume CPU and degrade availability through malicious requests or problematic route definitions.
The tool tells callers that badge presentation has been recorded and that a follow-up check will occur, but the implementation performs no outbound reporting or persistence at all. This creates a deceptive security signal that downstream agents or users may rely on for compliance, auditability, or access decisions, causing them to act on false assumptions about authorization tracking.
The README states that the agent will present a cryptographic badge automatically to merchants, but it does not clearly warn users about the ongoing and repeated disclosure of identity-linked information during future interactions. Because the skill is explicitly designed to identify a human-backed agent to merchants, this creates a meaningful privacy and consent risk if users do not understand when disclosures occur or what metadata is shared.
The README instructs users to run an unpinned package via npx, which fetches the latest published version at execution time. If the package is compromised, a malicious version is published, or a dependency supply-chain issue occurs, users may execute unintended code simply by following the documentation.
The skill launches an external MCP server via npx and requires both environment-variable access and network access, but it does not declare any explicit tool scope or permission boundaries. This reduces transparency for users and agents, making it easier for the package to access secrets and communicate externally without clear least-privilege constraints.
The natural-language description instructs the agent to present itself with fixed phrasing such as 'You are an authorized actor, not a bot' and to use the returned disclosure when challenged. This imposes a specific communicative framing on users and agents without offering any language or locale choice or opt-in.
The description frames the badge as a 'skeleton key' that helps agents get through merchant bot defenses while preserving those defenses, which encourages use of the tool as a mechanism to bypass anti-bot controls. In the context of a shopping/merchant-facing agent skill, this language increases the risk of misuse against third-party sites and may normalize deceptive or unauthorized access patterns.
This file does more than present a credential: it samples the agent after identity presentation, infers whether a merchant accepted or denied the agent, and reports merchant/outcome metadata back to PayClaw. That is a material expansion from authentication into behavioral telemetry, creating a privacy and trust risk because agents may unknowingly disclose where they shopped and what happened afterward.
The code actively questions the agent about whether a merchant denied or blocked it, then classifies the response and turns it into a success/failure signal. This is not obviously necessary for a badge/credential provider and can be used to monitor agent interactions or build merchant-response intelligence without clear need or consent.
The function sends verification token, merchant, outcome, and detail to a remote API, but this file contains no user-facing notice, consent flow, or transparency mechanism. In a credential skill, undisclosed network exfiltration of transaction-related metadata is dangerous because it can reveal agent activity patterns and merchant interactions to a third party.
body-parser 2.2.2 is flagged for a denial-of-service condition related to invalid limit handling. As a transitive dependency of express, this is a real supply-chain risk, though its impact is limited to service instability rather than direct code execution or data exposure.
qs 6.15.0 is associated with several denial-of-service issues in query parsing/stringification edge cases. This is a real transitive vulnerability, but the primary consequence is request-processing instability, making it lower impact than auth bypass or traversal flaws.
The dependency uses a caret range (^1.0.0), which allows automatic installation of newer minor and patch releases. That increases supply-chain risk because a compromised upstream release or unexpected breaking behavior could be pulled in without explicit review, especially relevant for an identity/commerce-related agent component.
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0",
"zod": "^4.3.6"
},
"devDependencies": {
The zod dependency is specified with a caret range, so builds may resolve to later releases than the one originally tested. While common in JavaScript projects, this still creates a low-severity supply-chain exposure if an upstream release is malicious or introduces unsafe behavior.
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0",
"zod": "^4.3.6"
},
"devDependencies": {
"@types/node": "^20.0.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"zod": "^4.3.6"
},
"devDependencies": {
"@types/node": "^20.0.0",
"typescript": "^5.3.0"
},
"keywords": [
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/node": "^20.0.0",
"typescript": "^5.3.0"
},
"keywords": [
"payclaw",
This code sends session_id and optional merchant values to a remote API via fetch, which is a data-transmitting network operation covered by the missing-warning rule for code files. The file includes no confirmation prompt, user-facing log/print, or explanatory comment/docstring disclosing that user or system data is sent off-box.
The function reads PAYCLAW_API_KEY from the environment, which is a sensitive credential access path, but the file provides no user-facing notice, warning comment, or documentation in-code about this behavior. Under SQP-2 for code files, sensitive environment variable access should not be silent when no other disclosure is present.
Detected: suspicious.env_credential_access