Back to skill

Security audit

yt-agent

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-built for YouTube summarization, but it should be reviewed because it mandates running an unpinned external CLI and can enable browser-cookie access.

Install only if you trust the `yt-mem-ai` package source and are comfortable with it running under your local agent account. Prefer a pinned, reviewed version or sandboxed execution, and require explicit approval before enabling Chrome-cookie access or storing proxy/API credentials in the CLI config.

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

Error
Location
SKILL.md:10
Finding

Unpinned Third-Party Package Execution Through uvx

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 10–16
Vulnerability Type: Unpinned external dependency execution
Risk Level: High

Vulnerable Code

markdown
One entry point for turning YouTube into artifacts. All data access goes through
the **`uvx yt-mem-ai <cmd>`** CLI (see [[yt]] for the full command
surface) — never touch the LanceDB store directly. Always invoke it exactly that
way: zero-install and cached, so nothing has to be on PATH. **Do not go looking
for a `yt-ai` binary** — the native plugins install no package. (Only inside a
source checkout may you use `uv run yt-ai <cmd>`.) **Single-quote every URL** —

Related instructions expand the dependency's potential access to browser authentication data at SKILL.md, lines 42–44:

markdown
- Blocked instead? `Sign in to confirm you're not a bot` → run
  `uvx yt-mem-ai config set YT_COOKIES_BROWSER chrome` and retry;
  `captions blocked ... IP rate-limited` → cookies won't help, see

Technical Analysis

The Skill mandates execution of yt-mem-ai through uvx without specifying an exact, audited package version or an integrity hash. Consequently, the effective implementation is not fixed by the reviewed Skill content. Package resolution may retrieve and execute a release whose behavior differs from the version originally reviewed.

This creates a supply-chain trust boundary in which the external package is given the local Agent user's execution privileges. The package processes user-provided URLs, downloads content, reads and writes local application data, and generates artifacts. The optional Chrome-cookie configuration further increases exposure because the executed dependency may be permitted to obtain authentication material from a local browser profile.

