Back to skill

Security audit

Douyin Transcribe

Security checks for vulnerabilities and agentic risk

Overview

This skill performs the advertised Douyin transcription workflow, but its scripts expose user-supplied links and paths to unsafe shell execution and third-party services.

Review before installing. Use only in a restricted environment with non-sensitive files and credentials, avoid crafted or untrusted Douyin links, do not run it with elevated privileges, and do not rely on Feishu upload behavior without auditing and fixing the implementation. The shell command construction and /tmp dependency load should be remediated before normal use.

Vulnerability Patterns
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • 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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/transcribe.py:18
Finding

Shell Command Injection Through Untrusted Arguments and External URLs

Content
View full analysis
&1', timeout=90 ) ``` ```python rc, out, err = e(f'curl -L --max-time 120 -o "{path}" "{url}" 2>&1') ``` ```python rc, out, err = e( f'ffmpeg -i "{video_path}" -vn -acodec pcm_s16le -ar 16000 -ac 1 "{audio_path}" -y 2>&1 | tail -5', timeout=300 ) ``` ```python rc, out, err = e(f'coli asr --model sensevoice "{audio_path}" 2>&1', timeout=600) ``` ```python rc2, out2, err2 = e( f'uv run --with faster-whisper python3 -c "\n' 'from faster_whisper import WhisperModel\n' 'model = WhisperModel(\"small\", device=\"cpu\", compute_type=\"int8\")\n' 'segs, _ = model.transcribe(\"{audio_path}\", beam_size=5)\n' 'for s in segs: print(s.text, end=\"\", flush=True)\n' 'print()\n" 2>&1', timeout=600 ) ``` ### Technical Analysis The helper function executes every constructed command with `shell=True`. Several values interpolated into these commands are not trusted: - `douyin_url` comes directly from the required `--url` command-line argument. - Paths are derived from the user-controlled `--output-dir` argument. - `videoUrl` and `coverUrl` are extracted from traffic and DOM content produced by the external `hellotik.app` service. - `audio_path` is also embedded inside a Python source string passed through a shell. Surrounding values with double quotes is not an adequate shell-escaping mechanism. Shell command substitution remains active inside double quotes, and embedded quote or shell metacharacter sequenc ...[truncated 1677 chars]
Remediation
View remediation

T07 · Tool Hijacking and Spoofing

Error
Location
scripts/get_video_url.js:7
Finding

Executable Node.js Dependency Loaded From a Predictable Temporary Directory

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/transcribe.py:85
Finding

Unpinned Global and Runtime-Resolved Dependencies

Content
View full analysis
&1', timeout=600 ) ``` ### Technical Analysis The installation instructions request the latest available global version of `@marswave/coli`, with no version pin or integrity constraint. The transcription fallback likewise asks `uv` to resolve `faster-whisper` without specifying a version or locked dependency set. Package installation and import can execute package-controlled code. Since the effective versions can change after the Skill has been reviewed, the audited source does not fully determine the code that will run. A compromised upstream release, dependency-chain compromise, or unexpected incompatible update could therefore alter execution behavior. This finding concerns unsafe dependency resolution. The audit found no evidence that the named packages are themselves malicious. ### Attack Path 1. A user follows the documented global installation command, or the fallback transcription branch invokes `uv`. 2. The package manager resolves the current package version and its transitive dependencies at that time. 3. A compromised or unexpectedly changed package is downloaded. 4. Installation hooks, imported Python modules, or CLI startup code execute under the user account running the Skill. 5. The dependency gains access to the media, transcript, environment, filesystem, and network ...[truncated 535 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/get_video_url.js:19
Finding

Chrome Sandbox Disabled While Processing an External Website

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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The manifest presents the skill as a download-and-transcribe pipeline, but the documentation also introduces Feishu cloud upload and knowledge-base synchronization behavior not clearly reflected in the primary purpose. Description-to-behavior mismatch is dangerous because users and orchestrators may authorize the skill expecting local transcription while it also moves data to third-party cloud services, creating consent and exfiltration risks.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The manifest presents the skill as a download-and-transcribe pipeline, but the documentation also introduces Feishu cloud upload and knowledge-base synchronization behavior not clearly reflected in the primary purpose. Description-to-behavior mismatch is dangerous because users and orchestrators may authorize the skill expecting local transcription while it also moves data to third-party cloud services, creating consent and exfiltration risks.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
97% confidence
Finding

This is a true tool-parameter abuse sink because a generic helper exposes shell execution through a single string command, making it easy for later callers to pass untrusted input into the shell. Within an agent skill, such wrappers are especially dangerous because they can be repurposed across workflows that process user URLs, filenames, or transcript content.

Content

Scanner excerpt · scripts/feishu_upload.py (reported line 19)May include surrounding context.

python
def e(cmd, timeout=30):
    r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
    return r.returncode, r.stdout, r.stderr

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
98% confidence
Finding

This is a direct tool-parameter abuse issue: the program funnels untrusted parameters into shell commands through a generic wrapper using shell=True. In this skill context, URLs are user-supplied and later embedded into shell commands for node/curl/ffmpeg/coli execution, making exploitation realistic and severe.

Content

