Back to skill

Security audit

微信公众号文章自动化写作

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a WeChat article-writing skill, but it stores drafts, delegates work to unpinned helper skills, and can rewrite its own skill files.

Review before installing. Use it only if you are comfortable with local draft archives, web research, and helper-skill delegation. Require explicit user approval before Step 8 modifies any skill/reference file, and consider pinning or disabling the external helper skills for sensitive drafts. Treat Docker/API commands in assets as writing examples, not vetted operational guidance.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:81
Finding

Mandatory Invocation of Unpinned External Skills

Content
View full analysis

Vulnerability Details

File Locations:

  • SKILL.md:81
  • SKILL.md:138
  • SKILL.md:234
  • references/quality.md:23

Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code Snippets

From SKILL.md:81:

markdown
- 若触发深度研究:优先调用 `deep-research-pro` 生成多源研究摘要,来源建议 10-25 条,并在正文关键断言处写明来源链接

From SKILL.md:138:

markdown
触发后:先调用 `deep-research-pro` 产出多源研究报告,保存到 `01_research.md`(包含来源链接清单与关键信息),再进入下方的常规搜索与选题流程。

From SKILL.md:234:

markdown
- 先调用 `content-humanizer-zh` 对 `04_draft.md` 做一轮人味化改写,再进入手工审校

From references/quality.md:23:

markdown
- [ ] 去 AI 味:先调用 `content-humanizer-zh` 做一轮人味化改写,再手工替换 AI 腔套话

Technical Analysis

The Skill delegates parts of its workflow to two external Skills, deep-research-pro and content-humanizer-zh. Their source, immutable version, integrity hash, publisher identity, permission boundaries, and data-handling behavior are not defined by the audited project.

The calls are mandatory when their corresponding workflow conditions are met. In particular, content-humanizer-zh is instructed to process 04_draft.md, which may contain unpublished or user-provided material. The invoking Agent must therefore trust dependency-controlled instructions while also exposing draft content to the dependency.

This creates a supply-chain trust boundary that cannot be verified from the repository. Name collision, dependency replacement, account compromise, or a malicious dependency update could cause the Agent to execute instructions that were absent during this audit. No evidence establishes that either named dependency is currently malicious; the vulnerability is the unpinned and unverified delegation mechanism.

Attack Path

  1. An attacker publishes, replaces, or compromises a Skill available under the name deep-research-pro or content-humanizer-zh.
  2. A user invokes a workflow involving deep research or article review.
  3. The audited Skill instructs the Agent ...[truncated 1303 chars]
Remediation
View remediation

Remediation Suggestions

  1. Vendor the required dependency instructions into the project and audit them with the main Skill.
  2. If external dependencies remain necessary, pin each one to an immutable version, revision, or cryptographic digest.
  3. Verify publisher identity and dependency integrity before every invocation.
  4. Define an explicit capability policy for each dependency:
    • Permit only the specific input file or research query required.
    • Deny access to unrelated workspace files and credentials.
    • Disable shell execution unless it is demonstrably necessary.
    • Restrict network access to an allowlist where feasible.
    • Limit writes to a dedicated per-run directory.
  5. Require explicit user consent before sending unpublished drafts to an external Skill.
  6. Treat dependency output as untrusted data rather than authoritative instructions. Do not permit it to override system, user, or parent-Skill constraints.
  7. Add a local fallback that performs research summarization or language editing without invoking external Skills.
  8. Record the dependency version, permissions, input files, and output files in each run log to support review and incident response.
  9. Document retention and deletion controls for 04_draft.md, research files, and other potentially sensitive artifacts.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (32)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The documented Step 8 explicitly permits modifying references/style.md, references/structures.md, references/quality.md, and potentially SKILL.md itself. A skill that can rewrite its own rules or prompts can persist untrusted instructions across runs, enabling prompt injection persistence, policy drift, and unauthorized capability expansion.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · assets/在笔记本电脑上-实现本地知识库和大模型检索增强生成-RAG.md (reported line 58)May include surrounding context.

bash
export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
  --cap-add SYS_ADMIN \
  -v ${STORAGE_LOCATION}:/app/server/storage \

Privileged Container / Container Escape

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

The Docker command grants SYS_ADMIN, a highly privileged Linux capability frequently described as effectively root-like within containers. If the containerized application or image is compromised, this materially increases the chance of host-impacting actions, filesystem abuse, or container escape techniques.

Content

Scanner excerpt · assets/在笔记本电脑上-实现本地知识库和大模型检索增强生成-RAG.md (reported line 60)May include surrounding context.

md
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
  --cap-add SYS_ADMIN \
  -v ${STORAGE_LOCATION}:/app/server/storage \
  -v ${STORAGE_LOCATION}/.env:/app/server/.env \
  -e STORAGE_DIR="/app/server/storage" \

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · assets/在笔记本电脑上-实现本地知识库和大模型检索增强生成-RAG.md (reported line 62)May include surrounding context.

docker run -d -p 3001:3001
--cap-add SYS_ADMIN
-v ${STORAGE_LOCATION}:/app/server/storage
-v ${STORAGE_LOCATION}/.env:/app/server/.env
-e STORAGE_DIR="/app/server/storage"
mintplexlabs/anythingllm:master