The issue does not establish that the current package is malicious. The vulnerability is that future package compromise, account takeover, malicious p ...[truncated 1906 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace the unversioned invocation with an exact, reviewed package version, such as an explicit yt-mem-ai==X.Y.Z package specification supported by the execution environment.
  2. Use a lockfile or equivalent dependency manifest containing cryptographic hashes for the package and all transitive dependencies.
  3. Configure package resolution to use a trusted, explicitly defined package index and disable untrusted extra indexes to reduce dependency-confusion exposure.
  4. Record the verified package source, publisher, version, and integrity values in the Skill documentation.
  5. Prefer vendoring or distributing reviewed implementation code with the Skill when feasible, rather than dynamically resolving executable code at invocation time.
  6. Execute the CLI in a sandbox with minimal filesystem access, restricted environment variables, and outbound network access limited to required services.
  7. Require explicit, informed user approval before enabling browser-cookie access. Run cookie-dependent operations in a separately constrained process and avoid exposing unrelated browser profiles.
  8. Establish a dependency update process that requires security review and integrity verification before changing the pinned version.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (23)

YARA rule 'info_stealer': Information stealer patterns (credential harvesting, browser data theft) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

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

md
em-ai show <video_id> --json`.
   - `not found` and you have a URL → `uvx yt-mem-ai fetch '<url>' --captions-only`. If that
     prints `no captions available: ...`, fall back to `uvx yt-mem-ai fetch '<url>' --whisper`
     (downloads audio + transcribes — slower, always yields a transcript).
   - Blocked instead? `Sign in to confirm you're not a bot` → run
     `uvx yt-mem-ai config set YT_COOKIES_BROWSER chrome` and retry;
     `captions blocked ... IP rate-limited` → cookies won't help, see
     [[yt]]'s **When YouTube blocks a fetch**.
   - Already ingested → instant, no download (`is_seen` skips it).
2. **Reuse if present:** if the `show --json` output has a non-null `summary`,
   reuse it — skip generation unless the user asked for a fresh artifact.
3. **Anchor highlights:** for each candidate highlight phrase, run
   `uvx yt-mem-ai search "<phrase>" --vector -k 3` and use the `MM:SS` from a returned
   line whose `video_id` matches. Never invent timestamps.
4. **Prod

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The skill repeatedly instructs the agent to invoke uvx yt-mem-ai without a pinned package version. Because uvx resolves and executes the latest available package by name, a future malicious or compromised release could change behavior and run arbitrary code in the agent environment. The skill context increases risk because this command is the core execution path for nearly every workflow.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

This invocation references uvx yt-mem-ai without version pinning, creating a supply-chain risk. An attacker who compromises the package publisher or distribution channel could ship a malicious update that the agent would execute automatically when following the skill instructions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The skill tells the agent to use an unpinned external CLI package. That makes execution nondeterministic and opens the door to arbitrary code execution if the package is later trojanized or replaced upstream.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Using uvx yt-mem-ai show without pinning the package version exposes the environment to upstream package compromise. Since this is part of the standard ingest flow, it is a realistic and recurring code execution path rather than a dormant reference.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

This unpinned uvx yt-mem-ai fetch command can execute whatever code the latest published package contains. Because it is used on demand for missing videos, it broadens the attack surface to common runtime operations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The fallback uvx yt-mem-ai fetch ... --whisper command is also unpinned, so the same supply-chain execution risk applies. Because this path may download and transcribe content, a malicious package could abuse broader filesystem or network access while appearing routine.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

This config command still relies on the same unpinned uvx yt-mem-ai package, so it inherits the same supply-chain risk. Even configuration-only commands are dangerous when the package itself is resolved dynamically and executed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The search command is invoked via an unpinned package name, allowing potentially malicious upstream changes to execute inside the agent environment. Since the skill depends on this command to generate timestamps, it is part of a trusted workflow and thus attractive for supply-chain abuse.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The save-summary command uses an unpinned external package, exposing the agent to arbitrary code changes from upstream releases. Because it handles generated content and persistence, a malicious version could tamper with stored data or exfiltrate it.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The daily digest flow starts with unpinned uvx yt-mem-ai discover, creating a repeated supply-chain trust issue. Since batch workflows may process many videos automatically, compromise here could affect large amounts of data in one run.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

fetch-pending is invoked through an unpinned package, so a malicious update could execute arbitrary code during a routine batch ingest. The automation and breadth of this command make the trust boundary especially important.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The list --status stream command uses the same unpinned package reference. While lower sensitivity than fetching media, it still executes upstream code and therefore represents a genuine supply-chain risk rather than a mere style issue.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

Direct fetch commands for live streams are unpinned and can therefore execute a compromised package release. In context, these commands may be used interactively and repeatedly, increasing exposure over time.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The summarized/transcribed listing workflow also depends on an unpinned package. Because these commands are part of the review path that gates further analysis, a malicious package could alter results, hide items, or execute arbitrary code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

Channel enumeration via uvx yt-mem-ai channel-list is unpinned and subject to the same supply-chain execution risk. Since it operates on user-provided URLs, it may be invoked often in group workflows, making compromise practical.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Group ingestion uses unpinned uvx yt-mem-ai fetch, which is a genuine dependency-execution vulnerability. This path processes arbitrary user-specified sets of videos, so it is a high-frequency trust boundary and should not float to the latest package version.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The configuration guidance for changing the embedding model is routed through an unpinned package. Even though it appears operational, it still executes code from a mutable upstream package and thus carries the same supply-chain risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

This additional config set reference is unpinned and vulnerable to package-level compromise. Repeated unpinned examples across the skill normalize insecure execution and increase the chance the agent will run an unexpected release.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The reembed operation invokes an unpinned package and may process a large existing library, so arbitrary code in a compromised release could have broad access and impact. This is especially risky because such maintenance commands are trusted and may run unattended.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The final config guidance again relies on unpinned uvx yt-mem-ai, reinforcing the same supply-chain vulnerability. The broad claim that config can change backend and credentials makes package trust especially important.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

This repeated unpinned reference remains a true vulnerability because it directs execution of mutable upstream code. Repetition across the document increases operational likelihood, not safety.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The concluding config set/list reference still executes an unpinned external package and therefore presents a real supply-chain risk. Because the command can reconfigure environment settings, a malicious package could both execute code and manipulate future behavior.

Content

No source excerpt is available for this finding.