Back to skill

Security audit

Pixmind Video to Prompt

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it can download and reuse executable runtimes from remote, manifest-controlled sources and can redirect API credentials and videos through environment-configured endpoints.

Install only if you trust Pixmind's API, CDN, and runtime manifests, and avoid using custom PIXMIND_API_BASE, PIXMIND_NODE_MANIFEST, or PIXMIND_FFMPEG_MANIFEST values unless you control and trust those endpoints. Prefer preinstalled Node.js and FFmpeg where possible, and do not submit private videos unless you are comfortable uploading them to the configured service.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/video-to-prompt.js:9
Finding

Configurable API endpoint can exfiltrate the API key and local video content

Content
View full analysis
undefined) if (!info?.isFile()) throw new Error(`Video file not ...[truncated 2343 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/video-to-prompt.js:237
Finding

Remote manifests control downloaded executables and their integrity metadata

Content
View full analysis
Number(right.version === manifest.preferred) - Number(left.version === manifest.preferred)) const errors = [] for (const version of versions) { try { return await installFfmpeg(version) } catch (error) { errors.push(error instanceof Error ? error.message : String(error)) } } throw new Error(`Unable to install Pixmind FFmpeg: ${errors.join("; ")}`) } async function installFfmpeg(version) { if (!record(version) || typeof version.version !== "string" || typeof version.url !== "string") { throw new Error("Invalid FFmpeg version entry.") } const directory = path.join(cacheRoot(), "ffmpeg", "windows-x64", version.version) const executable = path.join(directory, "ffmpeg.exe") if (await validFfmpeg(executable, version)) return executable await mkdir(directory, { recursive: true }) const temporary = `${executable}.${process.pid}.download` process.stderr.write(`Downloading FFmpeg ${version.version} from Pixmind R2...\n`) try { await download(version.url, temporary).catch(async (error) => { const fallback = version.url.rep ...[truncated 4982 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared skill purpose is storyboard extraction, but the instructions also authorize downloading and executing portable Node.js and FFmpeg binaries from remote sources. This is dangerous because it hides a software bootstrapper inside a media-analysis skill, expanding the attack surface to remote code execution, supply-chain compromise, and unexpected host modification behavior that a user may not reasonably anticipate from the description.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script allows the download manifest source to be overridden via the PIXMIND_NODE_MANIFEST environment variable, and then uses manifest-provided URLs and hashes to fetch and execute node.exe. Because the trust root is fully redirectable by environment control, an attacker who can influence the environment can supply a malicious manifest that points to an attacker-controlled runtime and matching checksum, resulting in arbitrary code execution.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest URL is overrideable via the PIXMIND_NODE_MANIFEST environment variable, allowing an attacker who can influence the environment to redirect the launcher to attacker-controlled metadata and potentially an attacker-chosen executable. Even with SHA validation, the attacker-controlled manifest also provides the expected hash, so this check does not prevent arbitrary binary execution.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill clearly instructs use of environment secrets, network access, and shell execution, but it does not declare any explicit tool scope or permissions boundary. That makes the effective capability set broader and less auditable, increasing the chance that a host grants powerful operations implicitly, including remote downloads and local command execution.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The instruction says to default to zh-cn unless the user supplies another value. This imposes a specific language/locale choice by default rather than offering a neutral default or explicit user opt-in, which matches the language/locale policy violation category.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
## Errors and security

- HTTP 400: check that exactly one valid video was supplied and that it is no longer than 10 minutes.
- HTTP 401: configure `PIXMIND_API_KEY`; never ask the user to paste the key into chat.
- HTTP 402: report insufficient credits and stop.
- The API key is configured in the environment or the client's Pixmind provider settings.
- If both portable runtime sources fail, report the launcher's official Node.js installation

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The default prompt auto-invokes the skill with a broad phrase ('Use $pixmind-video-to-prompt to analyze this video') and does not define clear constraints on when the tool should be used or what inputs are acceptable. In an agent setting, this can cause over-eager activation on ambiguous user requests, increasing the chance of unintended remote URL processing, data handling, or prompt-routing abuse.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This bootstrapper installs and runs an external Node.js binary even though the skill is presented as a video-to-prompt analysis tool. While downloading a runtime can be operationally legitimate, it expands the attack surface by introducing network retrieval and execution of a binary at runtime, which is riskier than the apparent skill description suggests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script downloads and stores an executable to a local cache and may execute it without any user-facing notice or consent step. Even with hash checking, silent runtime installation reduces user awareness and increases the chance that unexpected code execution occurs in environments with stricter software provenance or change-control requirements.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The launcher fetches and installs a Node.js runtime from remote locations before running the skill, which expands behavior beyond simple local video analysis into remote code acquisition and execution. Although integrity checks are present, this still creates a supply-chain and trust-boundary risk because the skill can introduce executable code not bundled with the package.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script downloads and executes a runtime binary without any explicit user-facing confirmation, which reduces transparency around a security-sensitive action. In the context of a video-to-prompt skill, silent retrieval and execution of new code is unexpected and increases the risk of unnoticed supply-chain compromise or policy bypass.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/run.sh (reported line 80)May include surrounding context.

sh
download="$temporary/node.download"
if [ -n "$url" ] && curl -fL --connect-timeout 15 --max-time 900 "$url" -o "$download"; then
  chmod 755 "$download"
  if valid_node "$download" "$size" "$sha256"; then
    mv "$download" "$node"
    "$node" "$script_dir/video-to-prompt.js" "$@"

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/run.sh (reported line 94)May include surrounding context.

sh
download="$temporary/node.download"
if [ -n "$url" ] && curl -fL --connect-timeout 15 --max-time 900 "$url" -o "$download"; then
  chmod 755 "$download"
  if valid_node "$download" "$size" "$sha256"; then
    mv "$download" "$node"
    "$node" "$script_dir/video-to-prompt.js" "$@"

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The help text states the default output language is zh-cn, and the code later enforces that default when no language is provided. This is a natural-language locale policy issue because the skill selects a specific language by default rather than offering a neutral default or explicit opt-in.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script will automatically fetch a manifest from a remote server, download an FFmpeg executable from a CDN, validate it against that remotely supplied manifest, and then execute the binary locally. This creates a supply-chain trust problem: if the manifest/CDN or API base is compromised, or if environment variables are manipulated, the skill can be turned into a remote code execution path on the user's machine. In a video-processing skill, invoking FFmpeg is justified, but silently installing and executing a network-fetched executable materially increases risk beyond normal local file processing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code assigns args.language || "zh-cn", which forces Chinese output whenever the user does not specify a language. This violates the language/locale policy criterion because it imposes a locale choice without explicit user opt-in.

Content

No source excerpt is available for this finding.