T09 · Insecure Skill Coding Practices
- Location
index.js:3- Finding
Unrestricted Browser Navigation Enables Server-Side Request Forgery
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This browser automation skill does what it claims, but it gives broad URL-visiting and screenshot capability without enough scoping or cleanup controls.
Review before installing. Use this only in an environment where broad browser egress is acceptable, avoid sending it internal, localhost, metadata-service, authenticated, or sensitive URLs, and treat generated screenshots as sensitive because they are written to a predictable shared /tmp path and not cleaned up.
index.js:3Unrestricted Browser Navigation Enables Server-Side Request Forgery
index.js:23Predictable Shared Screenshot Path Creates File-Race and Cross-Request Disclosure Risks
The description advertises visiting any URL and taking screenshots without warning about the risks of arbitrary web navigation, including exposure to phishing pages, internal endpoints, sensitive authenticated content, or data captured in screenshots. Without user-facing warnings and operational safeguards, users and calling agents may treat the capability as routine and invoke it in unsafe contexts.
The skill can be invoked with very broad language to visit arbitrary URLs and perform browser actions, but it does not define clear trigger constraints, scope limits, or approval boundaries. In an agent environment, this increases the chance of unintended activation and unsafe navigation to attacker-controlled sites, which can expose session data, sensitive page content, or trigger risky downstream actions.
The skill launches a real browser and navigates to a fully user-controlled URL with no validation, allowlist, or warning about outbound network access. This creates an SSRF-style capability through browser automation, which can be abused to reach internal services, cloud metadata endpoints, or other sensitive network locations from the environment where the skill runs.
The inline comment contains Chinese text ('生产环境建议 headless: true'), introducing a language-specific instruction in a file that otherwise uses English. This can violate language/locale policy when a specific language is imposed without offering user choice or documenting a justified locale constraint.
The dependency uses a caret version range ("^1.58.2") rather than an exact pinned version, which allows newer compatible releases to be installed over time. This creates a supply-chain risk because builds may become non-reproducible and could silently pick up a compromised or breaking upstream release.
"author": "",
"license": "ISC",
"dependencies": {
"playwright": "^1.58.2"
}
}