Back to skill

Security audit

Html To Markdown

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent HTML-to-Markdown wrapper, but it depends on mutable external npm code and includes URL fetching and file-writing workflows that need careful review.

Install only if you are comfortable running the external npm package it delegates to. Prefer a local, pinned install over the documented global versionless install, review URLs before using webpage conversion, and choose output paths carefully to avoid overwriting important files.

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:8
Finding
Unpinned and Unauditable Third-Party npm Dependency<![CDATA[ ## Vulnerability Details **File Locations**: - `SKILL.md:8` - `SKILL.md:52-56` - `references/quick-start.md:7` - `references/quick-start.md:13` **Vulnerability Type**: Supply-chain exposure through an unpinned external dependency **Risk Level**: Medium ### Vulnerable Code Snippets `SKILL.md:8`: ```yaml requires: - npm: "@siping/html-to-markdown-node@^1.0.1" ``` `SKILL.md:52-56`: ```bash # Install the npm package globally npm install -g @siping/html-to-markdown-node # Or install it in a project npm install @siping/html-to-markdown-node ``` `references/quick-start.md:7`: ```bash npm install -g @siping/html-to-markdown-node ``` `references/quick-start.md:13`: ```bash npm install ``` ### Technical Analysis The Skill does not contain the executable HTML-to-Markdown implementation. Instead, all runtime behavior is delegated to the external `@siping/html-to-markdown-node` npm package. The dependency declaration uses the mutable semantic-version range `^1.0.1`, while the installation commands omit a version entirely. Consequently, installation can resolve to package code that was not present during this audit. The project also provides no package lockfile or integrity hash with which to verify the exact downloaded artifact. npm installation may execute package lifecycle scripts, such as `preinstall`, `install`, or `postinstall`, with the permissions of the user running npm. The globally scoped installation command increases exposure because it installs files into the user's or system's global npm environment. No evidence was found that the currently referenced package is malicious. The vulnerability is the inability to ensure that future installations retrieve the same reviewed implementation. The quick-start documentation also instructs users to run `npm install` after cloning the repository, although the audited artifact contains no `package.json`. This creates an additional provenance and reproducibility inconsistency. ### Attack Path 1 ...[truncated 1679 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the dependency to an exact reviewed version rather than a caret range: ```yaml requires: - npm: "@siping/html-to-markdown-node@1.0.1" ``` 2. Update all installation examples to use the same exact version: ```bash npm install --save-exact @siping/html-to-markdown-node@1.0.1 ``` 3. Avoid global installation. Install the package locally in a dedicated, least-privileged project environment and invoke it through a controlled local entry point. 4. Add and commit a valid `package.json` and lockfile, such as `package-lock.json`, so npm can verify resolved versions and integrity hashes. Use `npm ci` for reproducible installation. 5. Audit the external package implementation and its transitive dependencies before release. Record the reviewed package version and artifact integrity hash. 6. Consider vendoring the minimal implementation into the Skill so the code executed by the Agent is included in the reviewed artifact. 7. Where compatible with the package, suppress dependency lifecycle scripts during installation: ```bash npm ci --ignore-scripts ``` If lifecycle scripts are required, inspect and explicitly document them before permitting execution. 8. Remove or correct the unsupported `npm install` instruction in `references/quick-start.md` unless the repository is updated to include the required npm manifest and lockfile. 9. Add automated dependency monitoring and require a fresh security review before changing the pinned dependency version. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly supports fetching and converting content from arbitrary URLs, but it does not warn users that this causes outbound network access to remote hosts. In an agent context, that omission is security-relevant because users may unknowingly trigger requests to attacker-controlled or internal endpoints, increasing the risk of SSRF-like access, metadata exposure, or unintended data transfer.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The file-conversion workflow describes writing Markdown output to a user-specified path, but it does not warn that this can modify files on disk. In an agent-driven environment, missing this warning can lead to accidental overwrites, writes to sensitive locations, or unreviewed bulk file changes that affect user data integrity.

Natural-Language Policy Violations

Medium
Confidence
77% confidence
Finding
The entire API document is presented only in Chinese, with no indication that language selection is optional or that the locale restriction is intentional and justified. Under SQP-3, forcing a specific language without user opt-in can be a natural-language policy violation.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The file forces a specific language for all user-facing instructions and examples, and there is no opt-in or note that the skill is intended only for Chinese-speaking users. Under the language/locale policy rule, this is a natural-language policy issue unless the locale restriction is explicitly justified or users are given a choice.

Vague Triggers

Medium
Confidence
88% confidence
Finding
This markdown file describes invocation behavior, so vague-trigger checks apply. The phrase '自动识别以下场景' plus broad examples like converting HTML or fetching a webpage does not clarify when the skill should not activate, which can lead to unintended invocation from similar everyday requests.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The manifest description and the operational guidance throughout the file are presented entirely in Chinese, with no indication that the user can choose another language or that the skill is intentionally region-specific. Under SQP-3, forcing a specific language without user opt-in can be a policy concern.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The `convert-url` section explains that the command fetches a URL and converts it to Markdown, but it does not include any warning about making outbound network requests or retrieving remote content. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect privacy or system integrity.

Static analysis

No suspicious patterns detected.