Scanner excerpt · scripts/transcribe.py (reported line 18)May include surrounding context.

python
def e(cmd, timeout=120):
    """执行shell命令,返回 (returncode, stdout, stderr)"""
    r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
    return r.returncode, r.stdout, r.stderr

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill documents capabilities that require network access, shell execution, local file writes, and likely environment access, but it declares no explicit tool scope or permissions boundary. This creates an overbroad execution surface where an agent may invoke powerful actions without clear review or containment, increasing the risk of unintended downloads, file modification, or data exposure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest description and the operational instructions are written as Chinese-only usage guidance and trigger terms, with no indication that other languages are supported or that Chinese is a required locale. Per the policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill omits a clear disclosure that Douyin links and related request data are sent to third-party services such as hellotik and optionally Feishu. Lack of disclosure is dangerous because users may supply private or sensitive links believing processing is local, when the workflow actually shares data externally and may create third-party records.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill scope expands beyond local processing into optional Feishu upload and knowledge-base sync, which materially changes the data-handling model. Even if optional, this broadens the blast radius from local transcription to external persistence of potentially sensitive video content and transcripts.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This module introduces Feishu cloud-drive upload and knowledge-base publishing behavior beyond the stated Douyin download/transcription scope, which expands data exfiltration and persistence risk. In an agent environment, silently moving downloaded media or transcripts into third-party storage is security-relevant even if the current implementation is only partial, because the code and defaults normalize an unnecessary outbound integration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The hardcoded Feishu API integration and comments about cloud-drive/knowledge-base write permissions indicate the skill is designed to interact with external storage systems not justified by simple transcription. That broadens the attack surface and increases the risk of unauthorized publication of user-provided media, transcripts, or metadata.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
96% confidence
Finding

The helper e() executes arbitrary shell text with shell=True, which is unsafe if any part of cmd can ever be influenced by upstream inputs or future code changes. In this file it is currently used with a fixed Python one-liner, so there is no immediate user-controlled injection path shown, but the pattern still creates a real command-injection sink that is risky in an agent skill context where wrappers are often reused.

Content

Scanner excerpt · scripts/feishu_upload.py (reported line 19)May include surrounding context.

python
def e(cmd, timeout=30):
    r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
    return r.returncode, r.stdout, r.stderr

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill description says it is a full Douyin download plus speech-to-text/transcript pipeline for converting video/audio into text. In this file, the implemented behavior is limited to driving a browser to hellotik.app, submitting a Douyin URL, and scraping a direct video URL and cover image; there is no code for audio extraction, ASR, subtitle extraction, or text output beyond JSON containing URLs.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script automates a third-party service (hellotik.app) to process user-provided Douyin links, even though the skill description does not disclose that user data will be sent to an external site. This creates an undisclosed data-sharing boundary and adds supply-chain/privacy risk because the service can log inputs, change behavior, or serve malicious content to the automated browser.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The user-supplied URL is typed into a third-party webpage without validation, disclosure, or consent. Even if the input is 'just a link,' it may contain tracking parameters, private share tokens, or sensitive identifiers that are exposed to the external service and potentially retained in logs.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
97% confidence
Finding

The helper e() executes arbitrary shell strings with shell=True, and this script interpolates user-influenced values such as the Douyin URL directly into those strings. That creates a command injection path where crafted input can execute arbitrary OS commands under the agent's privileges.

Content

Scanner excerpt · scripts/transcribe.py (reported line 18)May include surrounding context.

python
def e(cmd, timeout=120):
    """执行shell命令,返回 (returncode, stdout, stderr)"""
    r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)
    return r.returncode, r.stdout, r.stderr

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script includes optional Feishu upload behavior that exceeds the stated download-and-transcribe function of the skill. Expanding capability to external data transmission increases the attack surface and can surprise users by moving sensitive media and transcripts to a third-party service.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Uploading transcription outputs, audio, and video to Feishu is not necessary for basic transcription and is not justified by the visible skill description. This introduces unnecessary exfiltration capability that could expose private content or be abused to move data off-system.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script can transmit video, audio, and transcript data to Feishu without an explicit warning or affirmative consent flow in the code path itself. For media transcription, this is sensitive content, so silent external transmission creates privacy and compliance risk even if the feature is optional.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file states the model is automatically downloaded via GitHub on first use and the technical flow uses hellotik.app to resolve the Douyin link, both of which require network access. This makes the overall skill not '完全离线' in practice, even if the transcription engine itself runs locally after setup.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The parameter list notes that --cleanup deletes local temporary video and audio files after completion, but it is presented as a normal option without any explicit caution about file deletion. Since this changes local data retention and removes generated artifacts, a brief warning would improve user awareness.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

The module docstring says it uploads video and cover files to cloud storage and creates knowledge-base documents, but the actual functions do not perform those actions. upload_drive_file unconditionally prints that credentials are needed and returns None, while do_upload only marks items as '待上传' without carrying out the upload.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The natural-language strings in the module docstring and CLI/user-facing output are exclusively in Chinese, which imposes a specific language/locale on users. There is no option to select another language or explanation that this skill is intentionally restricted to a Chinese-speaking or region-specific audience.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.