Back to skill

Security audit

Open Slide

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent slide-deck creation and export helper, with ordinary but real dependency-installation risk from unpinned third-party tools.

Install and run this in a normal isolated development environment, review or pin the npm and Python dependency versions if reproducibility matters, and avoid running the scaffold/export workflow from an account with sensitive production credentials.

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
SKILL.md:29
Finding

Unpinned Third-Party Dependencies and Direct Execution of Remotely Resolved Packages

Content
View full analysis
# or: npx @open-slide/cli init cd pnpm install # or npm install ``` From `requirements.txt:1-2`: ```text playwright>=1.40 Pillow>=10.0 ``` ### Technical Analysis The documented workflow downloads and executes third-party packages without fixing them to versions that were reviewed: - `pnpm dlx @open-slide/cli` and `npx @open-slide/cli` resolve and directly execute a currently available version of the package. - The Python dependencies use open-ended lower bounds. Any future release satisfying `>=1.40` or `>=10.0` may be installed. - No dependency hashes or lockfiles are specified to verify the integrity and identity of resolved artifacts. - `python3 -m playwright install chromium` downloads a browser binary associated with the dynamically resolved Playwright version. - Subsequent `pnpm install` or `npm install` in the generated project may execute package lifecycle scripts from the resolved dependency graph. Consequently, the effective code executed by the workflow can change after the Skill has been audited. A compromised package maintainer account, malicious eligible release, registry compromise, dependency confusion condition, or unexpected upstream release could introduce attacker-controlled code. No evidence shows that the currently included project files are themselves malicious. The risk arises from unsafe dependency resolution and direct execution practices. ### Attack Path 1. An attacker compromises the `@open-slide/cli`, Playwr ...[truncated 1545 chars]
Remediation
View remediation
init ``` or: ```bash npx --yes @open-slide/cli@ init ``` 2. **Pin Python dependencies to exact versions:** ```text playwright== Pillow== ``` 3. **Require cryptographic hash verification for Python packages:** ```bash python3 -m pip install --require-hashes -r requirements.txt ``` Populate `requirements.txt` with hashes generated from trusted, reviewed artifacts. 4. **Commit and enforce package-manager lockfiles** for generated or maintained Node.js projects. Use immutable installation modes where supported, such as: ```bash pnpm install --frozen-lockfile ``` or: ```bash npm ci ``` 5. **Audit transitive dependencies and lifecycle scripts** before updates. Dependency updates should be deliberate review events rather than automatically accepting every future compatible release. 6. **Use trusted registries explicitly** and configure namespace protections to reduce dependency confusion and registry substitution risks. 7. **Verify downloaded browser binaries** through Playwright's supported integrity mechanisms, and ensure the Playwright package version is pinned before running the Chromium installer. 8. **Run installation and export operations with least privilege**, preferably in an isolated container or restricted development account without production credentials. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description presents a broad slide-deck authoring skill for creating, editing, previewing, and exporting decks in the open-slide React framework. The actual code chunk does not implement deck creation, editing, or general preview functionality. Instead, it specifically performs automated PDF export by driving Chromium, injecting CSS, navigating slides with keyboard events, taking screenshots, and assembling them into a PDF. That is a narrower and materially different behavior than the declared end-user capability set. Additionally, the code includes undeclared browser automation and optional CDP connection capabilities, which are not implied by the description or permissions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The skill instructs agents to execute npx @open-slide/cli init <deck-name> without pinning an exact package version. This creates a supply-chain risk because the latest package version is fetched at runtime, so a compromised or malicious upstream release could execute arbitrary code on the host during scaffold/init.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
92% confidence
Finding

The dependency specifier for Playwright uses a lower bound only (>=1.40), which makes builds non-reproducible and allows future incompatible or vulnerable versions to be installed without review. While this is a supply-chain hygiene issue rather than an immediate exploit by itself, it weakens version control and can increase exposure to newly introduced security issues.

Content

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

text
playwright>=1.40
Pillow>=10.0

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

Pillow is specified with only a minimum version (>=10.0), so dependency resolution may select different versions over time, including releases later found to be vulnerable or breaking. Because Pillow has had multiple historical security advisories, leaving it unpinned creates avoidable uncertainty about the actual security posture of deployed environments.

Content

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

text
playwright>=1.40
Pillow>=10.0

Unverifiable Dependency: Pillow has 16 known advisory(ies) (CVE-2016-2533 (Pillow buffer overflow in ImagingPcdDecode); CVE-2023-50447 (Arbitrary Code Execution in Pillow); CVE-2021-27922 (Pillow Uncontrolled Resource Consumption) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The manifest includes Pillow without pinning to a specific release, and Pillow has a history of vulnerabilities including resource exhaustion and, in some versions, more severe issues such as code execution. Without a fixed version, it is not possible to verify whether installations will avoid affected releases, which is a real supply-chain risk, especially for a skill that may process or render image assets for slide creation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.