T08 · Insecure Dependencies
- Location
SKILL.md:16- Finding
Unpinned Global Installation of a Third-Party Dependency
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a WeChat article search tool, but it uses scraping workarounds, an unsafe global dependency install instruction, and weak URL validation that deserve review before installation.
Review this skill before installing. Prefer a project-local, pinned dependency install instead of global npm installation, use it only for explicit WeChat article searches, avoid the real-URL resolution option unless needed, and be aware that it relies on scraping-style requests that may violate site rules or expose your environment to attacker-influenced outbound requests.
SKILL.md:16Unpinned Global Installation of a Third-Party Dependency
scripts/search_wechat.js:294Insufficient Hostname Validation Enables Attacker-Selected HTTPS Requests
Referenced artifact was not completely inspected
node scripts/search_wechat.js "关键词"
Referenced artifact was not completely inspected
node scripts/search_wechat.js "关键词"
Referenced artifact was not completely inspected
node scripts/search_wechat.js "关键词"
Referenced artifact was not completely inspected
node scripts/search_wechat.js "关键词"
The trigger description is broad enough to activate on generic requests like searching articles or gathering reference materials, which can cause the agent to invoke this skill outside a narrowly intended WeChat-article-search context. Over-broad activation increases the chance of unnecessary external lookups, execution of local scripts, and handling of user-controlled query strings when a more specific or safer skill should have been chosen.
The script deliberately rotates among 20 desktop/mobile User-Agent strings 'to avoid fixed UA' and reduce detection, which is anti-bot evasion behavior beyond a straightforward search client. In an agent skill, this increases abuse potential by helping automated scraping appear less attributable and more resilient against provider defenses.
The HTTP headers explicitly force Accept-Language to prefer zh-CN, which imposes a specific locale choice in the skill's behavior. The file does not offer the user any language or locale selection, nor does it document this as a justified region-specific constraint.
The code fetches cookies from an unrelated Sogou video endpoint solely to support later search/link access, which is a workaround to obtain session material not directly required by the stated article-search function. This is risky because it expands tracking/session acquisition behavior and suggests circumvention of anti-automation controls.
The cookie-fetching request separately sets Accept-Language to zh-CN,zh;q=0.9,en;q=0.8, again enforcing a specific locale. Because this behavior is repeated in request paths and not presented as an opt-in or documented requirement, it matches the locale policy concern.
The optional real-URL resolution performs extra per-result requests and parses redirect/JavaScript patterns to unmask final WeChat article URLs, extending the tool from metadata search into link-resolution/circumvention. That capability can bypass intermediary controls and increases scraping and tracking risk compared with simply returning search results.
The real-URL resolution flow sends requests with a fixed Chinese language preference, which forces a locale in another part of the skill. There is no visible mechanism for the user to choose a different locale or confirm that this region-specific behavior is intended.
The inline comment says the code checks redirects '不跟随重定向,直接获取Location', but the custom request function uses Node's https.request without any logic to disable or manage redirect following because https.request itself does not automatically expose followed redirect chains. In practice, this code only inspects whatever response it receives and the comment overstates the redirect-handling behavior.
No suspicious patterns detected.