T09 · Insecure Skill Coding Practices
- Location
scripts/fetch-url.js:14- Finding
Incomplete SSRF Protection Allows Access to Internal and Cloud Metadata Services
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This fact-checking skill is mostly coherent, but its local browser URL fetcher has under-scoped SSRF protections and its social-reply guidance includes covert or evasive persuasion patterns.
Install only if you are comfortable with a skill that may launch a local browser against user-provided URLs. Avoid using it on untrusted links in cloud, corporate, or private-network environments unless network egress blocks metadata and internal addresses. Treat its social reply templates carefully and prefer transparent corrections that do not hide known falsehoods.
scripts/fetch-url.js:14Incomplete SSRF Protection Allows Access to Internal and Cloud Metadata Services
The code does not implement factual verification, rumor debunking, evidence comparison, or response generation. Its actual role is limited to fetching and extracting text from a public web page using Playwright, with anti-scraping-friendly behavior and SSRF protections. While URL fetching could be a supporting component of a fact-checking system, this chunk by itself materially differs from the declared end-user purpose because it only retrieves webpage text and does not perform the claimed fact-checking tasks or support the full declared input modalities.
The manifest description is entirely Chinese and defines the skill as a fact-checking tool without stating that Chinese is optional or limited to a region-specific use case. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.
The fixed output format requires Chinese field labels such as '论点', '结论', '查证', and '真相', which constrains responses to a specific language. The file does not offer a language choice or state a justified locale limitation.
The skill goes beyond neutral fact-checking and explicitly instructs generation of persuasive social replies, including modes that can flatter, evade, or soften correction. That creates a misuse path where the tool can help users manipulate recipients or obscure falsehoods instead of clearly communicating verified facts.
The workflow explicitly teaches the model to build rapport and then covertly steer the recipient 'without obvious correction,' which is a social-engineering pattern. Even in a fact-checking context, instructing hidden persuasion rather than transparent correction can facilitate deceptive interpersonal influence and misuse in sensitive conversations.
The 'flattering' mode specifically tells the model to praise the sharer while obscuring or skipping false portions, which directly supports deceptive communication. In context, this undermines the stated debunking purpose and can be exploited to launder misinformation through socially optimized replies.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The code hard-codes locale: 'zh-CN' for all browsing sessions, which imposes a specific language/locale choice on users. Under the policy, locale constraints should either be optional, user-selectable, or clearly justified as region-specific behavior.
The manifest uses a caret range for Playwright, which does not fully pin the resolved package version and can allow unexpected dependency changes across installs. This weakens build reproducibility and can expose the project to newly introduced vulnerable or malicious releases in the allowed semver range.
{
"devDependencies": {
"playwright": "^1.59.1"
}
}
The project depends on Playwright, which has a known advisory related to downloading browser binaries without authenticity verification, and the manifest does not pin the exact version. Because the actual installed version cannot be determined from this file alone, there is a credible supply-chain risk that an affected release could be installed or that vulnerable behavior remains present.
No suspicious patterns detected.