Back to skill

Security audit

Web Novel Master

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent web-novel writing skill, but its file-writing workflow can escape the intended project folder if a project name contains path characters.

Install only if you want a Chinese web-novel workflow that creates and updates local project files. Before using it, keep projects in a disposable workspace or require the agent to sanitize project names, reject slashes, backslashes, absolute paths, and .. components, and confirm any write outside ./web-novels/. Use extra caution with Industrial mode because it can run multi-agent drafting without repeated confirmation.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
references/flows/Fast/Fast1_Idea_Clarify.md:35
Finding

Unsanitized User-Controlled Project Names Permit Filesystem Path Traversal

Content
View full analysis

Vulnerability Details

File Location: references/flows/Fast/Fast1_Idea_Clarify.md, lines 35-39
Additional Locations: references/flows/Pro/Pro3_Outline_Planning.md, lines 8-10; references/flows/Ind/Ind0_Project_Initialize.md, lines 23-25
Vulnerability Type: Path traversal through unsafe path construction
Risk Level: High

Vulnerable Instruction

The following is an English rendering of the complete vulnerable project-creation segment:

markdown
## 1.3 Create Project

Create `./web-novels/{timestamp}-{novel name}/`

Create a simplified `03-writing-plan.json`:

Equivalent path construction is prescribed in the Professional and Industrial workflows:

text
./web-novels/{YYYYMMDD-HHmmss}-{novel name}/
./web-novels/{YYYYMMDD-HHmmss}-{project name}/

Technical Analysis

The workflow instructs the Agent to interpolate a novel or project name into a filesystem path. The name originates from user-provided story information, but the Skill does not require validation, canonicalization, path-separator removal, or a containment check before creating directories and writing project files.

Characters such as / and \, as well as .. path components, can change the meaning of the constructed path. A timestamp prefix does not prevent traversal because an attacker can place a separator after an arbitrary name component and then provide enough parent-directory components to escape web-novels.

The issue applies to all three creation modes. Subsequent workflows trust the resulting project path when creating outlines, writing plans, chapter files, summaries, character databases, and release artifacts.

Attack Path

  1. An attacker requests creation of a novel and supplies a crafted title or project name such as story/../../../target.
  2. The Agent follows the documented path template and constructs a path resembling:
    text
    ./web-novels/20260916-120000-story/../../../tar
    

...[truncated 1209 chars]

Remediation
View remediation

Remediation Suggestions

  1. Treat every novel and project name as untrusted input.
  2. Generate a separate filesystem-safe identifier rather than using the display title directly.
  3. Apply a strict allowlist, such as Unicode letters, digits, spaces, hyphens, and underscores.
  4. Remove or reject /, \, null bytes, control characters, drive prefixes, absolute-path prefixes, and . or .. path components.
  5. Impose a reasonable maximum filename length.
  6. Resolve the canonical output root and candidate path before any operation.
  7. Verify that the resolved candidate remains a descendant of the canonical web-novels directory.
  8. Reject the operation if containment validation fails rather than silently modifying the name.
  9. Store the original display title only as metadata inside the project files.
  10. Apply the same validation to paths loaded from writing-plan JSON files because those files may be edited or corrupted.
  11. Require explicit user confirmation before writing anywhere outside the designated project root.
  12. Add tests covering traversal strings, absolute paths, Windows drive paths, mixed separators, encoded separators, and excessively long names.

A safe implementation should follow logic equivalent to:

python
root = Path("web-novels").resolve()
safe_name = sanitize_user_title(user_title)
candidate = (root / f"{timestamp}-{safe_name}").resolve()

if root not in candidate.parents:
    raise ValueError("Project path escapes the permitted output directory")
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (73)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose is an interactive novel-writing assistant, but the observed behavior suggests local file inspection and validation workflows that are materially different from the advertised function. This mismatch can mislead users into invoking a skill that accesses local content or performs analysis they did not expect, creating trust and data-handling risks.

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 description is written as an assertion in Chinese only and presents the assistant as a Chinese web-novel writing system, without indicating that users may choose another language. This is a natural-language policy concern because it imposes a specific language/locale by default rather than documenting user opt-in or alternatives.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill instructs the agent to read additional local markdown flow files, which implies file-read capability, but it does not declare any tool scope or permissions boundary. Undeclared file access increases the chance of overbroad data exposure and makes it harder for the platform or user to understand what the skill can access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill’s name, description, and trigger phrases are entirely in Chinese and present the workflow as implicitly Chinese-language, with no indication that users may choose another language. Under the policy, forcing a specific language without opt-in is a natural-language policy violation unless the locale constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad enough to match common writing requests, which can cause the skill to activate unintentionally in unrelated contexts. Unexpected invocation is risky because it may apply hidden workflow instructions or access supporting files without the user deliberately choosing this skill.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The file is entirely written as a Chinese-only skill description and checklist, including prescriptive content categories such as '男频' and '女频', without any indication that language choice is optional or that the skill is restricted to a Chinese-language context. Under the policy, forcing a specific language or locale without user opt-in is 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
96% confidence
Finding

