Back to skill

Security audit

Video Transcribe

Security checks for vulnerabilities and agentic risk

Overview

The local transcription feature is coherent, but the skill also steers users toward an API-keyed remote video-editing workflow that uploads media and prompts without enough upfront disclosure.

Use this skill for local transcription only if you are comfortable with it creating transcript and subtitle files beside your media. Avoid the AI Edit workflow for private or sensitive recordings unless you knowingly want to upload the full media and prompt to the external Sparki/test API and store a SPARKI_API_KEY. Check for existing transcript files before running because outputs may be overwritten.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:136
Finding

External Upload of User Media and Prompts Without Adequate Trust-Boundary Disclosure

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}") ``` The workflow subsequently sends the user prompt and processing options to the same service: ```bash BODY=$(jq -n --argjson k "$KEYS_JSON" --argjson t "$TIPS_JSON" \ --arg p "$USER_PROMPT" --arg a "$ASPECT_RATIO" --arg d "$DURATION" \ '{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") ``` ### Technical Analysis The primary Skill description emphasizes local transcription without an API key. However, the documented AI Edit workflow crosses an additional trust boundary by uploading the complete media file and associated prompt to `agent-api-test.aicoding.live`. The upload itself is documented and therefore is not covert exfiltration. Nevertheless, the documentation does not establish the relationship between the advertised `sparki.io` service and the separate test-domain endpoint, nor does it state retention, access, deletion, residency, or privacy policies. A user or agent may consequently treat a transcript-informed editing request as a normal extension of local processing without appreciating that privat ...[truncated 1489 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:44
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/transcribe.sh:69
Finding

Predictable Whisper Output Files Permit Overwrites and Concurrent-Execution Races

Content
View full analysis
&2 ffmpeg -y -loglevel error -i "$INPUT" \ -ar 16000 -ac 1 -c:a pcm_s16le \ "$AUDIO_WAV" INPUT_DIR="$(dirname "$INPUT")" INPUT_BASE="$(basename "${INPUT%.*}")" OUT_PREFIX="${INPUT_DIR}/${INPUT_BASE}" WHISPER_ARGS=("$AUDIO_WAV" "--model" "$MODEL" "--output_dir" "$INPUT_DIR" "--output_format" "all") if [[ -n "$LANGUAGE" ]]; then WHISPER_ARGS+=("--language" "$LANGUAGE") fi whisper "${WHISPER_ARGS[@]}" 2>&1 | grep -v "^$" | sed 's/^/ [whisper] /' >&2 # Whisper names output after the input filename (audio.txt, audio.srt, etc.) WHISPER_TXT="${INPUT_DIR}/audio.txt" WHISPER_SRT="${INPUT_DIR}/audio.srt" # Rename to match source video name TXT_OUT="${OUT_PREFIX}.txt" SRT_OUT="${OUT_PREFIX}.srt" [[ -f "$WHISPER_TXT" ]] && mv "$WHISPER_TXT" "$TXT_OUT" [[ -f "$WHISPER_SRT" ]] && mv "$WHISPER_SRT" "$SRT_OUT" ``` ### Technical Analysis Although the extracted WAV is safely created in a unique temporary directory, Whisper is instructed to write its results to the shared input directory. Because the temporary source is always named `audio.wav`, every invocation attempts to create predictable names such as `audio.txt` and `audio.srt`. This design has three security and integrity consequences: 1. Existing `audio.txt` or `audio.srt` files may be overwritten or moved. 2. Concurrent transcription jobs in the same directory can overwrite, consume, or rename one another's files. 3. In a directory writable by another local user or process, pre-positioned files or symbolic links may influence where output is written, subject to Whisper's underlying file-opening behavior and the invoking user's filesystem permissions. ...[truncated 1582 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (8)

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill is presented as a local transcription utility, but the documentation embeds a complete remote AI-editing workflow that uploads user media to a third-party API and performs networked processing far outside the declared capability. This expands the trust boundary from local-only processing to external transmission of potentially sensitive video/audio content, increasing privacy, compliance, and misuse risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The documentation exposes an external-network video editing capability inside a transcription skill, including upload, polling, and project creation against a remote service. Users selecting a 'video-to-text' skill would reasonably expect local transcription, not off-device transfer of full media files and prompts to an external endpoint.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The description lists triggers such as "get the transcript" and especially "what did they say," which overlap with common conversational requests and are not tightly scoped to video/audio transcription. The file does not provide exclusion conditions or negative examples to clarify when the skill should not activate.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest/overview claims the skill 'runs locally' and needs 'no API key,' yet later sections describe API-keyed remote processing. This inconsistency can mislead operators and users about where data goes and what credentials are involved, undermining informed consent and safe routing decisions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation guidance includes phrases like "get the transcript" and "what did they say" without requiring mention of a media file, source, or transcription context. Because the markdown does not state when similar phrases should not invoke the skill, the trigger scope is overly broad.

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

bash
# Install ffmpeg (if not already installed)
brew install ffmpeg         # macOS
sudo apt install ffmpeg     # Ubuntu/Debian

# Install Whisper
pip install openai-whisper

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This curl call submits project data to an external API using an API key, as part of a workflow that also uploads the media asset. In the context of a transcription skill advertised as local-only, this constitutes undisclosed external transmission and could expose sensitive media content, prompts, and related metadata to a third party.

Content

Scanner excerpt · SKILL.md (reported line 188)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; }

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill states that it saves both a transcript and subtitle file beside the input media, which affects the user's filesystem. While this behavior is documented, it is presented as output/side effect rather than an explicit warning or caution about creating files in the source directory.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.