Back to skill

Security audit

Test Skill 3

Security checks for vulnerabilities and agentic risk

Overview

This looks like a real creative media skill, but it needs Review because it sends user content to external AI providers and can run npm/npx project code with weak scoping.

Review before installing. Use only with content you are allowed to send to the listed external providers, prefer explicit `--provider` and `--dry-run` first, avoid sensitive briefs or media unless approved, and do not run Remotion render/init or pipeline against untrusted projects without sandboxing and pinned dependencies.

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 (3)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/image.sh:150
Finding

Google API Key Exposed in Process Command-Line Arguments

Content
View full analysis
/dev/null) ``` ### Technical Analysis The Google API key is interpolated directly into the request URL. As a result, the key becomes part of the `curl` process's command-line arguments. Depending on the operating system and local security configuration, command-line arguments may be exposed through process inspection interfaces, process-monitoring agents, diagnostic tooling, audit logs, crash reports, or debugging output. URLs are also more likely than authentication headers to be retained by proxy and observability systems. Although HTTPS protects the URL while it is transmitted to Google, it does not prevent local command-line disclosure or accidental logging of the complete authenticated URL. ### Attack Path 1. A user invokes image generation with `GOOGLE_API_KEY` configured. 2. The Skill starts `curl` with the API key embedded in its URL. 3. While the process is active, another local user or monitoring process reads its command-line arguments. 4. Alternatively, a diagnostic or observability system records the complete URL. 5. The recovered key is used outside the Skill to consume the victim's quota or invoke other services permitted by the key's configuration. ### Impact Assessment An attacker able to observe local process arguments or relevant logs could obtain the Google API key. The resulting access is limited to the services and restrictions configured for that key, but may include: - Unauthorized API requests - Consumption of paid quota - Exhaustion of rate limits - Access to other Google APIs enabled for an insufficiently restricted key - Di ...[truncated 125 chars]
Remediation
View remediation
/dev/null) ``` 2. Restrict the Google API key to only the required API and models. 3. Apply quota and billing alerts to detect unauthorized use. 4. Ensure authenticated URLs and headers are redacted from debugging and monitoring output. 5. Rotate any key that may already have been exposed through process or request logging. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/lib/output.sh:51
Finding

Unrestricted Provider-Controlled URL Downloads

Content
View full analysis
/dev/null images=$(echo "$images" | jq --arg lp "$OUTPUT" '.[0].local_path = $lp') fi ``` ### Technical Analysis Asset URLs extracted from remote provider responses are supplied directly to `curl -L`. The helper does not validate: - The initial URL scheme - The initial hostname - Redirect destinations - Loopback, private, link-local, or metadata-service addresses - Response size - Response content type - Whether the response is actually an expected image, audio, or video file Because redirects are enabled, validating only the initial provider domain would not be sufficient. Every redirect destination must also remain within an approved destination policy. The downloaded response is written directly to the caller-selected path. The output path behavior is expected functionality, but it increases the consequence of accepting untrusted content without validation. ### Attack Path 1. A supported provider, provider account, API response path, or intermediary is compromised. 2. The provider response contains an attacker-selected asset URL instead of a legitimate media URL. 3. The Skill extracts that URL and passes ...[truncated 1162 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/remotion_init.sh:127
Finding

Unverified npm and npx Dependency Execution

Content
View full analysis
&1) || log_warn "npm install had warnings" ``` From `scripts/remotion_render.sh`: ```bash if [[ -z "$COMPOSITION" ]]; then # Try listing compositions COMPOSITION=$(cd "$PROJECT" && npx remotion compositions src/index.ts --quiet 2>/dev/null | head -1 || true) fi ``` ```bash (cd "$PROJECT" && npx remotion render src/index.ts "$COMPOSITION" "$OUTPUT" \ --codec="$CODEC" \ --pixel-format=yuv420p \ --crf="$CRF") ``` ### Technical Analysis The Skill runs `npm install`, which can execute dependency lifecycle scripts with the same operating-system privileges and environment access as the Agent. It also invokes `npx remotion` without `--no-install`; if the executable is not locally available, `npx` may retrieve and execute a package from the configured registry. The Skill documentation states that bundled templates use pinned Remotion dependencies. However, the advertised `assets/templates/` directory and associated package manifests or lockfiles are absent from the audited artifact. Consequently, the dependency pins and integrity metadata could not be verified. In addition, `remotion_render.sh` accepts an arbitrary project directory. A project-controlled `package.json`, local executable, dependency tree, or Remotion source file is ex ...[truncated 1987 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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (142)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description presents a full creative production studio capable of generating and assembling visual/audio assets across several providers. The supplied code chunk is much narrower: it parses CLI options and generates a storyboard plan JSON from a creative brief by calling local Python scripts. Its primary purpose is planning/storyboarding, not end-to-end media production. While storyboard planning could be a supporting part of a creative studio, the behavior shown here does not substantiate the advertised image, video, audio, editing, or provider-integration capabilities, making the description materially broader than the actual code behavior in this chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a broad multimodal creative production studio with concrete media-generation and assembly capabilities across several third-party providers. The supplied code chunk does not perform any of those actions. It only converts a marketing/product brief into an AIDA scene plan JSON, including frame timing, scene objectives, and draft voiceover text. While this could be a small supporting preproduction component within a larger creative pipeline, on its own it is materially narrower and different from the declared purpose, so this chunk is a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents a broad media-production skill capable of generating and assembling visual/audio assets through several named services. The supplied code chunk only parses CLI arguments and produces a storyboard JSON structure from a brief using predefined phase templates and duration allocation. While storyboard generation could be a supporting part of a creative pipeline, this specific code does not implement the declared production capabilities, service integrations, or media outputs. Therefore the code's actual behavior is materially narrower and different from the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description presents a full creative studio capable of producing visual and audio assets through several third-party AI services and assembling outputs with Remotion. The supplied code chunk only bootstraps a Remotion project directory from templates and performs local setup tasks like copying files, installing dependencies, and running verification. While this is loosely related to the Remotion assembly portion of the description, it does not implement the advertised media-generation or provider-integration capabilities. Therefore the code's actual behavior is materially narrower and different from the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description presents a broad multimedia creation studio capable of generating/editing images, video, voice, music, and assembled outputs via multiple providers. The supplied code chunk does not perform content generation, editing, rendering, or media assembly. Instead, it is an operational utility for checking the status of asynchronous tasks and listing tracked tasks from a local log, with API calls only to Freepik and fal status endpoints. While such status checking could be a supporting component of a larger creative studio, this specific chunk’s actual behavior is materially narrower and different from the declared purpose, so this chunk does not accurately represent the stated functionality on its own.

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

