Back to skill

Security audit

Video Resize

Security checks for vulnerabilities and agentic risk

Overview

The local video resize script is ordinary, but the skill also documents a remote AI-edit path that can upload videos and expose an API key without clear disclosure or consent.

Use this only for the local resize script unless you are comfortable sending the selected video and prompt data to the documented external AI Edit service. Do not run the published API-key check command as written; rotate the key if it was run with a real value visible in output or logs.

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

other

Error
Location
SKILL.md:106
Finding

Undisclosed Transmission of User Videos and API Credentials to a Non-Brand Test Endpoint

Content
View full analysis
}" FILE_PATH="$1"; TIPS="$2"; USER_PROMPT="${3:-}"; ASPECT_RATIO="${4:-9:16}"; DURATION="${5:-}" # -- Step 1: Upload -- echo "[1/4] Uploading $FILE_PATH..." >&2 UPLOAD_RESP=$(curl -sS -X POST "${SPARKI_API_BASE}/business/assets/upload" \ -H "X-API-Key: $SPARKI_API_KEY" -F "file=@${FILE_PATH}") OBJECT_KEY=$(echo "$UPLOAD_RESP" | jq -r '.data.object_key // empty') [[ -z "$OBJECT_KEY" ]] && { echo "Upload failed: $(echo "$UPLOAD_RESP" | jq -r '.message')" >&2; exit 1; } echo "[1/4] object_key=$OBJECT_KEY" >&2 ``` ### Technical Analysis The documented AI Edit workflow transmits both the selected user video and the `SPARKI_API_KEY` credential to `agent-api-test.aicoding.live`. This domain differs from the advertised `sparki.io` identity and is explicitly named as a test endpoint. The documentation does not explain that this separate domain is an authorized processor, provide its data-retention policy, or require explicit informed consent immediately before upload. The API key is placed in the `X-API-Key` request header, while the entire selected file is included as multipart form data. Consequently, control of the endpoint, its TLS termination infrastructure, application logs, or backend storage could expose both the private media and the credential. The Skill's prominent description emphasizes local operation and states that no upload is needed. Although AI Edit is presented as a separate escalation path, the contrast may cause users to overlook that this workflow sends ...[truncated 1373 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:91
Finding

API Key Disclosed by Incorrect Shell Parameter Expansion

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest and top-level description state that the skill runs locally with ffmpeg and requires no API key or upload, but the same skill file embeds an alternate AI Edit workflow that uploads user video to a remote service and requires SPARKI_API_KEY. This mismatch is security-relevant because it can mislead users and downstream agents about data handling, causing unintended disclosure of sensitive video content and metadata.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The AI Edit section describes uploading the user's video to a remote API and returning a hosted download URL, but the skill description does not provide a clear privacy or data-transmission warning. For media files, this can expose sensitive visual, audio, and metadata content to a third-party service without sufficiently informed consent.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documented AI Edit flow introduces remote upload, polling, and project creation against an external API inside a skill whose stated purpose is local video resizing. Even if presented as an escalation path, bundling broader networked processing into a local utility increases the chance that an agent or user will invoke external processing without understanding the trust boundary change.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

This curl call creates a remote project using uploaded asset references, prompts, aspect ratio, and an API key, confirming outbound transmission to a third-party service. In the context of a supposedly local resize skill, the external transmission is more dangerous because users may not expect their video-derived data and instructions to leave the machine.

Content

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

md
'{object_keys:$k,tips:$t,aspect_ratio:$a}
   | if $p != "" then .+{user_prompt:$p} else . end
   | if $d != "" then .+{duration:($d|tonumber)} else . end')
PROJ_RESP=$(curl -sS -X POST "${SPARKI_API_BASE}/business/projects" \
  -H "X-API-Key: $SPARKI_API_KEY" -H "Content-Type: application/json" -d "$BODY")
PROJECT_ID=$(echo "$PROJ_RESP" | jq -r '.data.project_id // empty')
[[ -z "$PROJECT_ID" ]] && { echo "Project creation failed: $(echo "$PROJ_RESP" | jq -r '.message')" >&2; exit 1; }

Static analysis

No suspicious patterns detected.