Back to skill

Security audit

html-ppt-to-pdf

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims, but it converts arbitrary HTML in a real browser without clearly warning that the HTML can run JavaScript and make network requests.

Review before installing if you will convert HTML from other people or automated sources. Use it only on trusted decks, or run conversion in a sandbox/container with restricted outbound network access. Prefer a pinned Playwright install and a clean lockfile before using it in production workflows.

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

Warning
Location
scripts/html-to-pdf.mjs:133
Finding

Untrusted HTML Executes with Unrestricted Network Access

Content
View full analysis
{}); await page.waitForLoadState('networkidle', { timeout: 5_000 }).catch(() => {}); ``` ### Technical Analysis The converter accepts arbitrary HTML slide decks and opens them as active browser documents. The browser context does not disable JavaScript, and no request interception policy restricts the hosts, protocols, or network destinations that the document may contact. Consequently, scripts, images, stylesheets, fonts, iframes, and other active or passive resources in an attacker-controlled deck can initiate requests to: - Attacker-controlled Internet services - Services reachable only from the victim's network - Localhost services - Private-network addresses accessible from the conversion host The converter explicitly waits for document loading and network activity, providing embedded scripts with an execution window before PDF generation. Chromium's sandbox and same-origin policy reduce the likelihood of direct host compromise or reading arbitrary cross-origin responses, but they do not categorically prevent outbound requests, blind internal-service interactions, or disclosure of information already available to the malicious document. The project's stated purpose requires rendering HTML, but it does not inherently require arbitrary script execution or unrestricted networking. These capabilities should therefore be disabled by default or exposed only through explicit trusted-content options. ### Attack ...[truncated 1490 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
scripts/package-lock.json:8
Finding

Inconsistent Dependency Manifests and Mixed Package Registries

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (6)

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The README instructs users to run npx playwright install chromium without pinning a specific Playwright version. npx may resolve and execute the latest package version from the registry at runtime, which creates a supply-chain risk: a compromised upstream release, dependency confusion, or unexpected breaking change could cause unreviewed code to run on the user's machine. In this skill context, the command is especially relevant because it is presented as a one-time setup step that users are likely to copy-paste directly.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Using npx playwright install chromium without pinning a specific package version can fetch the latest Playwright package at execution time, making builds non-reproducible and exposing users to supply-chain risk if a malicious or compromised upstream version is published. Because this skill explicitly instructs users to run the command, the risk is operationally relevant even though it appears in documentation rather than code.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This script renders attacker-controlled local HTML in a real browser and explicitly supports outbound networking through remote asset loads and an optional proxy. That creates an SSRF/data-exfiltration surface inconsistent with a local HTML-to-PDF converter, because malicious HTML can trigger requests to arbitrary internal or external endpoints during rendering.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

This HTML file includes a user-facing instruction that tells the user to ask the agent in Chinese: "把这份 HTML 幻灯片转 PDF。" There is no accompanying note that other languages are supported or that Chinese is required for a justified region-specific reason, which can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
91% confidence
Finding

The dependency uses a caret range (^1.49.0), which allows automatic installation of newer minor and patch releases instead of a single reviewed version. In a build or automation skill that drives Chromium, this can introduce supply-chain risk or unexpected behavior changes if an upstream release is compromised or incompatible.

Content

Scanner excerpt · scripts/package.json (reported line 11)May include surrounding context.

json
"html-to-pdf": "./html-to-pdf.mjs"
  },
  "dependencies": {
    "playwright": "^1.49.0"
  }
}