Back to skill

Security audit

Writing Proofreading

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Chinese article proofreading skill with disclosed optional linting commands, but users should avoid running the unpinned npx setup and autofix commands without review.

Install this if you want a Chinese article proofreading workflow. Before running its Markdown lint steps, prefer a pinned or lockfile-managed markdownlint-cli2 version, review any --fix changes, and treat the external `npx skills add niracler/skill` setup command as code from outside this artifact.

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:12
Finding
Unpinned Third-Party Packages Executed Through npx<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:12-15` and `SKILL.md:100-101` **Vulnerability Type**: Unpinned third-party dependency execution **Risk Level**: Medium ### Vulnerable Code ```markdown | markdownlint-cli2 | cli | No | `npx markdownlint-cli2` (no install needed, used in step 6) | | markdown-lint | skill | No | Included in `npx skills add niracler/skill` (for repo setup) | ``` ```bash npx markdownlint-cli2 article.md npx markdownlint-cli2 --fix article.md ``` ### Technical Analysis The documented commands execute third-party packages through `npx` without pinning an exact package version or verifying package integrity. If the package is not already available locally, `npx` may retrieve it from the configured package registry and immediately execute it. Consequently, the code that runs can change after this skill has been reviewed. A compromised package release, registry account, dependency, or package-resolution configuration could cause arbitrary attacker-controlled code to run. The external `niracler/skill` component is also not included in this project, so its contents and transitive dependencies were outside the audit scope. The `--fix` command legitimately modifies the supplied article, but a malicious package would not be restricted to that file and could access any resources available to the invoking process. ### Attack Path 1. An attacker compromises a referenced package, one of its dependencies, its publisher account, or the package source selected by the victim's registry configuration. 2. The attacker publishes a malicious version or otherwise causes the unpinned package name to resolve to attacker-controlled content. 3. A user or agent follows the skill instructions and runs `npx markdownlint-cli2`, `npx markdownlint-cli2 --fix article.md`, or the external skill setup command. 4. `npx` downloads the unresolved package and may run installation lifecycle scripts or the package executable. 5. The malicious code exec ...[truncated 817 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every package to an exact reviewed version, for example: ```bash npx --yes markdownlint-cli2@REVIEWED_VERSION article.md npx --yes markdownlint-cli2@REVIEWED_VERSION --fix article.md ``` 2. Prefer declaring the package in a reviewed project manifest and committing the associated lockfile with integrity hashes. Execute the locked local binary rather than resolving the latest package dynamically. 3. Install dependencies in a controlled setup phase using a lockfile-enforcing command such as `npm ci`, then run: ```bash npx --no-install markdownlint-cli2 article.md ``` This prevents `npx` from silently downloading a missing package at invocation time. 4. Review transitive dependencies and use trusted registry configuration. Where operationally practical, disable dependency lifecycle scripts during installation. 5. Replace the dynamically retrieved external skill with a vendored and audited copy, or reference an immutable, verified revision. 6. Require explicit user confirmation before downloading dependencies, executing third-party tools, or applying `--fix`. 7. Run the linting tool in a restricted environment with minimal filesystem permissions, no unnecessary credentials, and limited network access. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Vague Triggers

Medium
Confidence
93% confidence
Finding
The description lists triggers such as 「检查一下」, 「帮我改改」, and 「看看文章」, which are common conversational phrases and not narrowly scoped to this specific skill. Without exclusions or tighter context, these phrases may overlap with ordinary user requests and activate the skill unintentionally.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The skill is described as helping refine Chinese articles and the guidance throughout the file is written as a Chinese-only workflow, but there is no opt-in or explicit statement that the skill is limited to Chinese content for a justified regional or compliance reason. This can violate language/locale policy when users have not chosen that constraint.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The skill recommends executing `npx markdownlint-cli2` without pinning a specific package version. `npx` may fetch the latest package at runtime, which creates a supply-chain risk: a compromised upstream release or unexpected breaking change could cause unreviewed code execution on the user's machine.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding
The instruction `npx skills add niracler/skill` references an unpinned package/tool invocation that may download and run code dynamically. This exposes users to the same supply-chain and integrity risks as other unpinned `npx` usage, especially because it appears in setup guidance that users may execute verbatim.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
This command again instructs users to run `npx markdownlint-cli2` without version pinning during the review workflow. Because the command is positioned as routine operational guidance, it increases the chance that users will execute transient, unreviewed package code directly from the registry.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The `--fix` variant has the same unpinned `npx` risk, with additional integrity concerns because it modifies files automatically after fetching package code at runtime. If an upstream package were compromised, the attack could both execute code and alter repository contents.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
This markdown file is entirely framed as a prescriptive Chinese writing standard, using directive language such as '中文写作规范' and repeated instructions on how text should be written. Because it imposes a specific language/locale style without indicating that the user can choose another language or opt in, it conflicts with the policy against forcing a specific language without user choice.

Natural-Language Policy Violations

Medium
Confidence
86% confidence
Finding
The document title and all guidance are written as a personal style specification in Chinese, indicating the skill is expected to produce content in that language. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern unless the locale constraint is explicitly justified or optional.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
This markdown file contains user-facing procedural instructions exclusively in Chinese, and there is no note that users may choose another language or locale. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Whitespace Padding

Medium
Category
Prompt Injection
Content
### 3. 科普内容要精简

| 写法                                                                                          | 评价                 |
| --------------------------------------------------------------------------------------------- | -------------------- |
| ❌「日本《建筑基准法》规定特定建筑必须每 3 年进行一次外墙小型检查,每 10 年进行一次全面检查」 | 像教科书             |
| ✅「日本有规定建筑必须定期检查和维护外墙」                                                    | 精简,详细信息放脚注 |
Confidence
70% confidence
Finding
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The entire skill instruction set is written in Chinese and defines review workflow, reader personas, and outputs only in that language, with no indication that users may choose another language. This can violate language/locale policy when a skill implicitly requires a specific language without explicit opt-in or a documented region-specific reason.

Static analysis

No suspicious patterns detected.