Back to skill

Security audit

Youtube Transcriber Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but its command wrapper and install guidance expose users to avoidable arbitrary-code-execution and supply-chain risks.

Review before installing. Do not run the npx github examples or the curl-to-sudo NodeSource command as written; prefer a pinned release and inspect install scripts. Treat URL input as unsafe until the CLI wrapper is changed to spawn Python without a shell and validates exact YouTube hostnames.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
bin/transcribe.js:17
Finding

OS Command Injection Through the Node.js CLI Wrapper

Content
View full analysis
a.includes('youtube.com') || a.includes('youtu.be')); const lang = args.find(a => ['zh','en','ja','ko','auto'].includes(a)) || 'auto'; if (!url) { console.error('Error: Please provide a YouTube URL'); process.exit(1); } const script = path.join(__dirname, '..', 'transcribe.py'); execSync(`python3 ${script} ${url} ${lang}`, { stdio: 'inherit' }); ``` ### Technical Analysis The CLI wrapper constructs a shell command by directly interpolating `url` into a template string passed to `child_process.execSync`. Unlike argument-oriented process APIs, `execSync` passes the resulting string to a shell. Consequently, shell metacharacters embedded in the URL are interpreted as command syntax. The preceding validation is insufficient because it only verifies that the argument contains the substring `youtube.com` or `youtu.be`. It does not parse the value as a URL, restrict the protocol or hostname, or reject shell metacharacters. Although `lang` is selected from a fixed allowlist, the attacker-controlled `url` is enough to exploit the command. ### Attack Path 1. An attacker supplies a single quoted CLI argument containing a permitted hostname substring followed by shell syntax. For example: ```bash youtube-transcribe "https://youtube.com/watch?v=x; id" ``` 2. The substring check accepts the argument because it contains `youtube.com`. 3. The wrapper creates a command equivalent to: ```bash python3 /path/to/transcribe.py https://youtube.com/watch?v=x; id auto ``` 4. The shell treats the semicolon as a command separator. 5. The injected `id` command executes independently of the transcription process. 6. An attacker can replace `id` with commands that read files, alter system state, download additional ...[truncated 547 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
README.md:293
Finding

Unverified Remote Script Executed with Root Privileges in Installation Guidance

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Mutable Python Dependencies Installed Without Version or Integrity Pinning

Content
View full analysis
=2024.0.0 faster-whisper>=1.0.0 ``` `install.sh:20-23`: ```bash # Install dependencies echo "" echo "📦 Installing dependencies..." pip3 install -r requirements.txt ``` `openclaw-skill.json:24-29`: ```json "install": { "auto": true, "script": "install.sh", "commands": [ "pip3 install -r requirements.txt" ] } ``` ### Technical Analysis Both Python dependencies use open-ended minimum-version constraints. Every installation can therefore resolve to a different future release. No lock file, upper version boundary, artifact hash, or package signature requirement constrains the dependency artifacts installed by `pip`. The skill's automatic installation configuration invokes this mutable resolution process. Python package installation may execute build backend or setup-related code, while imported dependencies and their transitive packages execute code at runtime. This finding does not establish that the named packages are malicious. The risk is that an upstream compromise, malicious future release, compromised package-index account, or unsafe transitive dependency can be accepted automatically without a project update or integrity check. ### Attack Path 1. An attacker compromises an accepted package release, package publishing account, or relevant transitive dependency. 2. A malicious version is published with a version satisfying the open-ended constraint. 3. A user or OpenClaw installation process runs: ```bash pip3 install -r requirements.txt ``` 4. `pip` resolves the compromised version because it satisfies the `>=` requirement. 5. Malicious code may execute during package building or installation, or later when `yt_ ...[truncated 683 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (37)

Chaining Abuse

High
Category
Tool Misuse
Confidence
99% confidence
Finding

This is a classic chaining-abuse pattern: curl fetches remote content and immediately pipes it into a privileged shell. It combines network trust, no inspection, and root execution into a single command, making compromise trivial if the upstream script or transport is attacked.

Content

Scanner excerpt · README.md (reported line 293)May include surrounding context.

bash
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# macOS

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose says the skill transcribes YouTube videos, but the documented behavior also includes downloading remote audio content and generating summaries. This mismatch reduces informed consent and can hide materially different actions such as network retrieval and secondary AI processing, which may expose users to privacy, policy, or resource-consumption risks.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The documentation instructs users to execute npx github:BODYsuperman/Youtube-Transcriber-Skill <URL> without pinning to a specific commit, tag, or immutable release. That means users may fetch and run whatever code is currently in the referenced repository, creating a supply-chain risk if the repo is later changed, compromised, or force-pushed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

