Back to skill

Security audit

Pixcli Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent creative-media CLI, but it has review-worthy privacy and supply-chain risks, especially public permanent podcast publishing by default.

Review before installing. Use `--private` or `--no-publish` for podcasts, avoid confidential material unless you are comfortable sending it to the pixcli service, use voice cloning only with consent, and prefer pinned npm invocations or a reviewed local install for automated environments.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:524
Finding

Podcast Outputs Are Publicly and Permanently Published by Default

Content
View full analysis
` share page out of the box, now with an **immersive synced-transcript player** (the script highlights sentence-by-sentence in time with playback). Use `--private` or `--no-publish` to change that. To flip an **existing** episode's visibility later, use [`pixcli publish`](#pixcli-publish-id--change-share-visibility). ``` From `SKILL.md:599-604`: ```markdown (Nano Banana 2, so the title + date render as real text), published **public and permanent**. Prefer the `podcast` link set from the result (`audio_url`, `cover_url`, `transcript_url`) — those carry the correct file extension. The job id stem is also stable if you must rebuild a URL: - audio (when published): `…/p/pod-.mp3` - cover (always public): `…/p/pod--cover` (extension is usually `.jpg`; ``` From `references/command-reference.md:250-261`: ```markdown | `--private` / `--no-publish` | flag | — | Podcasts publish **public + permanent by default**; `--private` requires your key, `--no-publish` skips publishing | | `--json` | flag | `false` | Machine-readable JSON output | **Notes** - Gemini multi-speaker TTS caps at **2 voices** per episode — pick 2 presets/voices. - **Music** is loud only for the first ~4s and last ~5s; under speech it stays faint (`bed_gain` ~0.06). Beds come from a permanent library — list them with `GET /api/v1/audio/podcast/presets`. Custom beds must be WAV (the in-worker mixer reads PCM directly). - **Expression tags are always English** (`[enthusiastic]`, `[laughing]`, `[agreement]`, `[amazement]`, …) even when the dialogue is in another language; t ...[truncated 2898 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:14
Finding

Unpinned npm Packages Are Automatically Downloaded and Executed

Content
View full analysis
`**: Downloads + caches the `pixcli` CLI from npm on first invocation, then runs it. All subsequent calls use the cached binary. The `--yes` flag is required in agent contexts to avoid interactive prompts. `pixcli` is an HTTP client — it sends prompts to the pixcli API (`https://pixcli.hilo.cx/api/v1/*`), polls for completion, and downloads the resulting files. It does not execute arbitrary code. - **`npx --yes remotion `**: Same pattern for the Remotion video renderer. Only used when assembling final videos from generated assets using the bundled templates. - **`npm install`** (no arguments): Runs inside a copied template directory to install the dependencies declared in that template's `package.json`. The agent never passes package names to `npm install` — only hydrates declared deps. ``` From `SKILL.md:119-127`: ```markdown AI agents should always run pixcli via `npx --yes pixcli` — it's in the scoped allowlist and requires no global install: ```bash npx --yes pixcli image "a red fox in a forest" ``` Humans who prefer a global inst ...[truncated 3103 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (118)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

There is a mismatch because the declared purpose describes a comprehensive creative platform with many end-user capabilities, while the supplied code chunk merely sets two Remotion configuration options. Although Remotion video assembly is mentioned in the description, this particular code does not itself perform creative generation or asset production; it is only a supporting configuration file for output behavior. That makes the actual behavior materially narrower than the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a full-featured creative platform with extensive capabilities across images, video, audio, and podcasts. The supplied code chunk, however, is only a tiny Remotion template initialization file that registers a root component. While this may support one small part of a video assembly system, it does not substantiate the broad primary purpose claimed in the description. The mismatch is material because the code’s actual behavior is far narrower than the declared functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description promises a comprehensive creative toolkit with automatic task classification, model selection, multimedia generation, podcast studio features, and Remotion video assembly. The supplied code chunk does not perform any of those core behaviors directly; it is a small configuration file for Remotion that sets image output format and overwrite behavior. While this may support one small part of the claimed video-template functionality, the actual code shown is materially narrower than the declared purpose. Therefore, the description is not an accurate representation of what this specific code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a full-featured creative asset generation platform with broad multimodal capabilities and orchestration features. The supplied code chunk does not implement any of those behaviors directly; it only exports a static sample plan for an explainer video template. This is materially narrower than the declared purpose. While this file may be one small supporting asset within a larger creative toolkit, evaluated on its own behavior it does not match the expansive description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a full-featured creative generation platform with routing, generation, podcasting, and video assembly capabilities. The supplied code chunk, however, is a minimal configuration file for Remotion that sets image output format and overwrite behavior. While this may support a Remotion video template, it does not itself implement the described toolkit functionality. Therefore, the description is materially broader than what this code actually does, so this chunk is a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a full-featured, default creative generation platform covering images, video, audio, and podcasts. The supplied code chunk is narrowly scoped: it imports registerRoot from Remotion, imports a local RemotionRoot, and registers that root. This is consistent only with a small part of a Remotion video template setup, not with the expansive functionality claimed. While this file could be one supporting piece inside a larger creative system, evaluated on its own it does not accurately represent the declared primary purpose and omits nearly all claimed capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Yes, this is a mismatch. The description claims a comprehensive creative-production skill with many high-level capabilities across images, video, audio, and podcasts. The provided code chunk does not implement any of those user-facing behaviors; it only contains a narrow Remotion configuration file for one template, setting output image format and overwrite behavior. While this could be a minor supporting detail within a larger video assembly system, the supplied code itself does not accurately represent the declared primary purpose and shows only a small configuration concern rather than the described toolkit functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description promises a comprehensive creative platform spanning image, video, audio, music, sound effects, podcasts, orchestration, and automated asset production. The actual code chunk is a tiny Remotion template bootstrap that imports and registers a root component. This is consistent only with a narrow piece of video-template infrastructure, not with the broad end-user creative capabilities described. Because the code’s primary observed behavior is materially narrower and different from the declared purpose, this is a mismatch.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill states that podcasts publish publicly and permanently by default, with shareable pages, yet does not require an upfront warning or explicit confirmation before exposing potentially user-provided content. In an agent context this can easily lead to unintended public disclosure of sensitive prompts, scripts, voices, or internal materials.

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 760)May include surrounding context.

