Back to skill

Security audit

html2pptx

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward HTML-to-PPTX converter, but its dependency hygiene and stale package metadata deserve caution before use.

Install and run this only in a normal least-privileged project environment, preferably after pinning dependencies or using a reviewed lockfile. Be careful with the output path because the script will save to the path you provide, and avoid feeding it sensitive or untrusted HTML unless you are comfortable with local parsing risks.

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
requirements.txt:1
Finding

Mutable Python Dependencies and Unofficial npm Registry Mirror Create Supply-Chain Exposure

Content
View full analysis
=4.10.0 lxml>=4.6.0 html5lib>=1.1 ``` `SKILL.md:68-72`: ```bash pip install python-pptx beautifulsoup4 lxml ``` `package-lock.json:12-19`: ```json "node_modules/@types/node": { "version": "18.19.130", "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } } ``` The remaining npm packages are likewise resolved from `registry.npmmirror.com`. ### Technical Analysis The Python dependency declarations use lower-bound constraints rather than exact versions. A new release satisfying these constraints can therefore be selected without any corresponding source-code review. The installation command in `SKILL.md` is even less restrictive and does not verify artifact hashes. The npm lockfile pins versions and includes integrity hashes, which provides protection against an artifact being silently modified while retaining the same expected hash. However, all observed npm artifacts are downloaded from a third-party registry mirror instead of the official npm registry. Integrity hashes verify that downloaded artifacts match the lockfile, but they do not independently establish that the originally locked artifacts or the mirror are trustworthy. No dependency was confirmed to be malicious during this audit. The vulnerability is the avoidable supply-chain exposure caused by mutable Python resolution and reliance on an unofficial npm package source. ### Attack Path 1. An attacker compromises a permitted upstream Python package release, ...[truncated 1557 chars]
Remediation
View remediation
lxml== html5lib== python-pptx== ``` 2. Generate a reproducible Python lockfile containing hashes, such as with `pip-compile --generate-hashes`, and require hash verification during installation: ```bash python -m pip install --require-hashes -r requirements.lock ``` 3. Ensure `python-pptx`, which is imported by `src/convert.py`, is declared in the authoritative Python dependency file rather than only mentioned in documentation. 4. Update `SKILL.md` to direct users to the reviewed lockfile instead of installing unconstrained packages by name. 5. Regenerate `package-lock.json` using the official npm registry or an explicitly approved, authenticated organizational registry: ```bash npm config set registry https://registry.npmjs.org/ npm install --package-lock-only ``` 6. Remove the npm manifest and lockfile entirely if the Node.js implementation is obsolete. The current executable implementation is Python, while `package.json` references a missing `html2pptx.js` entry point. 7. Run dependency scanning in CI, review lockfile changes, use automated update pull requests, and test updates before accepting new versions. 8. Install dependencies and execute conversion in a least-privileged, isolated environment without unnecessary credentials or access to sensitive host paths. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (10)

Known Vulnerable Dependency: image-size==1.2.1 — 2 advisory(ies): CVE-2025-71329 (image-size: JXL and HEIF parsers allow denial of service through infinite loops); CVE-2025-71330 (image-size: ICNS parser allows denial of service through an infinite loop)

High
Category
Supply Chain
Confidence
96% confidence
Finding

The lockfile pins image-size to 1.2.1, which is reported as affected by denial-of-service flaws in JXL, HEIF, and ICNS parsing via infinite loops. This skill converts HTML presentations to PPTX and may process attacker-controlled image assets referenced by the HTML, so parsing malformed images during conversion could hang the process or exhaust resources and disrupt service.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill advertises file-processing behavior and includes command examples that read local HTML files, but it does not declare any explicit tool scope or permission boundaries. In an agent ecosystem, missing scope metadata can allow the skill to be invoked without clear restrictions on what files may be accessed, increasing the chance of unintended local file reads or overbroad capability exposure.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger phrases include broad terms like '转换ppt' and '生成pptx', which are generic enough to match many unrelated presentation-generation requests. Overly broad activation can cause the wrong skill to fire unexpectedly, leading users to expose local HTML files or initiate file conversion behavior when they intended a different action.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
88% confidence
Finding

The dependency uses a caret range (^3.12.0), which permits automatic installation of newer minor and patch releases. This can introduce unexpected or malicious upstream changes through the supply chain, reducing build reproducibility and making the converter dependent on whatever version is current at install time.

Content

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

json
"convert": "node html2pptx.js"
  },
  "dependencies": {
    "pptxgenjs": "^3.12.0"
  },
  "keywords": [
    "html",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
91% confidence
Finding

The dependency is specified with a lower-bound version only, so builds may resolve to different upstream releases over time. This weakens supply-chain reproducibility and makes it harder to verify whether a deployed version contains known security fixes or newly introduced vulnerabilities.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
beautifulsoup4>=4.10.0
lxml>=4.6.0
html5lib>=1.1

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The lxml dependency is unpinned, so installations can drift to different versions with different security properties. Because lxml has had multiple historical advisories and this skill processes HTML content, lack of version pinning increases uncertainty around parser safety and patch status.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
beautifulsoup4>=4.10.0
lxml>=4.6.0
html5lib>=1.1

Unverifiable Dependency: lxml has 14 known advisory(ies) (CVE-2021-43818 (lxml's HTML Cleaner allows crafted and SVG embedded scripts to pass through); CVE-2014-3146 (lxml Cross-site Scripting Via Control Characters); CVE-2021-28957 (lxml vulnerable to Cross-Site Scripting ) +11 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
93% confidence
Finding

The manifest references lxml without pinning a version, while the package has numerous known advisories across past releases. In an HTML-to-PPTX skill, parser libraries are directly exposed to potentially untrusted HTML input, so inability to verify the installed version materially increases risk.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The html5lib dependency is also unpinned, allowing arbitrary newer compatible versions to be installed without review. Since this skill converts HTML and html5lib has prior security advisories, this creates avoidable supply-chain and patch-verification risk.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
beautifulsoup4>=4.10.0
lxml>=4.6.0
html5lib>=1.1

Unverifiable Dependency: html5lib has 4 known advisory(ies) (CVE-2016-9910 (Cross-site Scripting in html5lib); CVE-2016-9909 (Improper Neutralization of Input During Web Page Generation in html5lib); CVE-2016-9909 (The serializer in html5lib before 0.99999999 might allow remote attackers to con) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

The manifest references html5lib without an exact version, so it is not possible to determine whether deployments use a release affected by known advisories. Because the skill parses attacker-controlled HTML-like content, this uncertainty is more dangerous than in a non-parsing utility.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code file includes natural-language text in Chinese ("优化布局、图标、色彩还原") without any indication that the skill is region-specific or that users can choose their preferred language. Under the language/locale policy, forcing a specific language without opt-in is a policy concern even when it appears only in comments or docstrings.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.