T09 · Insecure Skill Coding Practices
- Location
scripts/fetch.js:43- Finding
Unrestricted URL Navigation Enables Server-Side Request Forgery and Local Resource Access
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This webpage-fetching skill is coherent but needs Review because it opens user-provided URLs with an unsandboxed browser and no URL safeguards, which could expose internal resources if misused.
Only install or run this skill in an isolated, non-privileged environment with no sensitive files, credentials, or internal network access. Use it only for URLs you are authorized to contact, and prefer a revised version that validates public http/https URLs, blocks local and private addresses across redirects, enables browser sandboxing, and pins dependencies with a lockfile.
scripts/fetch.js:43Unrestricted URL Navigation Enables Server-Side Request Forgery and Local Resource Access
scripts/fetch.js:29Chromium Security Sandbox Is Explicitly Disabled for Untrusted Web Content
scripts/package.json:9Mutable Dependency Resolution Without a Lockfile Creates Supply-Chain Risk
The file is written entirely in Chinese and does not indicate that language selection is optional or that the skill is intentionally region-specific. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.
The skill explicitly performs live network access to arbitrary third-party URLs using a headless browser, but the description does not warn users that invoking it will contact external sites and expose request metadata such as IP address, headers, and browser fingerprint. Because it also advertises stealth-based anti-bot evasion, the omission reduces informed consent and can cause users to trigger external interactions they did not expect.
The script's comments and all user-visible console output are in Chinese, including usage instructions and status/error messages. This imposes a specific language on users without any opt-in or alternative, which matches the locale-policy violation criteria.
The dependency is specified with a caret range, which allows newer compatible releases to be installed over time rather than a single audited version. This weakens build reproducibility and can unexpectedly introduce vulnerable or malicious upstream changes into a browser-automation component with network access.
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"playwright": "^1.58.2",
"playwright-extra": "^3.1.2",
"puppeteer-extra-plugin-stealth": "^2.11.2",
"turndown": "^7.1.2"
The manifest references playwright without pinning an exact version, while a known advisory exists affecting some releases. Because the installed version may vary, it is impossible to verify whether deployments are exposed to the browser-download authenticity issue, creating avoidable supply-chain risk in a tool that fetches external content and installs browser binaries.
Using a semver range for playwright-extra permits unreviewed patch/minor updates to enter future installs, reducing supply-chain integrity and reproducibility. In a scraping skill that automates browsers and processes untrusted web content, even low-friction dependency drift increases risk.
},
"dependencies": {
"playwright": "^1.58.2",
"playwright-extra": "^3.1.2",
"puppeteer-extra-plugin-stealth": "^2.11.2",
"turndown": "^7.1.2"
}
The stealth plugin is unpinned, so future installs may pull in changed code without explicit review. Because this package alters browser behavior to evade anti-bot detection, unreviewed updates in this component are more sensitive than a typical utility library and could affect trust, detection surface, or introduce malicious logic.
"dependencies": {
"playwright": "^1.58.2",
"playwright-extra": "^3.1.2",
"puppeteer-extra-plugin-stealth": "^2.11.2",
"turndown": "^7.1.2"
}
}
Turndown is also declared with a caret range, so installs are not strictly reproducible and may incorporate unreviewed upstream changes. While lower risk than the browser automation stack, it still contributes to overall supply-chain exposure.
"playwright": "^1.58.2",
"playwright-extra": "^3.1.2",
"puppeteer-extra-plugin-stealth": "^2.11.2",
"turndown": "^7.1.2"
}
}
No suspicious patterns detected.