T09 · Insecure Skill Coding Practices
- Location
scripts/xe-rate.mjs:7- Finding
Hardcoded CDP Authentication Token in Source Code
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This exchange-rate skill is mostly purpose-aligned, but it embeds a browser-control token and can use a shared browser session beyond what a rate lookup needs.
Review before installing. The skill appears intended to fetch exchange rates, not steal data, but it should remove the embedded CDP token, create an isolated browser context per run, avoid closing shared browser resources, and make the fallback data source clear in user-facing responses.
scripts/xe-rate.mjs:7Hardcoded CDP Authentication Token in Source Code
scripts/xe-rate.mjs:25Unnecessary Access to a Shared Browser Context
The skill invokes a network-capable script that uses Playwright/Browserless and a fallback external API, but the manifest does not declare any tool scope or allowed tools. This creates a governance gap: the agent may perform outbound network access beyond what is explicitly authorized or reviewed, making it harder to enforce least privilege and audit external data flows.
A hardcoded CDP WebSocket token exposes a reusable secret in source code and enables unauthorized parties with code access to connect to the browserless endpoint. Because CDP grants powerful browser control, misuse could allow session access, arbitrary browsing, request interception, or pivoting into internal resources reachable from that browser environment.
The manifest specifically describes this skill as fetching live exchange rates from XE.com, but the implementation includes a separate fallback to open.er-api.com / exchangerate-api.com when XE scraping fails. That means the actual data source and behavior differ from the stated skill description and expected source semantics.
The top-level comment describes the script as fetching rates from XE.com via Playwright, which contradicts the implemented fallback path that returns exchangerate-api.com data. This is an active documentation mismatch about the skill's actual behavior and source of truth.
The script fetches exchange-rate data from third-party services using both Playwright page navigation and a direct HTTP fetch. Although network access is central to the script's purpose, there is no explicit warning that user-supplied currency/amount parameters will be sent to external services.
No suspicious patterns detected.