T09 · Insecure Skill Coding Practices
- Location
scripts/html-to-pdf.js:155- Finding
Chromium Sandbox Disabled While Executing Potentially Untrusted HTML
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does convert HTML to PDF, but it runs user HTML in an unsandboxed browser and can contact external services during conversion, so it should be reviewed before installation.
Install only if you are comfortable running a headless browser on the HTML you convert. For untrusted or sensitive documents, run it in an isolated low-privilege environment with network access blocked, avoid the default no-sandbox mode, and use the bundled lockfile with npm ci or otherwise pin and update Puppeteer and its transitive dependencies.
scripts/html-to-pdf.js:155Chromium Sandbox Disabled While Executing Potentially Untrusted HTML
SKILL.md:28Installation Instructions Omit the Lockfile and Allow Dependency Drift
Launching Chromium with --no-sandbox and --disable-setuid-sandbox removes a major containment boundary while rendering potentially attacker-controlled HTML and JavaScript. If a browser exploit or dangerous browser feature is triggered by the input HTML, the lack of sandboxing can significantly increase the chance of host compromise or broader file/system access.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
extract-zip is a real transitive dependency used by @puppeteer/browsers during browser download/install, and symlink traversal or arbitrary-write flaws in archive extraction can become dangerous in build or install environments. If an attacker can influence the downloaded browser archive, registry, mirror, or package-install path, they may write files outside the intended directory and potentially achieve code execution or persistence.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
js-yaml is a real transitive dependency via cosmiconfig, and the reported flaws are CPU-consumption DoS issues triggered by crafted YAML content. If the skill or its runtime loads attacker-controlled configuration files during execution or install-time tooling, an attacker could cause excessive CPU use and service degradation.
ws is a real runtime dependency of puppeteer-core, and memory disclosure or fragmentation-based memory exhaustion in WebSocket handling can affect browser automation sessions that communicate over the DevTools/WebDriver BiDi channels. While this skill is primarily local HTML-to-PDF conversion, the use of headless Chrome makes unsafe WebSocket behavior more relevant than in a pure offline converter, especially in shared or remotely orchestrated environments.
The trigger guidance includes the broad phrase 'make a PDF of this' with limited exclusion criteria, which can cause the agent to invoke the skill in ambiguous contexts where the source is not clearly HTML. Over-broad routing increases the chance of misapplication, unsafe file handling assumptions, or unintended processing of content that should be handled by a different, more constrained workflow.
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.
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.
The script injects a Google Fonts stylesheet into untrusted HTML before rendering, causing headless Chrome to make outbound network requests during conversion. In an HTML-to-PDF skill, this can leak metadata such as conversion timing, IP/environment details, and creates a dependency on external content for rendering, which is especially risky when processing sensitive local documents.
The injected font link causes the renderer to contact an external service without any explicit warning or consent mechanism. In this skill context, users may expect local HTML-to-PDF conversion, so silent network access can expose sensitive document usage patterns and violate privacy or environment assumptions.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"convert": "node html-to-pdf.js"
},
"dependencies": {
"puppeteer": "^24.0.0"
},
"engines": {
"node": ">=18.0.0"
No suspicious patterns detected.