The file title and all instructional content are written in Chinese, with no indication that the skill supports other languages or that Chinese-only operation is a justified regional constraint. Under the policy rule for natural-language violations, this constitutes forcing a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file is written entirely in Chinese and provides no indication that other languages are supported or that the user can choose their preferred language. Under the stated policy, forcing a specific language without opt-in is a natural-language policy violation unless the locale constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file is entirely written in Chinese and provides no indication that output language should follow the user's preference. In a general-purpose writing skill, this can override user intent or cause unexpected disclosure/operational issues in multilingual settings, though it is not directly a code-execution or data-exfiltration risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents all instructions and examples exclusively in Chinese, and nowhere indicates that the skill is region-specific or that users may opt into another language. Under the language/locale policy, forcing a single language without user choice can be 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
91% confidence
Finding

This markdown file is entirely written in Chinese and does not indicate that the user can choose another language or locale. Under the policy rule for natural-language violations, a skill that effectively constrains output or usage to a specific language without opt-in should be flagged unless the locale limitation is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire document is written in Chinese and provides no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking or region-specific context. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file normalizes coercive romance tropes, including explicitly non-consensual language such as '霸王硬上弓' and '你只能是我的', without any safety framing, consent guidance, or sensitive-content warning. In a writing-assistant skill, this can steer generated output toward romanticized abuse or non-consensual scenarios, increasing the chance of harmful content being produced for end users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The entire skill is written as a prescriptive Chinese writing-style guide and does not indicate that language choice is optional or configurable. Under the policy, forcing a specific language or locale without user opt-in is a natural-language policy concern unless the regional constraint is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The document content is presented in Chinese and describes the directory as writing-style reference material, but it does not indicate 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 locale 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 file content is entirely in Chinese and does not appear to provide any mechanism for adapting language or locale to user preference. In a general-purpose writing skill, forcing a single language can reduce usability, exclude users, and cause the agent to ignore explicit user language preferences, though it is not a direct security exploit.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The natural-language instructions and user-facing prompts are fully in Chinese, and the file does not indicate that this is a locale-specific skill or provide any opt-in or language selection. Under the stated policy, forcing a specific language without user choice is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill's headings, instructions, examples, and user-facing confirmation text are entirely in Chinese, with no indication that another language can be used or selected. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The title and mode description are written entirely in Chinese and present the drafting workflow as operating in Chinese by default. This imposes a specific language/locale without any opt-in or alternative, which matches the policy category for forced language choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The entire skill file is written only in Chinese and provides no indication that users may choose another language or that the workflow is intentionally limited to a Chinese-language context. Under the language/locale policy, this is a natural-language policy concern because it imposes a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The entire skill file is written as a mandatory Chinese-language workflow ('Fast 模式 - Phase 4:最终校验') with no indication that language is optional or selectable by the user. Under the policy for natural-language violations, a skill that effectively forces a specific language without opt-in should be flagged unless the locale restriction is clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file presents all user-facing instructions, options, and confirmations only in Chinese, which can force a specific language on users without opt-in. The content does not indicate that language selection is optional or that this is a documented region-specific constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file is entirely written in Chinese and requires generation of a Chinese-named output file and Chinese report sections, which effectively constrains the skill to a specific language/locale. The policy allows locale constraints only when user choice is offered or the restriction is clearly documented and justified, neither of which appears here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This markdown skill flow presents all prompts, options, and instructions exclusively in Chinese. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is explicitly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file presents the mode, instructions, and required outputs entirely in Chinese and gives no indication that users may choose another language. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation unless the locale limitation is explicitly justified.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.