Back to skill

Security audit

Md To Share

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it claims, but it renders Markdown as live browser content and downloads browser components during install, so users should review it before installing.

Install only if you are comfortable with a Node/Playwright tool that downloads Chromium during setup and opens Markdown in a headless browser. Avoid converting untrusted Markdown unless network access is blocked or the HTML is sanitized, and review files before using any option that sends generated images to a platform.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
md2img.mjs:609
Finding

Untrusted Markdown Is Rendered as Active HTML with Network Access in an Unsandboxed Browser

Content
View full analysis
``` This creates a blind server-side re ...[truncated 2619 chars]
Remediation
View remediation
{ const url = new URL(route.request().url()); if (url.protocol === 'about:' || url.protocol === 'data:') { return route.continue(); } return route.abort(); }); ``` 4. If remote images are a required feature: - Require an explicit option to enable them. - Permit only HTTPS. - Use an explicit hostname allowlist. - Resolve hostnames and reject loopback, private, link-local, multicast, and reserved addresses. - Revalidate destinations after redirects and DNS resolution. - Apply response-size and download-time limits. 5. Remove `--no-sandbox` and `--disable-setuid-sandbox` wherever the deployment environment supports Chromium sandboxing. 6. Apply resource limits: - Maximum Markdown input size. - Maximum rendered page height. - Maximum number of embedded resources. - Strict navigation and request timeouts. - Browser process memory and CPU limits. 7. Add security tests using Markdown containing scripts, event handlers, localhost images, private-network URLs, and cloud metadata URLs. Confirm that scripts do not execute and network requests are blocked. ]]>

T08 · Insecure Dependencies

Warning
Location
package.json:11
Finding

Unpinned Dependencies and Automatic Install-Time Chromium Download Reduce Supply-Chain Integrity

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (20)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

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 file presents the skill investigation report entirely in Chinese, starting from the title, with no indication that the language is optional or that the skill/report is intentionally limited to a Chinese-speaking context. The policy for natural-language content requires flagging language or locale constraints when they are imposed without user opt-in or clear justification.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill documents environment-variable based auto-detection and behavior changes, but it declares no explicit tool scope or permission boundaries. In an agent ecosystem, undocumented access to environment context can cause unintended data exposure or capability expansion, especially if agents treat skills as least-privilege by default.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger guidance includes broad phrases like 'forward', 'convert to image', and 'share', which overlap with common user intents and may cause the agent to invoke the skill unexpectedly. Over-broad activation can lead to unnecessary file processing, unintended data transformation, or sending content to external platforms without sufficiently explicit user confirmation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

The instruction to run 'npx playwright install chromium' relies on an unpinned package resolution path. If executed in an untrusted or drifted environment, this can fetch an unexpected Playwright version or malicious dependency content, undermining supply-chain integrity.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

This guidance again references 'npx playwright' without version pinning, creating a repeatable supply-chain risk. Security-sensitive agent workflows should avoid dynamic package execution because behavior may change over time or be hijacked through dependency confusion or registry compromise.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

The troubleshooting step uses an unpinned 'npx playwright' command, which introduces the same package-resolution risk as elsewhere in the file. Recommending dynamic execution in skill docs is especially risky because agents or users may run it verbatim.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script converts untrusted Markdown to HTML with marked and loads it into a real Chromium page using page.setContent(..., { waitUntil: 'networkidle' }). Because the generated HTML permits tags such as img and links, attacker-controlled Markdown can cause the headless browser to issue external requests, enabling SSRF-like access to internal services, data exfiltration via request metadata, or privacy leaks in agent environments that may have network reachability the user does not expect.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The postinstall script invokes npx playwright install chromium, which can resolve and execute package code at install time if the package is not already present in a trusted local dependency context. Install-time execution is especially risky for AI-agent consumable skills because dependency installation may happen automatically in unattended environments, increasing supply-chain exposure and allowing unexpected code execution during setup.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
64% confidence
Finding

The README exposes only Chinese and English presentation paths, which may imply a fixed language policy rather than an explicit user-selected locale flow. Because locale handling is a policy-sensitive area, the documentation should make clear that language selection is optional and user-driven.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This markdown file documents a command that writes output files to user-specified paths, but it does not warn users that running the command will create or overwrite image files on disk. Under the markdown-specific warning criteria, behaviors affecting user data should be disclosed clearly.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The example says to use the skill when a user says 'share this to WeChat' or 'make it easy to forward', which is still ambiguous and may capture requests that do not clearly authorize Markdown conversion. While less severe than the main trigger list, it reinforces permissive invocation patterns that can cause unintended use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The code consumes environment variables such as MD2IMG_TIMEOUT and CHROME_PATH, and CHROME_PATH changes which executable is launched. While this is documented in help text, there is no explicit warning that runtime behavior can be influenced by environment settings, including launching a browser binary from an environment-provided path.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This is a manifest file, so vague-trigger checks apply. The description says the tool is 'Designed for AI Agents' but does not specify when an agent should invoke it, what user intents should trigger it, or any exclusions, making invocation scope overly broad and ambiguous in agent environments.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
84% confidence
Finding

The dependency marked is specified with a caret range, allowing newer semver-compatible releases to be installed over time. In an agent-executed skill, this weakens reproducibility and can pull in unexpectedly vulnerable or compromised dependency versions, creating a supply-chain risk even if no specific exploit is proven here.

Content

Scanner excerpt · package.json (reported line 18)May include surrounding context.

json
"author": "DT.acheng",
  "license": "MIT",
  "dependencies": {
    "marked": "^17.0.4",
    "playwright": "^1.52.0"
  }
}

Unverifiable Dependency: marked has 13 known advisory(ies) (CVE-2021-21306 (Regular Expression Denial of Service (REDoS) in Marked); CVE-2022-21681 (Inefficient Regular Expression Complexity in marked); CVE-2026-41680 (Marked Vulnerable to OOM Denial of Service via Infinite Recursion in marked Toke) +10 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
86% confidence
Finding

The dependency playwright is also unpinned and can float to different releases, which is more sensitive because Playwright has broad system interaction and downloads browser binaries. In this skill context, a changed Playwright version could alter install-time or runtime behavior and increase supply-chain or execution risk in automated agent environments.

Content

Scanner excerpt · package.json (reported line 19)May include surrounding context.

json
"license": "MIT",
  "dependencies": {
    "marked": "^17.0.4",
    "playwright": "^1.52.0"
  }
}

Unverifiable Dependency: playwright has 1 known advisory(ies) (CVE-2025-59288 (Playwright downloads and installs browsers without verifying the authenticity of)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.