Back to skill

Security audit

FCP Assistant

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real video-production helper, but unsafe shell-script handling could let a crafted subtitle language argument run local code.

Install only if you are comfortable reviewing and running shell scripts yourself. Avoid passing untrusted values to multi-lang-subtitles.sh, prefer running commands manually after checking their arguments, and be aware that the advertised FCP automation/batch export features are not fully present in the shipped files.

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)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/multi-lang-subtitles.sh:85
Finding

Arbitrary Python Code Execution Through the Target Language Argument

Content
View full analysis
00:00:05,000 {text} 2 00:00:05,000 --> 00:00:10,000 [Translation needed] 3 00:00:10,000 --> 00:00:15,000 [Translation needed] """ with open('/tmp/translated-subtitles.srt', 'w', encoding='utf-8') as f: f.write(srt_content) print(f"✅ {target_lang} 字幕已生成:/tmp/translated-subtitles.srt") PYTHON_SCRIPT ``` ### Technical Analysis The heredoc delimiter is unquoted, so the shell performs parameter expansion before passing the generated source code to Python. The attacker-controlled `TARGET_LANG` argument is inserted directly into two Python string literals without escaping: ```python target_lang = "$TARGET_LANG" text = translations.get('$TARGET_LANG', ...) ``` An input containing matching quotation marks, Python statements, and a comment marker can terminate the intended string and introduce executable Python code. This is not merely malformed-data injection: the supplied content is parsed by the Python interpreter as source code. The script does not validate `TARGET_LANG` against the documented language set of `en`, `ja`, `ko`, `fr`, `de`, and `es`. ### Attack Path 1. An attacker causes a user, automation workflow, or Agent to invo ...[truncated 1299 chars]
Remediation
View remediation
&2 exit 1 ;; esac python3 - "$TARGET_LANG" <<'PYTHON_SCRIPT' import sys target_lang = sys.argv[1] translations = { "en": "Welcome to this video", "ja": "このビデオへようこそ", "ko": "이 비디오에 오신 것을 환영합니다", "fr": "Bienvenue dans cette vidéo", "de": "Willkommen zu diesem Video", "es": "Bienvenido a este video", } text = translations[target_lang] # Continue generating the subtitle using target_lang as data. PYTHON_SCRIPT ``` Apply the same design rule wherever shell variables are passed to Python, JavaScript, AppleScript, or another interpreter: pass values through arguments, standard input, or a safely serialized data format rather than generating source code. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/auto-rough-cut.sh:30
Finding

Predictable Shared Temporary Files Permit File Clobbering and Cross-Process Data Substitution

Content
View full analysis
&1 | \ grep -E "Input Integrated|Input True Peak|Input Threshold|Target Offset" > /tmp/audio-analysis.txt if [ -s /tmp/audio-analysis.txt ]; then cat /tmp/audio-analysis.txt fi rm -f /tmp/audio-analysis.txt ``` ```bash # scripts/auto-voiceover.sh curl -s -X POST "http://127.0.0.1:7860/gradio_api/call/generate_voice_fn" \ -H "Content-Type: application/json" \ -d "{ \"data\": [ \"$SCRIPT_TEXT\", \"default\", \"auto\" ] }" > /tmp/tts-response.json 2>/dev/null if [ -s /tmp/tts-response.json ]; then AUDIO_PATH=$(cat /tmp/tts-response.json | python3 -c " import sys, json try: data = json.load(sys.stdin) print(data.get('data', [''])[0] if isinstance(data, dict) else '') except: print('') " 2>/dev/null) fi rm -f /tmp/tts-response.json ``` ```bash # scripts/multi-lang-subtitles.sh curl -s -X POST "http://127.0.0.1:8000/gradio_api/call/run" \ -H "Content-Type: application/json" \ -d "{\"data\": [\"$VIDEO_FILE\"]}" \ > /tmp/asr-result.json 2>/dev/null with open('/tmp/chinese-subtitles.srt', 'w', encoding='utf-8') as f: f.write(srt_content) with open('/tmp/translated-subtitles.srt', 'w', encoding='utf-8') as f: f.write(srt_content) rm -f /tmp/asr-result.json /tmp/chinese-subtitles.srt / ...[truncated 4461 chars]
Remediation
View remediation
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (46)

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The declared description describes a broad Final Cut Pro automation skill centered on auto video production, TTS voiceover, media management, and batch export. However, this code chunk performs a much narrower and different function: chapter-marker suggestion generation based on video duration, ASR, and silence detection. It does relate to FCP/video workflows, but its primary purpose is chapter analysis rather than video creation, voiceover, media import/management, or exporting. The local API call and ffmpeg/ffprobe usage are consistent with analysis, not the declared capabilities. Therefore the supplied code does not accurately represent the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The code’s actual function is narrow: it analyzes an input media file to identify silence, mainly for manual rough cutting. It calls a local ASR endpoint and, on failure, uses ffmpeg silencedetect, then outputs suggestions. There is no implementation of text-to-speech, automated video assembly, media management, batch export, or actual Final Cut control/integration. While silence-based rough cutting is adjacent to video editing, the declared description substantially overstates and misrepresents the implemented behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The code chunk’s actual function is narrowly focused on thumbnail generation from an existing video file. It does not implement the main declared capabilities such as AI auto video production, TTS voiceover, media management, batch export, or any Final Cut/FCP integration. While thumbnail generation is adjacent to video workflows, it is a materially different primary purpose from the declared description. Therefore the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The core declared theme of automatic video creation is broadly accurate: the script does automatically compose a finished video from source clips, text, optional voiceover, and music. However, several prominent declared capabilities are not implemented. There is no TTS engine or speech synthesis; the script only accepts an optional directory of already-generated voiceover audio files. 'Media management' is overstated, since behavior is limited to scanning local videos/music folders and saving minimal output metadata, not organizing/importing/managing assets. 'Batch export' is also unsupported because the script creates one output file per run rather than processing multiple exports/jobs. The mention of FCP/Final Cut triggers is misleading because the code has no Final Cut integration or automation. So the description does not accurately represent the actual code behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The supplied code only implements one narrow function from the description: TTS voiceover generation. It does not create videos, manage media assets, perform batch exports, or integrate with Final Cut/FCP. There are no unrelated or suspicious extra capabilities beyond local API access and file I/O needed for TTS generation. However, the declared description materially overstates the skill’s functionality relative to this code chunk, so this is a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The description presents a broader end-to-end video creation skill including automatic video assembly, TTS narration, media management, and export. The supplied code only performs stock media discovery/download from external web services (Pexels) and stores metadata locally. Music handling is not automated either; it merely prints manual download links. This is a materially narrower and different behavior than the declared purpose, so the description does not accurately represent the code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The declared description promises a broad video-production workflow centered on automatic video creation, TTS dubbing, media management, and batch export. However, this code chunk only performs subtitle-oriented processing: it accepts a video path, calls a local ASR service, writes temporary SRT subtitle files with largely placeholder content, and suggests manual import into Final Cut Pro. There is no evidence of TTS generation, media asset organization, batch export, or automated video composition/editing. While subtitles could be adjacent to video production, the primary behavior of this code is subtitle generation/translation, which is materially narrower and different from the declared capabilities. Therefore the description does not accurately represent the supplied code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description suggests a broad video-production assistant covering automatic editing, TTS narration, media management, and export workflows. The actual code chunk performs a much narrower and different function: offline scene detection on a local video file via ffmpeg/ffprobe. This is a materially different primary purpose from the declared description. While scene detection could be a supporting feature in a video-production tool, the supplied chunk does not implement or evidence the headline capabilities that were declared, and instead exposes an undeclared analysis capability as its sole behavior in this snippet.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The code only performs media analysis and tagging. It reads a directory of video files, extracts duration/resolution and basic characteristics via ffprobe, builds tag strings, and saves them in _media-tags.json. This partially overlaps with the declared 'media management' aspect, but it does not implement the headline capabilities of automatic video production, TTS voiceover, or batch export. Therefore the description materially overstates and misrepresents what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The supplied shell script is narrowly focused on generating voiceover audio. It accepts script input, contacts a local TTS API, waits for generated WAV files, post-processes them with ffmpeg, and creates a combined audio file. That behavior does align with the 'TTS voiceover' portion of the description, but the declared purpose materially overstates the chunk's scope by presenting it as an auto video production/media management/batch export skill. There is no code here for creating videos, interacting with Final Cut Pro, importing/managing media assets, or exporting video batches. Therefore the description does not accurately represent what this specific code chunk actually does.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest includes broad trigger phrases such as 'FCP', 'Final Cut', 'make video', 'export', and 'import media', which are likely to match ordinary user requests far outside the intended safe execution context. In agent routing systems, overbroad activation can cause this shell-capable skill to engage unexpectedly, leading to unwanted command execution, network access, file writes, or automation of local applications.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
bash scripts/tts-voiceover.sh \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
bash scripts/tts-voiceover.sh \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
bash scripts/auto-video-maker.sh \

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
bash scripts/auto-video-maker.sh \

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/audio-normalizer.sh (reported line 62)May include surrounding context.

sh
exit 1
fi

rm -f /tmp/audio-analysis.txt

echo ""
echo "💡 提示:"

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/auto-voiceover.sh (reported line 40)May include surrounding context.

sh
# Call Qwen TTS API
echo "🔊 正在生成语音..."

curl -s -X POST "http://127.0.0.1:7860/gradio_api/call/generate_voice_fn" \
    -H "Content-Type: application/json" \
    -d "{
        \"data\": [

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/auto-voiceover.sh (reported line 87)May include surrounding context.

sh
echo "   http://127.0.0.1:7860"
fi

rm -f /tmp/tts-response.json

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script tells users it will generate subtitle files named from the input video, but it only writes temporary SRTs under /tmp and then deletes them at the end. This is dangerous because downstream automation or users may trust the success message, assume subtitles were produced, and proceed with missing or incorrect artifacts, causing data integrity and workflow failures.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/multi-lang-subtitles.sh (reported line 135)May include surrounding context.

sh
echo "2. 检查并调整时间轴"
echo "3. 导出时选择嵌入字幕"

rm -f /tmp/asr-result.json /tmp/chinese-subtitles.srt /tmp/translated-subtitles.srt

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill advertises and invokes shell-capable tooling (bash, osascript, curl, ffmpeg) but does not declare any explicit tool scope or permission boundary. In an agent ecosystem, missing scope metadata increases the chance the skill is auto-invoked with broader-than-expected execution rights, enabling filesystem writes and command execution without clear user or platform controls.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill text blurs the line between being an editing assistant and a fully automated production pipeline, without clearly stating when it should provide advice versus execute commands. That ambiguity is more dangerous here because the documented workflows include shell execution, local service calls, file creation, downloads, and AppleScript automation, increasing the chance of unintended side effects from normal conversation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script's user-facing messages are primarily in Chinese, including usage, status, errors, and completion output. This imposes a specific language on all users without opt-in or documentation that the skill is intended only for a Chinese-speaking or region-specific audience, which matches the locale-policy violation criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script's usage text, status messages, and instructions are consistently presented in Chinese, including the primary user interaction strings. This imposes a specific language/locale on users without any opt-in, fallback, or documented justification, which matches the language-policy violation criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The user-facing text throughout the script is presented only in Chinese, including usage, status, and next-step instructions. This imposes a specific language on all users without offering a choice or documenting a justified locale restriction, which matches the language/locale policy violation criteria.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.