md
bash scripts/providers.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
bash scripts/providers.sh

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'shell' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'network' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · scripts/plan.sh (reported line 90)May include surrounding context.

sh
if [[ "$DRY_RUN" == "true" ]]; then
  json_output "$(json_build command="$local_cmd" framework="$FRAMEWORK" dry_run=true)"
  # Clean up temp file
  [[ "${TEMP_BRIEF:-false}" == "true" ]] && rm -f "$BRIEF_FILE"
  exit 0
fi

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · scripts/plan.sh (reported line 112)May include surrounding context.

sh
if [[ "$DRY_RUN" == "true" ]]; then
  json_output "$(json_build command="$local_cmd" framework="$FRAMEWORK" dry_run=true)"
  # Clean up temp file
  [[ "${TEMP_BRIEF:-false}" == "true" ]] && rm -f "$BRIEF_FILE"
  exit 0
fi

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README repeatedly instructs users and agents to send prompts, images, audio, and video to multiple third-party providers, but it does not explicitly warn that local content may leave the system and be processed externally. In an agent skill context, this is dangerous because users may unknowingly transmit proprietary, personal, or regulated media to outside services, creating privacy, compliance, and data-handling risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The description is broad enough to trigger on many generic creative requests, increasing the chance an agent invokes this skill in contexts where users did not intend third-party API use, media generation, file creation, or network transmission. In an agentic environment, overbroad activation expands attack surface and can cause unintended external actions or privacy-impacting data disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Commands such as pipeline, remotion init/render, and related asset-generation steps can create, modify, or overwrite local files and directories, but the documentation does not make this operational risk explicit. In an agent workflow, users may unintentionally allow broad file-system side effects, including clutter, overwrites, or placement of generated assets into unexpected paths.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill routes prompts, images, audio, and possibly sensitive creative materials to multiple third-party providers, but the documentation does not clearly warn users of that data flow. In agent settings, this omission can lead to accidental disclosure of confidential prompts, proprietary media, PII, or regulated content to external services with separate retention and policy terms.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file makes ElevenLabs voiceover generation the default path and instructs using scene voiceover lines from plan.json, but it does not warn that this text will be sent to a third-party service. If scenes contain sensitive business plans, customer data, or unreleased marketing content, the agent could exfiltrate that material off-box by default.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The documentation instructs users to run npx remotion, which fetches and executes the latest package version if it is not already installed locally. This creates a supply-chain risk because a future compromised or malicious release could be executed implicitly, and the skill context encourages automation where agents may follow shell commands without human review.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The example performs a network fetch to a user-controlled URL inside calculateMetadata without any warning, validation guidance, or restriction notes. In an agent skill context, this can normalize unsafe patterns that enable SSRF, unintended data exfiltration, or access to internal services when props are influenced by untrusted input.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/remotion-rules/compositions.md (reported line 117)May include surrounding context.

md
props,
  abortSignal,
}) => {
  const data = await fetch(`https://api.example.com/video/${props.videoId}`, {
    signal: abortSignal,
  }).then((res) => res.json());

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The documentation instructs users to run npx remotion without pinning a specific package version, which can cause execution of whatever version is currently published or resolved at install time. In an agent-driven or automated environment, this creates a supply-chain risk: a malicious or compromised upstream release could be fetched and executed unexpectedly.

Content

No source excerpt is available for this finding.

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · references/remotion-rules/gifs.md (reported line 57)May include surrounding context.

Control what happens when the animation finishes:

tsx
// Loop indefinitely (default)
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} loopBehavior="loop" />

// Play once, show final frame

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The documentation recommends invoking npx remotion without pinning a specific package version, which can cause the latest published package to be fetched and executed at install/runtime. If the upstream package is compromised or a breaking/malicious version is published, users of the skill may unknowingly run untrusted code in their environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The documentation instructs users to run npx remotion without pinning a specific package version. npx may resolve and execute the latest published package version at runtime, which creates a supply-chain risk: a compromised or malicious upstream release could be fetched and executed on the user's machine. In an agent skill context, this is more dangerous because an automated system may follow setup instructions non-interactively and execute the command directly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The documentation repeatedly instructs users to execute npx remotion without pinning a specific package version. npx may fetch the latest package at execution time, which creates a supply-chain risk: future malicious or compromised releases could be executed unexpectedly in developer or CI environments.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

This example uses npx remotion without a version constraint, causing execution to depend on whatever version is current at runtime. In documentation for agent-operated tooling, this is risky because automated systems may run these commands non-interactively and silently consume an unreviewed release.

Content

No source excerpt is available for this finding.