Back to skill

Security audit

youtube

Security checks for vulnerabilities and agentic risk

Overview

The skill is a plausible YouTube research helper, but it asks users to run mutable third-party installs and understates where network traffic and transcript data may go.

Review before installing. Use an isolated environment, pin and review the npm/Python/GitHub dependencies where possible, keep SKILLBOSS_API_KEY out of repositories and logs, and do not send sensitive or private transcript text to SkillBoss unless you intend that remote processing.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:24
Finding
Unpinned Third-Party Dependencies and Mutable Source Code Are Installed and Executed<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 24–30, 54–61, and 252–253 **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium ### Vulnerable Code Lines 24–30: ```bash npm install -g zubeid-youtube-mcp-server ``` ```bash # yt-dlp for transcript extraction pip install yt-dlp ``` Lines 54–61: ```bash # Build from source (if installed package has issues) cd /tmp git clone https://github.com/ZubeidHendricks/youtube-mcp-server cd youtube-mcp-server npm install npm run build ``` Lines 252–253: ```bash pip install --user yt-dlp # or pipx install yt-dlp ``` ### Technical Analysis The installation instructions do not pin exact npm or Python package versions, verify package integrity, or lock transitive dependencies. The source-build fallback also clones the current state of a remote repository without selecting a reviewed commit or verifying a signature or checksum. The global npm installation and the source-build workflow may execute package lifecycle and build scripts. Consequently, the effective code executed by users can change after this Skill has been reviewed. A compromise of the package registry entry, upstream maintainer account, Git repository, default branch, or any transitive dependency could introduce arbitrary code into the installation process. The source repository is cloned into the shared `/tmp` directory using a predictable directory name. Although the audit did not establish a concrete local attack through that path, isolated and uniquely named build directories would provide stronger protection. The dependencies are relevant to the declared YouTube research functionality, but global installation, mutable source retrieval, and unverified build-script execution exceed the minimum safe privileges required to provide that functionality. ### Attack Path 1. An attacker compromises the upstream npm package, Python package, Git repository, maintainer account, or a transitive dependency. 2. The atta ...[truncated 1300 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin exact npm and Python package versions rather than installing the latest available releases. 2. Commit and enforce dependency lockfiles with integrity hashes for all transitive dependencies. 3. Pin the Git workflow to a specific, reviewed commit hash instead of the mutable default branch. 4. Verify release signatures, provenance attestations, or published checksums before installation. 5. Avoid global npm installation. Install dependencies in a dedicated, least-privileged project directory or isolated container. 6. Use a Python virtual environment or `pipx` with a pinned version and verified package source. 7. Review package lifecycle scripts and disable them with `--ignore-scripts` where the dependency can operate without them. 8. Build in a uniquely created private temporary directory rather than a predictable shared `/tmp/youtube-mcp-server` path. 9. Run dependency installation without unrelated secrets in the environment. Provide `SKILLBOSS_API_KEY` only to the process that needs to authenticate. 10. Periodically scan pinned packages and lockfiles for known vulnerabilities and unexpected ownership or provenance changes. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (9)

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The examples force `--sub-lang en`, which instructs users to retrieve English subtitles only. This is a natural-language/locale constraint presented without opt-in, alternatives, or justification, so it can violate language-choice policy expectations.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The manifest describes a YouTube skill for searching videos, channel info, video details, and transcripts using SkillBoss API Hub or yt-dlp fallback. The documented workflow at these lines adds a separate capability: sending transcript contents to a general chat/pilot endpoint for summarization and analysis, which is not part of the stated retrieval-focused scope.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The transcript analysis example sends full transcript content to an external API, but the documentation does not provide a clear warning that potentially sensitive third-party content may be transmitted off-host. Users may unknowingly upload private, copyrighted, or confidential material to SkillBoss API Hub for LLM processing.

External Transmission

Medium
Category
Data Exfiltration
Content
import requests, os

SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
API_BASE = "https://api.skillbossai.com/v1"

def pilot(body: dict) -> dict:
    r = requests.post(
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
import requests, os

SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
API_BASE = "https://api.skillbossai.com/v1"

def pilot(body: dict) -> dict:
    r = requests.post(
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
API_BASE = "https://api.skillbossai.com/v1"

def pilot(body: dict) -> dict:
    r = requests.post(
        f"{API_BASE}/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,
Confidence
92% confidence
Finding
This code performs an outbound POST to SkillBoss API Hub and can transmit full transcript content to a third-party service. While external transmission is expected for a cloud API, the risk is real when sensitive transcript data is included without strong disclosure, minimization, or consent controls.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The security note claims all network calls are routed through SkillBoss API Hub, but the skill also instructs direct access to GitHub, YouTube, and likely subtitle endpoints via yt-dlp. This can mislead users about data flow and trust boundaries, causing them to expose API keys or content under false assumptions about where data is sent.

Missing User Warnings

Low
Confidence
91% confidence
Finding
The README tells users to place an API key in an environment variable or config file but does not warn that the key is a sensitive secret that must not be committed, logged, or shared. This can lead to accidental credential exposure in shell history, screenshots, public repositories, or copied config files, enabling unauthorized use of the SkillBoss account or API quota.

Description-Behavior Mismatch

Low
Confidence
93% confidence
Finding
The manifest limits the skill's purpose to search, metadata, and transcript fetching. This note states that yt-dlp can download audio as MP3, which is a materially broader media-extraction capability than the declared scope.

Static analysis

No suspicious patterns detected.