Back to skill

Security audit

Slides Generator

Security checks for vulnerabilities and agentic risk

Overview

The skill is a slide generator, but it asks agents to run changing remote code and unpinned package downloads during normal use.

Review before installing. Prefer a fixed version that runs only the bundled local script, removes automatic installs, pins dependencies, and asks separately before any setup that changes your Python or Node environment.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:67
Finding

Execution of a Mutable Remote Shell Script Without Integrity Verification

Content
View full analysis
" \ --output "" ``` ```bash bash <(curl -s https://raw.githubusercontent.com/hummingbot/skills/main/skills/slides-generator/scripts/generate_slides.sh) \ --input /tmp/slides_content.md \ --output ~/slides_output.pdf ``` ```bash bash <(curl -s https://raw.githubusercontent.com/hummingbot/skills/main/skills/slides-generator/scripts/generate_slides.sh) \ --input "" \ --output "" \ --edit ``` ### Technical Analysis The Skill directs the Agent to retrieve a shell script from the mutable `main` branch of an external GitHub repository and immediately execute the response using Bash process substitution. The downloaded content is not pinned to an immutable commit and is not checked against a cryptographic hash or signature. Consequently, the effective code executed by the Skill can change after the package has been reviewed. HTTPS protects transport integrity but does not protect against malicious or compromised upstream changes. This behavior is unnecessary for the declared slide-generation functionality because the project already includes a local copy at `scripts/generate_slides.sh`. Executing the remote version therefore exceeds the minimum privileges and network access required by the Skill. The use of `curl -s` also suppresses diagnostic output. The command does not use `--fail`, so HTTP failures or unexpected response content are not handled safely before being passed to Bash. ### Attack Path 1. An attacker compromises the upstream repository, a maintainer account, or the workflow that publishes the remote scri ...[truncated 1303 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
scripts/generate_slides.sh:65
Finding

Automatic Execution of Unpinned Dependencies from External Package Registries

Content
View full analysis
/dev/null; then echo "Installing fpdf2..." pip3 install fpdf2 --quiet fi ``` It also asks `npx` to retrieve and execute an unpinned Mermaid CLI package without interactive confirmation: ```bash elif command -v npx &> /dev/null; then # Try using npx to run mmdc if npx --yes @mermaid-js/mermaid-cli --version &> /dev/null 2>&1; then MERMAID_AVAILABLE=true echo "Mermaid CLI available via npx - diagram rendering enabled" fi fi ``` The Python renderer repeats this behavior when producing diagrams: ```python result = subprocess.run( ['npx', '--yes', '@mermaid-js/mermaid-cli', '-i', mmd_file, '-o', png_file, '-b', 'transparent', '-w', '800'], capture_output=True, text=True, timeout=60 ) ``` The documentation additionally recommends an unpinned global installation: ```bash npm install -g @mermaid-js/mermaid-cli ``` ### Technical Analysis No exact versions, package hashes, lockfiles, or trusted artifact checks are specified for `fpdf2` or `@mermaid-js/mermaid-cli`. The dependencies and their transitive dependency graphs can therefore change between executions. `pip3 install` executes package build and installation behavior in the active Python environment. Depending on the environment configuration, this may modify user-level or system-level Python packages. `npx --yes` can download and execute the package selected by the registry without requiring user confirmation. The `--version` availability probe is itself an execution path, so merely checking whether Mermaid support is availabl ...[truncated 2032 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill instructs the agent to execute a remote script directly from GitHub via curl piped to bash, which is a classic unsafe pattern. This gives whoever controls the remote content the ability to run arbitrary code on the host without review, and the slide-generation context does not justify such a high-risk execution path.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 293)May include surrounding context.

md
| `generate_slides.sh` | Main PDF generation script |

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

Installing and executing external tooling through pip3 and npx creates a direct supply-chain and arbitrary code execution path inside a document-generation utility. The skill context makes this more dangerous because users are likely to treat slide generation as low risk, yet the script can reach out to package ecosystems and execute fetched code.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes shell commands, writes temporary files, and may install dependencies, yet it declares no explicit tool scope or permission boundaries. That makes the agent's effective capabilities broader and less auditable, increasing the chance of unintended command execution or filesystem changes during normal use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill describes remote script execution and dependency installation without clearly warning that these actions change the system and may execute untrusted code. In practice, users may approve or trigger dangerous operations without understanding the persistence, network access, and arbitrary-code-execution risks involved.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill directs global installation of the Mermaid CLI via npm, expanding system capabilities and modifying the environment beyond simple document generation. Global package installation introduces supply-chain risk and persistent host changes, especially if versions are unpinned and installation occurs automatically.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script silently installs fpdf2 with pip3 and may fetch Mermaid tooling over npx, which goes beyond straightforward file conversion and introduces undeclared network-enabled code execution. For a slide generator, this behavior is risky because processing a local markdown file should not require dynamically retrieving and running external code at runtime.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The script invokes Mermaid CLI via npx without pinning an exact package version, which causes execution of whatever version is current at runtime. That introduces supply-chain risk because a compromised upstream release or unexpected breaking change could run arbitrary code during slide generation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

npx --yes @mermaid-js/mermaid-cli downloads and executes an unpinned external package on demand. In a security-sensitive environment, this is dangerous because remote package resolution can be hijacked through a compromised dependency, malicious release, or registry/path manipulation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The Python subprocess fallback executes npx --yes @mermaid-js/mermaid-cli at runtime, again without version pinning. This expands the attack surface because untrusted or transient package content is executed from within the document-processing path.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.