T01 · Skill Instruction Hijacking
- Location
patterns/article-pattern.md:85- Finding
Mandatory Promotional Footer and QR Code Hijack Generated Articles
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill mostly matches a WeChat tutorial publishing workflow, but it handles publishing credentials, personal contact data, uploads, and a writable local web server in ways that need careful review before use.
Review and modify this skill before installing. Do not store WeChat AppSecret in the skill directory or TOOLS.md; use a proper secret store or short-lived environment injection. Run the helper server only on loopback with authentication or a per-session token, add upload limits and file validation, remove the mandatory personal QR/contact footer unless explicitly approved for each article, and avoid the automatic global npm install path.
patterns/article-pattern.md:85Mandatory Promotional Footer and QR Code Hijack Generated Articles
scripts/publish-scripts/publish.sh:33Insecure Persistent Handling of WeChat API Credentials
scripts/server.js:19Unauthenticated Writable HTTP Service with Unrestricted CORS
scripts/server.js:44Unbounded and Insufficiently Validated File Uploads
scripts/public/index.html:278DOM-Based Script Injection Through Uploaded Filenames
scripts/publish-scripts/publish.sh:17Automatic Unpinned Global Installation of Publishing Dependency
The skill claims to write and publish tutorial content, but also directs collection and persistent storage of personal info, images, structured step data, and operation of a local web server. These additional data-handling and service-exposure behaviors increase privacy and attack-surface risks beyond what a simple editorial workflow implies.
The skill claims to write and publish tutorial content, but also directs collection and persistent storage of personal info, images, structured step data, and operation of a local web server. These additional data-handling and service-exposure behaviors increase privacy and attack-surface risks beyond what a simple editorial workflow implies.
The skill claims to write and publish tutorial content, but also directs collection and persistent storage of personal info, images, structured step data, and operation of a local web server. These additional data-handling and service-exposure behaviors increase privacy and attack-surface risks beyond what a simple editorial workflow implies.
Referenced artifact was not completely inspected
2. 启动服务器,打开[./scripts/public/index.html](http://localhost:3000/index.html)页面,用户将步骤数据填写到页面中并保存。
The instructions tell the agent to store AppId and AppSecret locally without a user-facing security warning, normalization of risk, or safe storage requirements. Because these credentials can authorize WeChat API actions, insecure local storage materially increases the chance of account compromise and unauthorized publishing operations.
This is a direct instruction to collect, retain, and later reuse sensitive AppId/AppSecret credentials, creating persistent credential handling behavior in natural-language workflow instructions. The context makes it more dangerous because the skill is framed as content publishing, so users may not expect long-term credential retention or local secret management in the workspace.
brace-expansion 5.0.4 is flagged for multiple denial-of-service issues involving pathological brace patterns that can trigger excessive CPU or memory consumption. Although this package is only present as a dev dependency path here, exploiting it can still affect developer or CI environments that process attacker-influenced glob patterns.
multer 1.4.5-lts.2 is explicitly deprecated in the lockfile with a note that Multer 1.x is affected by multiple vulnerabilities fixed in 2.x. Since this skill appears to include an Express stack and file upload handling, a vulnerable multipart parser is directly exposed to remote user input and can enable denial of service or other malformed-upload abuse.
path-to-regexp 0.1.12 is a long-lived Express dependency version associated with regular-expression denial-of-service risk in route matching. If route patterns are complex or attacker-controlled paths are repeatedly submitted, the service can spend excessive CPU time matching requests, degrading availability.
picomatch 2.3.1 is present only through development tooling in this lockfile and is flagged for glob-matching issues including ReDoS and incorrect matching behavior. That makes it a real dependency risk, but primarily to local development or CI workflows rather than the production attack surface of the skill itself.
The manifest includes multer 1.4.5-lts.1, and the static finding indicates the multer 1.x line has multiple known DoS-related advisories. In a server-side upload-handling component, a vulnerable multipart parser can let attackers send crafted requests that exhaust memory or otherwise disrupt service availability, which is especially relevant if this skill exposes a local or network-accessible step collector service.
The description requires producing tutorial-style WeChat articles in a specific Chinese publishing context and frames the skill around a fixed writing style, but it does not indicate that the user may choose another language or locale. This can be a natural-language policy issue when a skill implicitly forces a language without opt-in.
The skill directs collection and storage of personal profile information and images in local assets, which creates persistent handling of potentially sensitive personal data. In the context of a publishing workflow this may be functionally relevant, but absent minimization, consent, and retention controls it still presents unnecessary privacy and leakage risk.
The skill describes automatic conversion, image upload, and draft publishing to external services without a clear user-facing warning that article content and images will leave the local environment. This matters because users may provide unpublished content, proprietary screenshots, or personal images without understanding the external transmission.
The documentation accesses a separate workspace file containing API credentials, which is a sensitive local source unrelated to ordinary article editing. Pulling secrets from a general workspace file creates unnecessary coupling and broadens the impact of compromise or accidental disclosure.
The skill tells the operator to store AppId/AppSecret locally for later reuse and to decrypt them later, introducing credential lifecycle management not justified by the stated purpose. Even if meant for convenience, local persistence of secrets increases the chance of credential theft, accidental disclosure, or reuse outside the user’s expectations.
The suggested trigger phrase "帮我发布这篇文章到微信公众号" is a natural, everyday request rather than a narrowly scoped command, and the document does not define stricter activation constraints or exclusion examples. In a markdown skill description, this can create ambiguity about when the skill should activate versus when the user is merely discussing publishing.
The step descriptions are written only in Chinese (e.g. installation and agent-creation instructions) with no indication that the skill supports other languages or that Chinese is required for a region-specific use case. This can violate language/locale policy when a skill implicitly forces one language without user opt-in.
The template explicitly instructs authors to publish a personal contact invitation alongside a personal WeChat QR code, which encourages disclosure of personally identifying contact information to a broad audience without any consent, privacy, or abuse-handling guidance. In the context of a one-click WeChat article publishing skill, this is more dangerous because the pattern can be repeatedly and automatically propagated into published content, increasing the risk of harassment, spam, scraping, and unintended personal exposure.
This HTML/JavaScript code performs a POST request to /api/save-steps containing the cover image, step images, and step descriptions. Although the UI asks for confirmation to save, it does not disclose that local files and user-entered content will be transmitted to a server, which is a safety-relevant operation for code files under this rule.
The document declares lang="zh-CN" and all visible UI text is presented only in Simplified Chinese. This imposes a specific language on all users without any opt-in, alternative locale, or documented region-specific justification, which matches the language/locale policy violation criteria.
This page collects personal data, including a nickname, free-form profile text, and an uploaded image/WeChat QR code, even though the skill is described as a tutorial-writing and WeChat draft publishing tool. That creates an unjustified personal-information collection path and increases privacy, compliance, and misuse risk, especially because the data is submitted to a backend endpoint without any visible purpose limitation, consent notice, or retention details.
The requested profile text and QR code image are sensitive user-provided identifiers that are not clearly necessary for editing or publishing tutorial articles to a WeChat draft box. Collecting them without strong contextual justification can enable unnecessary profiling, social-contact harvesting, or later misuse of identity/contact artifacts.
The script automatically installs a global npm package if wenyan is missing, which performs a networked system modification as a side effect before the user explicitly approves it. This creates supply-chain and environment-integrity risk, especially in automation or shared developer environments, because a publishing helper should not silently alter the host by fetching and executing code from npm.
The script publishes content to the WeChat draft box immediately after basic checks, with no confirmation or dry-run step before the external action. In a content-generation skill, this increases the chance of unintended publication of wrong, unreviewed, or adversarially generated material to an external platform tied to real credentials.
No suspicious patterns detected.