Back to skill

Security audit

(Google) Veo 3 Video Gen

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Pixwith video generator, but its shell-command templates could mishandle crafted prompts or image URLs and run unintended local commands.

Review this skill before installing. It appears intended for Pixwith video generation and will send prompts, image URLs, uploaded images, and the Pixwith API key to Pixwith-related services. Use it only with non-sensitive prompts/images, and prefer an implementation that builds request bodies with a JSON serializer rather than substituting user text into shell commands.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:116
Finding
Shell Command Injection Through Unsafe Request-Body Interpolation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 116–126 and 199–211 **Vulnerability Type**: Shell command injection caused by unsafe interpolation of user-controlled values **Risk Level**: High ### Vulnerable Code Lines 116–126: ```bash curl -s -X POST https://api.pixwith.ai/api/task/create \ -H "Content-Type: application/json" \ -H "Api-Key: $PIXWITH_API_KEY" \ -d '{ "prompt": "<user_prompt>", "model_id": "2-11", "options": { "prompt_optimization": true, "aspect_ratio": "16:9" } }' ``` Lines 199–211: ```bash curl -s -X POST https://api.pixwith.ai/api/task/create \ -H "Content-Type: application/json" \ -H "Api-Key: $PIXWITH_API_KEY" \ -d '{ "prompt": "<video_description>", "image_urls": ["<start_frame_url>", "<end_frame_url>"], "model_id": "2-11", "options": { "prompt_optimization": true, "aspect_ratio": "16:9" } }' ``` ### Technical Analysis The documented commands place user-controlled prompts and image URLs directly inside a single-quoted shell argument. The skill does not require these values to be encoded with a JSON serializer or passed through a mechanism that keeps data separate from shell syntax. If an implementation follows these examples by textual substitution, a value containing a single quote can terminate the quoted JSON argument. Subsequent shell metacharacters can then be interpreted as command syntax rather than request data. This issue applies to the following externally controlled values: - `<user_prompt>` - `<video_description>` - `<start_frame_url>` - `<end_frame_url>` JSON escaping alone is insufficient if the resulting JSON is subsequently embedded in shell source. Both JSON serialization and safe process argument handling are required. ### Attack Path 1. An attacker provides a crafted video prompt or image URL containing a single quote, shell separators, and an operating-system command. 2. The agent substitutes the supplied v ...[truncated 1386 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Do not construct JSON request bodies by inserting user-controlled text into shell command templates. 1. Use a real JSON serializer such as `jq`: ```bash request_file="$(mktemp)" trap 'rm -f "$request_file"' EXIT jq -n \ --arg prompt "$USER_PROMPT" \ --arg model_id "2-11" \ '{ prompt: $prompt, model_id: $model_id, options: { prompt_optimization: true, aspect_ratio: "16:9" } }' > "$request_file" curl -sS -X POST "https://api.pixwith.ai/api/task/create" \ -H "Content-Type: application/json" \ -H "Api-Key: $PIXWITH_API_KEY" \ --data-binary "@$request_file" ``` 2. Build `image_urls` as a JSON array through the serializer rather than interpolating URLs into JSON or shell source. 3. Prefer invoking HTTP clients through a structured process-execution API that passes each argument separately and does not invoke `/bin/sh`. 4. Apply the same safe construction pattern to all API-derived and user-controlled values, including prompts, image URLs, task IDs, upload URLs, and presigned form fields. 5. Validate expected value types and constraints before use, while treating validation as defense in depth rather than a replacement for safe serialization. 6. Create temporary request files with restrictive permissions and ensure they are removed reliably. 7. Add tests containing single quotes, double quotes, newlines, command separators, command substitutions, and other shell metacharacters to verify that they remain inert data. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (10)

External Transmission

Medium
Category
Data Exfiltration
Content
**Verify** by running:

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Verify** by running:

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Verify** by running:

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Verify** by running:

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Verify** by running:

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Verify** by running:

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Indirect Prompt Extraction

Medium
Category
System Prompt Leakage
Content
- **image_urls** (optional): 1–2 publicly accessible image URLs.
  - 1 image → used as the start frame.
  - 2 images → first is the start frame, second is the end frame.
- **options.prompt_optimization** (boolean, default `true`): Auto-translate prompt to English.
- **options.aspect_ratio** (required): `16:9` or `9:16`.

## Workflow A — Text-to-Video
Confidence
82% confidence
Finding
The instruction to translate prompts to English by default creates a secondary processing path for all user inputs. In security-sensitive environments, that can leak confidential text to external processing components and produce outputs that no longer faithfully reflect the user's exact wording.

Indirect Prompt Extraction

Medium
Category
System Prompt Leakage
Content
- **image_urls** (optional): 1–2 publicly accessible image URLs.
  - 1 image → used as the start frame.
  - 2 images → first is the start frame, second is the end frame.
- **options.prompt_optimization** (boolean, default `true`): Auto-translate prompt to English.
- **options.aspect_ratio** (required): `16:9` or `9:16`.

## Workflow A — Text-to-Video
Confidence
82% confidence
Finding
The instruction to translate prompts to English by default creates a secondary processing path for all user inputs. In security-sensitive environments, that can leak confidential text to external processing components and produce outputs that no longer faithfully reflect the user's exact wording.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The skill defaults `options.prompt_optimization` to true and describes it as automatic translation of the user's prompt to English. That causes user-supplied content to be transmitted for additional processing without explicit user opt-in, which can expose sensitive prompts or alter user intent in privacy- or compliance-sensitive contexts.

External Transmission

Medium
Category
Data Exfiltration
Content
### Step 1: Check credits

```bash
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
  -H "Content-Type: application/json" \
  -H "Api-Key: $PIXWITH_API_KEY"
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.