T09 · Insecure Skill Coding Practices
- Location
fetch-wechat-article.js:71- 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
The skill appears to fetch WeChat articles as advertised, but it needs review because it runs a sandbox-disabled local browser on caller-supplied URLs and downloads page-selected files without adequate limits.
Install only if you are comfortable running a local browser against article URLs you trust. Avoid using it on arbitrary or attacker-provided links, prefer disabling image downloads unless needed, and run it in a restricted environment with no access to sensitive local or private-network services.
fetch-wechat-article.js:71Unrestricted Browser Navigation Enables Server-Side Request Forgery
fetch-wechat-article.js:9Unvalidated Image Downloads Enable SSRF and Resource Exhaustion
fetch-wechat-article.js:82Chrome Sandbox Is Disabled While Rendering Untrusted Web Content
The skill description and all user-facing instructions are presented only in Chinese, which can constitute a language/locale policy violation when no opt-in or alternative language is offered. The README does not state that the tool is intentionally limited to Chinese-speaking users or a China-specific compliance context.
The user-facing documentation is entirely in Chinese and does not indicate that other languages are supported or that the Chinese-only presentation is an intentional, justified locale restriction. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation.
The file's operational instructions, usage guidance, warnings, and examples are presented in Chinese throughout, which effectively forces a specific language for users consuming the skill documentation. The policy allows locale constraints only when documented and justified or when users are given a choice, neither of which appears here.
The manifest requests both file_write and exec capabilities, plus local browser control, but the user-facing description only presents the skill as a benign article fetcher and does not clearly disclose these privileged operations. This creates a transparency and consent problem: a user may authorize a tool that can write files and execute processes without understanding the added risk, which increases the chance of misuse or unexpected side effects if the implementation is flawed or later modified.
The skill's natural-language comments, errors, logs, and CLI help are all presented in Chinese, and there is no option for users to select another language. This creates a locale/language policy concern because the skill imposes a single language without documenting a justified regional constraint or offering user choice.
This code defaults to saving scraped article content and downloaded images to the current directory, and later creates directories and writes multiple files. While it logs progress during execution, the CLI help and function documentation do not clearly warn users that local files and an image manifest will be created by default, which is a safety-relevant side effect.
This markdown file states that the tool will automatically save output as a text file, which is a user-data-affecting behavior. The description does not include any warning or clarification about where files are written, whether existing files may be overwritten, or that local filesystem changes will occur.
The display name and description are entirely in Chinese, and the metadata does not indicate that the skill is region-specific or provide any language/locale opt-in. This can be a natural-language policy issue when users are not given a choice or justification for the locale constraint.
The package description is written entirely in Chinese and presents the skill as a Chinese-language WeChat article extraction skill without indicating any user-selectable language or locale option. Under the policy criteria, this is a natural-language locale constraint that is not documented as optional or region-justified in the file.
Using a caret version range for a dependency allows future compatible releases to be installed automatically, which can introduce supply-chain risk if a new upstream version is compromised or contains breaking security-relevant behavior. In this skill's context, puppeteer-core is a powerful browser automation library, so unexpected dependency changes could affect a component capable of accessing web content and local browser interactions.
"author": "@Adgai115",
"license": "MIT-0",
"dependencies": {
"puppeteer-core": "^24.37.5"
},
"engines": {
"node": ">=18.0.0"
No suspicious patterns detected.