T09 · Insecure Skill Coding Practices
- Location
scripts/fetch-wechat.js:20- Finding
Weak URL Validation Allows Arbitrary Network Requests
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill has a legitimate article-summarization purpose, but its URL handling and installation instructions give it broader and less controlled execution/network behavior than users should accept without review.
Review before installing. Only run it on trusted WeChat article URLs, avoid automatic execution from arbitrary chat messages, and prefer a fixed install that pins playwright and cheerio. The publisher should replace substring URL checks with strict URL parsing, block redirects and subresources outside mp.weixin.qq.com, and document safe argument-array invocation instead of shell interpolation.
scripts/fetch-wechat.js:20Weak URL Validation Allows Arbitrary Network Requests
SKILL.md:13Unquoted User-Controlled URL in Shell Command Template
package.json:18Unpinned Runtime Installation and Dependency Manifest Mismatch
The skill metadata says it parses WeChat articles and extracts key points, but the documented behavior invokes a Node.js script that fetches arbitrary URLs using browser automation and text extraction. This mismatch hides network access and scraping capability from reviewers and users, which can lead to unexpected external requests, broader data access than declared, and unsafe invocation patterns if the URL input is not tightly constrained.
The lockfile includes undici 7.25.0, and the listed advisories describe request/response desynchronization, socket reuse, queue poisoning, and potential cross-user information disclosure. For a skill that fetches remote article URLs, an HTTP client vulnerability is especially relevant because network-facing code is likely in scope, making response confusion, data leakage, or crashes more plausible than in an offline-only package.
The README instructs users to run npx playwright install chromium without pinning a specific Playwright version. npx may fetch and execute package code based on the current registry state, so a future compromised or incompatible release could run unexpected code during installation. In a skill-installation context, this is more dangerous because users are encouraged to execute setup commands directly from the repository.
The skill advertises automatic triggering whenever a user sends a WeChat article link, but the README does not define tighter scope constraints, consent boundaries, or validation rules. Broad trigger conditions can cause the agent to invoke browser automation on untrusted URLs too readily, increasing exposure to prompt/HTML injection, unintended browsing, or misuse when similar-looking links are supplied.
The lockfile pins fflate to 0.8.2, and the supplied advisory indicates malformed ZIP64 input can trigger an infinite loop in unzipSync. This is a real supply-chain risk because the dependency is present in the shipped dependency graph, though the practical impact depends on whether the skill or its transitive tooling ever processes attacker-controlled ZIP archives.
The dependency version is specified with a caret range (^0.12.0), which allows newer compatible releases to be installed rather than forcing a single audited version. This can introduce supply-chain risk if an upstream release is compromised or introduces breaking/security-relevant changes, though the file itself does not show active exploitation and this is a common but weaker dependency hygiene issue.
},
"homepage": "https://github.com/oldjie/wechat-article-parser#readme",
"dependencies": {
"clawhub": "^0.12.0"
}
}
No suspicious patterns detected.