T08 · Insecure Dependencies
- Location
SKILL.md:103- Finding
Unpinned npm Package Execution with Access to a Wallet Private Key
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly transparent about being a remote paid scanner, but its MCP setup asks users to run an unpinned npm package with a wallet private key and scanned origins are publicly listed by default.
Use the free endpoints without a wallet first. Only configure paid MCP tools with a dedicated low-balance wallet, prefer a pinned and reviewed `x402lint-mcp` version, avoid relying on a generic `PRIVATE_KEY`, and do not scan internal, confidential, customer-specific, or third-party origins unless public listing is acceptable.
SKILL.md:103Unpinned npm Package Execution with Access to a Wallet Private Key
SKILL.md:28Scanned Origins Are Published in a Public Directory by Default
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| POST | /v1/listing | FREE listing control (owner-verified origins only, else 403) — listed:false removes the origin from the directory; suppressEnrichment:true hides auto-collected branding. (10/min) |
curl "https://api.x402lint.dev/v1/status?url=https://api.example.dev"
curl https://api.x402lint.dev/v1/checks
curl "https://api.x402lint.dev/v1/directory?sort=grade&pageSize=20"
curl "https://api.x402lint.dev/v1/project?host=api.example.dev"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| POST | /v1/listing | FREE listing control (owner-verified origins only, else 403) — listed:false removes the origin from the directory; suppressEnrichment:true hides auto-collected branding. (10/min) |
curl "https://api.x402lint.dev/v1/status?url=https://api.example.dev"
curl https://api.x402lint.dev/v1/checks
curl "https://api.x402lint.dev/v1/directory?sort=grade&pageSize=20"
curl "https://api.x402lint.dev/v1/project?host=api.example.dev"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| POST | /v1/listing | FREE listing control (owner-verified origins only, else 403) — listed:false removes the origin from the directory; suppressEnrichment:true hides auto-collected branding. (10/min) |
curl "https://api.x402lint.dev/v1/status?url=https://api.example.dev"
curl https://api.x402lint.dev/v1/checks
curl "https://api.x402lint.dev/v1/directory?sort=grade&pageSize=20"
curl "https://api.x402lint.dev/v1/project?host=api.example.dev"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| POST | /v1/listing | FREE listing control (owner-verified origins only, else 403) — listed:false removes the origin from the directory; suppressEnrichment:true hides auto-collected branding. (10/min) |
curl "https://api.x402lint.dev/v1/status?url=https://api.example.dev"
curl https://api.x402lint.dev/v1/checks
curl "https://api.x402lint.dev/v1/directory?sort=grade&pageSize=20"
curl "https://api.x402lint.dev/v1/project?host=api.example.dev"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| POST | /v1/listing | FREE listing control (owner-verified origins only, else 403) — listed:false removes the origin from the directory; suppressEnrichment:true hides auto-collected branding. (10/min) |
curl "https://api.x402lint.dev/v1/status?url=https://api.example.dev"
curl https://api.x402lint.dev/v1/checks
curl "https://api.x402lint.dev/v1/directory?sort=grade&pageSize=20"
curl "https://api.x402lint.dev/v1/project?host=api.example.dev"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| POST | /v1/listing | FREE listing control (owner-verified origins only, else 403) — listed:false removes the origin from the directory; suppressEnrichment:true hides auto-collected branding. (10/min) |
curl "https://api.x402lint.dev/v1/status?url=https://api.example.dev"
curl https://api.x402lint.dev/v1/checks
curl "https://api.x402lint.dev/v1/directory?sort=grade&pageSize=20"
curl "https://api.x402lint.dev/v1/project?host=api.example.dev"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Full conformance scan ($0.15) — read-only, ~75s budget, or served from the <24h cache
curl -X POST https://api.x402lint.dev/v1/scan \
-H "Content-Type: application/json" \
-d '{"url":"https://api.example.dev"}'
This example instructs use of a PAYMENT-SIGNATURE header tied to a paid x402 authorization, and the skill later recommends configuring an EVM private key for an MCP server. In an agent setting, this creates real risk of unauthorized value transfer if the skill can induce payment-bearing requests to an external service without strong user approval and wallet isolation.
# 2) Sign an x402 'exact' USDC authorization for the Base accepts[] rail, then retry.
# Standard @x402 V2 clients send PAYMENT-SIGNATURE; legacy clients send X-PAYMENT.
curl -s -X POST "https://api.x402lint.dev/v1/scan" \
-H "Content-Type: application/json" -d '{"url":"https://api.example.dev"}' \
-H "PAYMENT-SIGNATURE: <payload>"
# → 200 { "grade": "B", "score": 82, "results": [ … ], "reportUrl": "…" }