text

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The description says the skill should be called whenever a user wants to write a WeChat article, brainstorm topics, revise drafts, or proofread, but it does not define clear trigger phrases or exclusion conditions. This broad natural-language activation scope could cause unintended invocation for generic writing-help requests.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is defined specifically as writing WeChat public-account articles in a particular Chinese style, and the document does not offer any option for the user to choose another language or locale. Under the language/locale policy, forcing a specific language without user opt-in is a natural-language policy issue.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill goes beyond article generation into persistent archival and self-update workflows, expanding its authority from content assistance to local state management. That increases the attack surface by allowing user content, fetched material, and derived outputs to be retained and reused in ways not implied by the skill’s stated purpose.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill mandates publication/archive management and saving outputs to specific local paths, which is broader than ordinary writing assistance. This creates unnecessary data retention and filesystem side effects that may expose sensitive drafts, research, or user-provided content.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill requires persistent file writes for final outputs without any user-facing notice that content will be stored locally. Silent retention of generated and user-provided material can violate user expectations, leak sensitive business drafts, and create compliance/privacy issues.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill mandates storing intermediate research, drafts, and edits, including fetched web material and user content, across multiple files and runs. Retaining these artifacts increases exposure of confidential prompts, unpublished articles, and potentially copyrighted or sensitive source material.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The text states that the instruction manual for a skill is written using natural language in Markdown, then presents the entire guidance exclusively in Chinese as the normative way to create and use skills. Because the file does not mention multilingual support, user choice, or that the language is merely an example, it can be read as imposing a specific language/locale without opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document instructs users to configure third-party LLM API keys and use remote model providers, but it does not warn that prompts, queries, and potentially retrieved knowledge-base content may be transmitted to those external services. In a local-knowledge-base/RAG context, this omission can mislead users into believing their data remains local, creating a privacy and data-governance risk if sensitive documents are queried through remote APIs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The upload instructions describe adding PDFs, DOCX, PPTX, and URLs into the knowledge base without warning that, if remote APIs are configured, extracted content or retrieval results may later be sent to external model providers during answering. Because the article emphasizes local deployment and local storage, the missing warning increases the chance that users will upload sensitive material under a mistaken assumption that processing is fully local.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The article instructs users to run a third-party container image using the mutable ':main' tag, which can change over time and cause users to execute unreviewed code. Because the command also mounts persistent storage and configures host access, a compromised or malicious future image could access model data, application state, or services reachable through the host gateway.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The article states that AnythingLLM can use external model APIs such as OpenAI, Gemini, and Mistral, but it does not warn that prompts, retrieved document chunks, or metadata from a local knowledge base may be transmitted to third-party services when those providers are selected. In a skill about building local RAG systems, that omission is security-relevant because readers may assume all data remains on-device.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The Docker example pulls and runs an image referenced only by a mutable tag (mintplexlabs/anythingllm:master) and the finding points to the docker run -d invocation that executes it. Mutable tags can change over time, so readers may unknowingly run different or compromised code than the article originally intended, which is a software supply-chain risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file materially exceeds the declared purpose of a WeChat writing skill by embedding a full RAG stack with Elasticsearch, MongoDB, web ingestion, local model setup, and a Streamlit UI. This expands the attack surface and enables network access, storage, and retrieval behaviors that are unnecessary for article writing, making misuse or accidental data exposure more plausible in a skill users would not expect to have such capabilities.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The code teaches deployment of backend services and data stores unrelated to the stated writing-assistant purpose, including Elasticsearch and MongoDB setup. In skill context, this is dangerous because it normalizes running infrastructure and persistence layers under a benign writing label, which can conceal unexpected data collection, retention, or service exposure risks.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill includes external web fetching via SimpleWebPageReader, which is outside the expected scope of公众号写作/选题/改稿 and introduces remote-content ingestion. This can expose the runtime to untrusted content, unexpected network egress, privacy issues, and prompt/data poisoning risks if fetched content later influences generated output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
79% confidence
Finding

The entire skill content is presented only in Chinese, including the title, instructions, and source reference, with no indication that users can choose another language or locale. Under the stated policy, forcing a specific language without documented opt-in can constitute a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The checklist says '中文标点,不用英文标点', which imposes a specific locale/style requirement in natural language. The document does not indicate that this is optional, user-selected, or limited to a clearly documented region-specific use case.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger examples are broad enough to match generic writing-assistance requests such as article drafting, editing, and topic selection, which can cause the skill to activate outside its intended WeChat-publication niche. Over-broad activation increases the chance of inappropriate tool invocation, unnecessary web access, and application of domain-specific instructions to unrelated user tasks.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file hard-codes a Chinese/WeChat公众号 writing context as the default operating mode, which can steer outputs away from a user's actual request if the caller did not explicitly opt into that domain. In an agent setting, this is a scope-control problem: the skill may override user intent, bias language/channel selection, and cause unintended disclosure or misrouting of content into a platform-specific format.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file is entirely a Chinese writing-style specification for公众号 content and repeatedly uses mandatory language such as '必须' and Chinese-specific punctuation/style rules, but does not offer any user choice of language or locale. Under the policy, forcing a specific language without opt-in is a natural-language locale violation unless the constraint is clearly documented as region-specific and justified.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.