This second npx github: usage has the same issue: it directs users to run code directly from a mutable GitHub repository without version pinning. In a publish/install guide, this increases the chance of accidental execution of malicious or unintended code if the upstream repository changes.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The README instructs users to execute code directly from a GitHub repository via npx github:... without pinning a specific commit, tag, or package version. This creates a supply-chain risk because future repository changes could cause users to fetch and run different, potentially malicious code than what was originally reviewed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

This example again tells users to run the skill straight from GitHub with npx github:... and no fixed revision. Anyone controlling or compromising the repository later could change the executed code, turning documentation into an arbitrary code execution vector for all future users.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

Using npx github:... without version pinning means the command is nondeterministic and fetches whatever the repository currently serves. In a skill that users are encouraged to invoke from the terminal, this materially increases the chance of supply-chain compromise and silent code drift.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README describes downloading and processing YouTube content but does not clearly warn users that the tool makes outbound network requests, may expose request metadata to YouTube or proxy infrastructure, and may handle user-supplied proxy settings. This is a transparency and privacy-risk issue, especially for users operating in sensitive environments.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

This usage example repeats the same unpinned GitHub execution pattern. Because the README is effectively installation guidance, repeated unsafe examples amplify the likelihood that users will run mutable remote code without review.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The README presents another npx github:... command without an exact version or commit. This exposes users to repository takeover, maintainer compromise, or malicious force-pushed changes that would execute on the user's machine.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

This instance is the same supply-chain issue: remote code execution from an unpinned GitHub source. In security terms, the danger is not the current code snapshot alone, but that the command delegates trust to any future state of the repository.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

Another README example normalizes execution of mutable GitHub content through npx. Since this is a CLI skill that may also install dependencies, a compromised repository could lead to arbitrary command execution, persistence, or credential access on user systems.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

This troubleshooting example still uses an unpinned npx github:... invocation, so even support guidance perpetuates the same supply-chain weakness. Including proxy usage makes the command more operationally likely in constrained environments, which does not reduce the remote-code risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The batch-processing example calls npx github:... in a loop, multiplying exposure by repeatedly downloading and executing unpinned remote code. That increases attack surface and makes compromise scalable across many invocations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

This is another unpinned GitHub execution reference with the same supply-chain implications. Repetition across the README indicates unsafe defaults rather than a one-off example, increasing practical risk to users following the docs.

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 · README.md (reported line 272)May include surrounding context.

bash
# Ubuntu/Debian
sudo apt-get install -y python3 python3-pip

# macOS
brew install python

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 · README.md (reported line 294)May include surrounding context.

bash
# Ubuntu/Debian
sudo apt-get install -y python3 python3-pip

# macOS
brew install python

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
98% confidence
Finding

The use of sudo -E preserves the caller's environment while running a remote script as root. This increases risk because attacker-controlled or unsafe environment variables can influence privileged execution, compounding the danger of already piping unaudited network content into a root shell.

Content

Scanner excerpt · README.md (reported line 293)May include surrounding context.

bash
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# macOS

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
98% confidence
Finding

The use of sudo -E preserves the caller's environment while running a remote script as root. This increases risk because attacker-controlled or unsafe environment variables can influence privileged execution, compounding the danger of already piping unaudited network content into a root shell.

Content

Scanner excerpt · README.md (reported line 293)May include surrounding context.

bash
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# macOS

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill indicates shell-capable behavior and external tooling dependencies, but it does not declare any tool scope or permissions boundary. In an agent environment, this can lead to execution with broader-than-expected privileges, making network access, file operations, or command execution less transparent to users and reviewers.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file’s description and usage guidance are predominantly presented in Chinese, and there is no indication that users can choose another language for the skill’s documentation or interaction. This can violate a language/locale policy when a skill forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script constructs a shell command with untrusted user input (url and lang) and passes it to execSync, which invokes a shell. Although url is filtered to contain YouTube-looking substrings and lang is selected from a fixed allowlist, an attacker can still supply shell metacharacters inside a matching argument such as https://youtube.com/watch?v=x;rm -rf /, leading to command injection and arbitrary command execution.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description is written as a fixed Chinese-language instruction ('自动转录...生成带时间戳的文字稿') with no indication that users can choose another language or locale. Under the stated policy, forcing a specific language without opt-in is a natural-language policy violation unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/transcribe.js:27