Back to skill

Security audit

Video Intelligence

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for video transcription and downloads, but a crafted video title can reach unsafe shell execution in the bundled script.

Review before installing. Use only with video URLs you trust until the shell filename handling is fixed, prefer a pinned and checksum-verified yt-dlp install, and unset OPENAI_API_KEY unless you are comfortable sending downloaded audio to OpenAI for transcription.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/video-intel.sh:62
Finding

Remote Video Title Can Cause Shell Command Injection

Content
View full analysis
/dev/null || true # Find first non-empty caption file (prefer explicit lang, then any) SRT=$(find "$CAPDIR" \( -name "*.${LANG}.vtt" -o -name "*.${LANG}.srt" \) -size +0c | head -1) [[ -s "$SRT" ]] || SRT=$(find "$CAPDIR" -name "*.en.vtt" -o -name "*.en.srt" | xargs -I{} sh -c '[ -s "{}" ] && echo "{}"' | head -1) [[ -s "$SRT" ]] || SRT=$(find "$CAPDIR" \( -name "*.vtt" -o -name "*.srt" \) -size +0c | head -1) ``` ### Technical Analysis The output template incorporates `%(title)s`, meaning a remote video's title influences the name of the downloaded caption file. The resulting path is subsequently substituted by `xargs` into a command string passed to `sh -c`: ```bash sh -c '[ -s "{}" ] && echo "{}"' ``` Quoting the `{}` placeholder inside the command string does not safely encode the filename as shell data. If a generated filename contains quotation marks or shell metacharacters that survive `yt-dlp` filename processing, it can terminate the quoted expression and introduce additional shell syntax. The core flaw is interpreting an externally influenced filename as shell source code instead of passing it as a positional argument. The use of `sh -c` is unnecessary for checking whether a file is non-empty. ### Attack Path 1. An attacker publishes or controls a supported video whose title is crafted to contain shell syntax. 2. The attacker supplies the video's URL to a victim or induces the victim to request its transcript. 3. The `transcript` command invokes `yt-dlp`, using the remote title as part of th ...[truncated 1228 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:27
Finding

Unpinned Executable Is Installed Without Integrity Verification

Content
View full analysis
Remediation
View remediation
" curl --fail --show-error --location \ "https://github.com/yt-dlp/yt-dlp/releases/download/${VERSION}/yt-dlp" \ -o /tmp/yt-dlp printf '%s %s\n' "$EXPECTED_SHA256" /tmp/yt-dlp | sha256sum --check -- install -m 0755 /tmp/yt-dlp "$HOME/bin/yt-dlp" rm -f /tmp/yt-dlp ``` The hardening plan should also: 1. Obtain the expected checksum through a trusted, version-controlled source rather than from the same mutable download operation. 2. Prefer an operating-system package manager or another trusted package source when practical. 3. Use `curl --fail --show-error --location` so HTTP failures are not silently installed. 4. Download to a temporary non-executable file and validate it before installation. 5. Document a controlled dependency-update process that reviews and updates both the pinned version and checksum. ]]>
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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (9)

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/video-intel.sh (reported line 97)May include surrounding context.

sh
"$URL" >&2

    echo "Transcribing via OpenAI Whisper..." >&2
    RESULT=$(curl -s https://api.openai.com/v1/audio/transcriptions \
      -H "Authorization: Bearer $OPENAI_API_KEY" \
      -F model="gpt-4o-mini-transcribe" \
      -F file="@${AUDIO}")

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill declares shell-based behavior and provides executable command examples, but it does not define any explicit tool scope such as permissions or allowed-tools. That increases the chance an agent can invoke shell actions more broadly than intended, especially for downloading remote content and handling files.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger condition is broad enough to activate on essentially any matching video URL, which can cause the skill to run in situations where the user did not clearly request downloading, transcription, or external processing. Overbroad activation increases the risk of unintended network access, content retrieval, and possible data transmission to third parties.

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

curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o ~/bin/yt-dlp && chmod +x ~/bin/yt-dlp

ffmpeg (Debian/Ubuntu)

sudo apt install ffmpeg

text

## ⚠️ Privacy Notice — OpenAI Audio Upload

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The skill explicitly states that, when captions are unavailable, it uploads downloaded audio to OpenAI's transcription API. This is a real external data transmission risk because audio content may contain sensitive information, and broad URL-based triggering or unclear consent could cause users' media to be sent off-device unexpectedly.

Content

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

md
## ⚠️ Privacy Notice — OpenAI Audio Upload

When captions are unavailable (common for TikTok, Instagram, X), the script **downloads the audio and uploads it to OpenAI's transcription API** (`https://api.openai.com/v1/audio/transcriptions`). This means:

- Audio content leaves your machine and is sent to OpenAI
- Requires `OPENAI_API_KEY` to be set

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

When captions are unavailable, the script uploads downloaded audio to OpenAI's transcription API. This transmits potentially sensitive third-party content off-host without an explicit consent gate or a clear user-facing privacy warning at the point of action, which can violate user expectations or data-handling requirements.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This code performs external transmission of downloaded audio to a third-party API endpoint. In the context of a transcript/download skill, that behavior is somewhat expected, but it becomes security-relevant because the transfer is conditional fallback behavior and may expose sensitive media contents without sufficiently explicit consent or policy controls.

Content

Scanner excerpt · scripts/video-intel.sh (reported line 97)May include surrounding context.

sh
"$URL" >&2

    echo "Transcribing via OpenAI Whisper..." >&2
    RESULT=$(curl -s https://api.openai.com/v1/audio/transcriptions \
      -H "Authorization: Bearer $OPENAI_API_KEY" \
      -F model="gpt-4o-mini-transcribe" \
      -F file="@${AUDIO}")

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The workflow note says "Preferred language: --lang pt for Portuguese," which introduces a locale preference in the skill guidance. While not strictly forcing Portuguese, it suggests a default language behavior without explaining that language choice should come from the user or context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The script initializes LANG to "en" and the help text describes English as the default, which imposes a language preference unless the user overrides it. The file does not present this as an opt-in choice or justify the locale constraint as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.