Back to skill

Security audit

Viral Video Studio

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent short-video analysis and content-planning skill, with caution needed because its helper script downloads media into predictable temporary files.

Install only if you are comfortable with a workflow that may fetch user-provided social-video URLs and create local temporary video, frame, and subtitle files. Prefer running the helper in an isolated account or private temp directory, delete generated media afterward, and avoid using it on private or copyrighted videos unless you have permission. No evidence showed hidden credential access, persistence, or exfiltration.

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

Warning
Location
scripts/analyze_tiktok.sh:12
Finding

Predictable Shared Temporary Files Permit File Clobbering and Cross-Run Interference

Content
View full analysis
&1 | tail -3 echo "" echo "🖼️ Extracting thumbnail frames..." ffmpeg -i /tmp/tiktok-ref.mp4 -vf "fps=1/5" /tmp/tiktok-frame-%03d.jpg -update 1 -y 2>/dev/null echo "Frames saved to /tmp/tiktok-frame-*.jpg" echo "" echo "📝 Attempting subtitle extraction..." yt-dlp --write-auto-sub --sub-lang "vi,en,zh" --skip-download \ -o "/tmp/tiktok-sub" "$URL" 2>&1 | grep -E "Writing|ERROR|no subtitles" ``` The same unsafe pattern is also presented as operational guidance in `SKILL.md`, lines 48-54. ### Technical Analysis The script stores downloaded videos, extracted frames, and subtitles under fixed, globally predictable paths in the shared `/tmp` directory. It does not create a private per-execution directory, verify file ownership, reject symbolic links, or prevent concurrent runs from sharing the same files. The `ffmpeg` invocation additionally uses `-y`, which enables unconditional output replacement. A local attacker who can write to the shared temporary directory may pre-create a predicted output path as a symbolic link or manipulate the path during execution. Depending on the target program's file-opening behavior and operating-system protections, output may be redirected to another file writable by the victim account. Even where system-level symbolic-link protections prevent a direct overwrite, deterministic names still allow concurrent or malicious executions to replace, corrupt, disclose, or mix video files, frames, and subtitles. The fixed `/tmp/tiktok-ref.mp4` input can also contain stale or attacker-substituted content rather than the video downloaded for the current invocation. ### Attack Path 1. A local attacker identifies the predictable paths, such as `/tm ...[truncated 1738 chars]
Remediation
View remediation
&2 exit 1 } trap 'rm -rf -- "$WORKDIR"' EXIT VIDEO_TEMPLATE="$WORKDIR/reference.%(ext)s" FRAME_TEMPLATE="$WORKDIR/frame-%03d.jpg" SUBTITLE_TEMPLATE="$WORKDIR/subtitles" yt-dlp -o "$VIDEO_TEMPLATE" --no-playlist -- "$URL" VIDEO_FILE="$(find "$WORKDIR" -maxdepth 1 -type f -name 'reference.*' -print -quit)" if [ -z "$VIDEO_FILE" ]; then echo "Downloaded video was not found" >&2 exit 1 fi ffmpeg -nostdin -n -i "$VIDEO_FILE" \ -vf "fps=1/5" "$FRAME_TEMPLATE" yt-dlp --write-auto-sub --sub-lang "vi,en,zh" --skip-download \ -o "$SUBTITLE_TEMPLATE" -- "$URL" ``` Additional hardening measures: 1. Do not reuse fixed paths across users or executions. 2. Use `umask 077` so generated media is accessible only to the executing account. 3. Avoid `ffmpeg -y` for security-sensitive temporary outputs; use `-n` to reject unexpected collisions. 4. Keep every intermediate file inside the private directory created by `mktemp -d`. 5. Add a cleanup trap so temporary media is removed on normal exit and most failures. 6. Pass the generated frame path directly to the analysis tool rather than relying on a global fixed filename. 7. Validate that the downloaded file exists inside the private directory before processing it. 8. Run the workflow as an unprivileged, isolated account with no access to sensitive files. 9. Update the command examples in `SKILL.md`, lines 48-54, to use the same secure temporary-directory pattern. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description promises a broad, end-to-end content strategy and generation workflow across multiple short-video platforms. The supplied code chunk performs a much narrower preprocessing task: fetch a TikTok video via yt-dlp, extract still frames with ffmpeg, try to download subtitles, and display metadata. Those actions may support later analysis, but the primary declared outputs—psychological trigger analysis, prompt generation, script creation, posting schedule, and monetization plan—are not present in this code. This is a material description-behavior mismatch rather than a minor implementation detail.

Content

No source excerpt is available for this finding.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · references/script-templates.md (reported line 46)May include surrounding context.

text
HOOK (0-3s): "Tôi tạo video viral thế này bằng AI 🤯"

STEP 1 (3-12s): "Bước 1: Tạo prompt → [show prompt text]"
[Screen recording of typing prompt]

STEP 2 (12-22s): "Bước 2: Generate ảnh → [show result]"

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description says to use the skill when a user 'asks about making viral videos, content strategy, or growing a TikTok channel,' which is broad enough to overlap with many ordinary marketing or social-media discussions. It does not clearly bound when this specialized workflow should activate versus when a simpler advisory skill should handle the request.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill instructs downloading third-party videos and subtitles and storing them locally without an explicit user warning or consent checkpoint. In context, this is more dangerous because the skill is framed as analysis/planning, so users may not expect outbound network access, content retrieval, or local artifact creation, which can expose privacy, copyright, and storage-handling risks.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The scene-script template and examples switch into Vietnamese labels and output text, implying a fixed output language for core workflow content. There is no indication that the user can choose another language or that Vietnamese is a justified region-specific requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file embeds example on-screen text in Vietnamese and later repeats Vietnamese-only hooks, CTAs, and posting guidance tied to VN time, which indicates a prescriptive locale choice in the skill content. Because the document does not offer user opt-in or explain that the skill is specifically for Vietnamese-language channels, this is a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This markdown file contains multiple user-facing template strings in Vietnamese such as "Kế hoạch hoàn hảo...", "Tôi tạo video viral thế này bằng AI 🤯", and "Comment 'AI' để mình share bộ prompt nhé 👇". Because the skill does not state that it is specifically for Vietnamese-speaking users or offer any language/locale opt-in, it violates the policy against forcing a specific language without user choice.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill documentation introduces operational behavior—network retrieval and writing files to /tmp—that is not clearly disclosed in the manifest description. Hidden side effects reduce informed consent and can surprise users or calling systems that expect only analysis/planning, creating unnecessary privacy and local storage risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The manifest focuses on analyzing a reference viral video, generating similar content assets, building a posting schedule, and producing a monetization roadmap. The documented weekly content mix adds explicit 'engagement bait' and trend-riding playbooks, which are audience-manipulation/growth tactics not necessary to the core reverse-engineering and content-generation workflow described in the manifest.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The instruction to post at optimal times in 'VN time' imposes a specific regional locale assumption. Without an opt-in or an explicit statement that the skill targets Vietnam-based audiences, this can conflict with language/locale policy expectations.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The manifest describes a workflow for analyzing viral short videos and generating scripts, prompts, schedules, and monetization plans. Including a 'Bank heist' scenario in the reusable character/prompt templates adds a potentially harmful thematic capability that is not justified by the stated purpose of creating short-form content strategy assets.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The phrase "Pixar style" references a specific branded stylistic convention and implicitly constrains output style without offering alternatives or user choice. Under the policy category provided, prescriptive natural-language style constraints can be treated as a forced preference when not framed as optional user selection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

This shell script performs a file write by saving TikTok content to /tmp/tiktok-ref.*. While it prints that it is downloading the video, it does not clearly disclose that a local file will be created and retained in /tmp, which is the kind of side effect covered by the warning requirement for code files.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The ffmpeg command creates JPEG files in /tmp and uses -y to overwrite outputs automatically. Although the script reports that frames are being extracted, it does not clearly warn the user that files will be written and overwritten in a temporary directory.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The yt-dlp subtitle extraction step performs a network call and can create local subtitle output files under /tmp/tiktok-sub*. The current message only says it is attempting extraction, not that data will be fetched from the remote service and saved locally.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.