md
Read `references/command-reference.md` for the full parameter reference.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Read `references/command-reference.md` for the full parameter reference.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `references/prompt-cookbook.md` — Proven prompt patterns for every task

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · references/command-reference.md (reported line 368)May include surrounding context.

md
| Preset | Gender | Vibe |
|--------|--------|------|
| `Eva` | female | warm, soft narration (Spanish default) |
| `Carolina` | female | natural, clear conversational |
| `Lydia` | female | energetic, confident, informative |
| `Aitana` | female | young, warm, expressive |
| `Elena` | female | young, lively narration |

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README describes pixcli as the "default tool for almost any creative output" and says to "Reach for pixcli first whenever you need an image, video, audio clip, or podcast." This is an extremely broad activation description that overlaps with many ordinary creative requests and lacks clear boundaries or exclusion conditions, increasing the risk of unintended invocation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The README instructs users to run npx remotion without pinning a version, which causes execution of whatever package version is current at invocation time. That introduces supply-chain risk and undermines reproducibility, especially for agentic or automated environments that may run the command unattended.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README advertises voice cloning via --clone and --sample without any consent, impersonation, or biometric-data handling warning. That omission materially raises misuse risk because agents or users may clone voices from third-party samples without authorization, enabling impersonation, fraud, or privacy violations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README promotes public and shareable publishing of generated outputs, including named slugs and long TTLs, without an explicit warning about accidental disclosure of sensitive prompts, media, metadata, or customer content. In an agent workflow, this increases the chance that confidential assets are exposed through publicly reachable URLs by default or by casual operator use.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
85% confidence
Finding

The workflow later repeats the use of npx remotion render without version pinning, again allowing an unpinned package resolution at execution time. In CI, agent, or scripted contexts this can unexpectedly pull a compromised or breaking upstream version and execute it.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The manifest permits npx remotion without version pinning, maintaining a second insecure path to execute registry-resolved code. Attackers benefit from any remaining floating alias, so all must be removed or pinned.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The manifest permits npx remotion without version pinning, maintaining a second insecure path to execute registry-resolved code. Attackers benefit from any remaining floating alias, so all must be removed or pinned.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The manifest permits npx remotion without version pinning, maintaining a second insecure path to execute registry-resolved code. Attackers benefit from any remaining floating alias, so all must be removed or pinned.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The manifest permits npx remotion without version pinning, maintaining a second insecure path to execute registry-resolved code. Attackers benefit from any remaining floating alias, so all must be removed or pinned.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description says this is the 'default way to produce ANY creative asset' and to use it for 'almost all creative work,' which is broad enough to overlap with many ordinary user requests. The file does not provide clear exclusion conditions or negative examples to narrow when the skill should not be invoked.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The allowlist permits npx --yes pixcli * without pinning a version, so every invocation may resolve and execute whatever package version is current in npm at runtime. This creates a supply-chain risk: a compromised maintainer account, malicious new release, or dependency takeover could lead to arbitrary code execution in the agent environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This allowlist entry authorizes npx --yes pixcli * without a version pin, which means the executed code is determined dynamically from the npm registry. In an agent context, that is dangerous because an attacker only needs to influence the upstream package publication path to gain code execution.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.