Back to skill

Security audit

Video Editing Agent (VEA)

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent video-editing helper, but it includes unsafe setup and helper-script patterns that deserve review before installation.

Review this before installing. Use a safer uv installation method, avoid running the provided helper scripts with untrusted project names, prompts, ports, or `VEA_DIR` values, protect `~/vea/config.json` with owner-only permissions, and expect video data or derived text/audio requests to reach Memories.ai, Google/Gemini, ElevenLabs, and Soundstripe depending on enabled features.

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

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:14
Finding

Unverified Remote Installer Is Piped Directly into a Shell

Content
View full analysis
Remediation
View remediation
uv-installer.sh" | sha256sum --check - less uv-installer.sh sh uv-installer.sh ``` The actual implementation must use an official versioned URL and an authentic checksum or signature; the placeholder values above must not be used. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/start_server.sh:5
Finding

Shell Command Injection Through Unvalidated Server Arguments

Content
View full analysis
/tmp/vea-command-injection #' ``` 2. The value is interpolated into the tmux command string: ```bash python src/app.py --port 8000; id > /tmp/vea-command-injection #; read ``` 3. The shell inside the tmux session treats the semicolon as a command separator. 4. The injected `id` command executes under the invoking user's account. A similar attack is possible by supplying a malicious `VEA_DIR` environment variable containing shell syntax. ### Impact Assessment Successful exploitation permits arbitrary command execution with the privileges of the account launching `start_server.sh`. An attacker c ...[truncated 307 chars]
Remediation
View remediation
65535 )); then echo "Error: port must be an integer from 1 to 65535" >&2 exit 1 fi ``` 2. Resolve and validate `VEA_DIR`, require it to be an expected directory, and reject unsafe or unexpected values. 3. Avoid constructing a command string that is reparsed by another shell. 4. Use a dedicated wrapper script with arguments passed separately where supported. 5. If a shell command string is unavoidable, escape every dynamic value using a robust mechanism such as `printf '%q'`: ```bash printf -v q_dir '%q' "$VEA_DIR" printf -v q_port '%q' "$PORT" tmux -S "$SOCKET" new-session -d -s "$SESSION" \ "cd -- $q_dir && exec .venv/bin/python src/app.py --port $q_port" ``` 6. Remove the trailing `; read` unless interactive retention of a failed session is explicitly required. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
references/config.md:3
Finding

Multiple API Credentials Are Stored Together in a Plaintext Configuration File

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (16)

Chaining Abuse

High
Category
Tool Misuse
Confidence
97% confidence
Finding

The '| sh' pattern is a classic chaining abuse primitive because it converts fetched network content directly into code execution in a single step. In this skill context, where users are instructed to bootstrap tooling for a local agent, the pattern is especially dangerous because it normalizes executing unaudited remote content with the user's privileges.

Content

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

md
cd vea-open-source

# Install uv package manager
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill instructs users to run shell commands, install software, and operate a local server, but it does not declare any explicit tool scope or permission boundaries. This creates an undeclared execution surface where an agent or user may invoke shell actions beyond what is transparently disclosed, increasing the chance of unsafe automation or privilege misuse.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description says to use the skill for broadly defined tasks like 'any video editing task,' which can cause over-invocation in contexts the user did not specifically intend. Overly broad activation increases the chance an agent routes unrelated or sensitive media-processing requests into a skill that performs local shell, file, and network actions.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

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

md
| OS | Command |
|----|---------|
| Ubuntu/Debian | `sudo apt install ffmpeg` |
| macOS | `brew install ffmpeg` |
| Windows | Download from ffmpeg.org |

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 121)May include surrounding context.

Before any editing, index the video to enable AI comprehension:

bash
curl -X POST "http://localhost:8000/video-edit/v1/index" \
  -H "Content-Type: application/json" \
  -d '{"blob_path": "data/videos/PROJECT_NAME/video.mp4"}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The skill explicitly retrieves content from Soundstripe using an API token, which is a real external transmission path involving credentials and potentially user-selected media metadata. In this skill context, external music retrieval is expected, but it still exposes secrets to shell history/process context and introduces third-party data sharing and supply-chain dependence.

Content

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

bash
# Download from Soundstripe API
SOUNDSTRIPE_KEY=$(jq -r '.api_keys.SOUNDSTRIPE_KEY' ~/vea/config.json)
curl -s "https://api.soundstripe.com/v1/songs/TRACK_ID" \
  -H "Authorization: Token $SOUNDSTRIPE_KEY" | jq '.included[0].attributes.versions.mp3'

# Mix with ffmpeg (15-20% music volume)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation embeds realistic plaintext secret examples and explicitly instructs loading them into environment variables, but provides no warning about secure storage, redaction, or avoiding committing secrets to disk. In an agent skill context, users may copy this pattern directly into local config files or logs, increasing the chance of accidental credential exposure and downstream abuse of paid third-party APIs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill documentation states that video, transcripts, narration, subtitles, and music selection rely on external services, but does not disclose that user media and derived content may be transmitted to third parties. For a video-editing agent handling potentially sensitive recordings, this omission can lead to unintentional privacy, confidentiality, and compliance violations if users assume processing is local.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script loads SOUNDSTRIPE_KEY from a config file and uses it in a curl request to api.soundstripe.com. While the code logs that it is fetching a track, it does not disclose that a locally stored credential will be used and transmitted to an external service.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · scripts/add_music.sh (reported line 23)May include surrounding context.

sh
# Get track download URL
echo "Fetching track $TRACK_ID from Soundstripe..."
TRACK_INFO=$(curl -s "https://api.soundstripe.com/v1/songs/$TRACK_ID" \
    -H "accept: application/json" \
    -H "Authorization: Token $SOUNDSTRIPE_KEY")

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script invokes ffmpeg with the -y flag, which overwrites the specified output file without confirmation. In an automated agent context, this can silently destroy existing user data or previous outputs if the output path is incorrect, reused, or influenced by another workflow step.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
65% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · scripts/vea_helper.sh (reported line 17)May include surrounding context.

sh
echo "VEA already running"
    else
      echo "Starting VEA..."
      cd "$VEA_DIR" && nohup ./.venv/bin/python -m src.app > /tmp/vea.log 2>&1 &
      sleep 5
      curl -s "$VEA_URL/" | jq . 2>/dev/null && echo "VEA started!" || echo "Failed to start, check /tmp/vea.log"
    fi

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · scripts/vea_helper.sh (reported line 47)May include surrounding context.

sh
echo "Usage: vea_helper.sh index <project_name>"
      exit 1
    fi
    curl -X POST "$VEA_URL/video-edit/v1/index" \
      -H "Content-Type: application/json" \
      -d "{\"blob_path\": \"data/videos/$2/\", \"start_fresh\": true}" | jq .
    ;;

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The script interpolates untrusted user input directly into a JSON request body sent to the local VEA service, including the free-form prompt parameter. Because the JSON is constructed by shell string concatenation without escaping, crafted input containing quotes or JSON fragments can break the structure and potentially inject unintended fields or alter request semantics against the local service.

Content

Scanner excerpt · scripts/vea_helper.sh (reported line 57)May include surrounding context.

sh
echo "Usage: vea_helper.sh edit <project_name> \"<prompt>\""
      exit 1
    fi
    curl -X POST "$VEA_URL/video-edit/v1/flexible_respond" \
      -H "Content-Type: application/json" \
      -d "{
        \"blob_path\": \"data/videos/$2/\",

External Script Fetching

Low
Category
Supply Chain
Confidence
96% confidence
Finding

Piping a remote script from astral.sh directly into sh executes unverified code from the network without inspection or integrity checking. In a skill that already expects shell access and developer setup, this materially increases supply-chain compromise risk if the remote endpoint, TLS path, or script content is malicious or altered.

Content

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

md
cd vea-open-source

# Install uv package manager
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file documents that /flexible_respond produces rendered videos, project files, narration audio, subtitles, and music under data/outputs/PROJECT_NAME/, which are persistent filesystem writes. The documentation does not include any warning or disclosure that invoking the endpoint will create and store multiple output artifacts on disk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.