Back to skill

Security audit

yt-mem-ai

Security checks for vulnerabilities and agentic risk

Overview

This YouTube helper is coherent, but it should be reviewed because it runs an always-latest external CLI and can persist credentials or use browser cookies.

Review before installing. Use only if you trust the `yt-mem-ai` package source and are comfortable with the agent running the latest package from the registry. Avoid enabling browser-cookie access or storing Webshare credentials unless necessary; prefer a dedicated browser profile, project-level secrets kept out of version control, and remove credentials when finished.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:11
Finding

Unpinned Remote Package Retrieval and Execution

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 11–17
Vulnerability Type: Remote execution of an unpinned, mutable package
Risk Level: High

Vulnerable Code

markdown
## Prereqs

- **Always invoke the CLI as `uvx yt-mem-ai <cmd>`** — zero-install, cached,
  always latest. **Nothing is installed on PATH**: the native plugins ship skills
  only, so do NOT go hunting for a `yt-ai` binary, a wrapper script, or a venv.
  (Only inside a source checkout of this repo may you use `uv run yt-ai <cmd>`.)

Technical Analysis

The Skill explicitly requires uvx to resolve and execute the “always latest” version of the externally distributed yt-mem-ai package. No exact version, package hash, lockfile, signature, or trusted artifact digest is specified.

Consequently, the effective executable payload can change after this Skill has been reviewed. Every documented operation crosses this remote code-execution boundary, including commands that later receive access to local configuration, media files, browser cookies, proxy credentials, and subprocess functionality such as ffmpeg.

This is a supply-chain trust issue rather than evidence that the current yt-mem-ai release is malicious. Exploitation depends on compromise of the package publisher, distribution account, registry, release pipeline, or another mechanism capable of replacing the package version selected by uvx.

Attack Path

  1. An attacker compromises the package publisher, release pipeline, registry account, or another relevant distribution component.
  2. The attacker publishes a malicious version of yt-mem-ai as the latest release.
  3. A user or agent follows the Skill and executes any uvx yt-mem-ai command.
  4. uvx resolves and executes the attacker-controlled release because no reviewed version or digest is pinned.
  5. The malicious package runs with the privileges of the invoking user.
  6. It can inspect access ...[truncated 854 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace “always latest” execution with an exact, reviewed package version:
    bash
    uvx --from 'yt-mem-ai==<reviewed-version>' yt-mem-ai <cmd>
    
    Adjust the syntax to the package manager’s supported version-pinning mechanism.
  2. Verify package artifacts using cryptographic hashes or trusted signatures where supported.
  3. Maintain a lockfile or equivalent immutable dependency manifest for all transitive dependencies.
  4. Upgrade only through an explicit process involving source review, artifact verification, and security testing.
  5. Run the package with restricted filesystem and network permissions, especially when browser cookies or proxy credentials are available.
  6. Separate low-risk read-only operations from commands requiring media downloads, subprocess execution, or credential access.
  7. Document the trusted package registry and reject unexpected indexes, mirrors, or dependency sources.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:84
Finding

Persistent Secret Storage and Broad Browser Cookie Access

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 84–95 and 117–133
Vulnerability Type: Plaintext-style credential persistence and excessive access to browser authentication material
Risk Level: Medium

Vulnerable Code

markdown
### Configure & maintain
```bash
uvx yt-mem-ai config list                     # every setting, value, and source
uvx yt-mem-ai config set KEY VALUE            # e.g. WEBSHARE_PROXY_USERNAME, YT_EMBEDDING_MODEL
uvx yt-mem-ai config get KEY [--reveal]       # secrets masked unless --reveal
uvx yt-mem-ai config unset KEY                # remove from the config file

Use this to reconfigure the engine on request — set Webshare proxy creds, switch the embedding model/backend, point at a cookies browser, change caption languages — without hand-editing .env. set writes the global config (~/.yt-mem-ai/config.env) by default; add --project for ./.env. Only known .env keys are accepted.

text

```markdown
| Error | Cause | Fix |
|---|---|---|
| `YouTube bot check: ... Sign in to confirm you're not a bot` (exit 4) | yt-dlp (audio/metadata) needs a logged-in session | `uvx yt-mem-ai config set YT_COOKIES_BROWSER chrome` (or `brave`/`firefox`/`edge`/`safari`), then re-run |
| `captions blocked by YouTube (IP rate-limited)` (exit 3) | the transcript API is IP-blocked | cookies do **not** help — retry later, or set `YT_CAPTIONS_USE_WEBSHARE true` + `WEBSHARE_PROXY_USERNAME`/`WEBSHARE_PROXY_PASSWORD` |
| `no captions available` (exit 1) | video has no caption track | re-run with `--whisper` (downloads audio, slower) |

Set these with `config set`, not `KEY=value uvx …`: the config file persists
across runs, an env var only covers the single command you prefixed.
On macOS the first Chrome-cookie read may raise a Keychain prompt — if a command
hangs, tell the user to approve it.

Technical Analysis

The Skill directs users to persist Webshare ...[truncated 2732 chars]

Remediation
View remediation

Remediation Suggestions

  1. Store proxy passwords in an operating-system credential manager rather than an environment-format file.
  2. If file-based storage is unavoidable, create the file with owner-only permissions, validate those permissions before use, and refuse operation when the file is accessible to other users.
  3. Ensure project-level .env files are excluded from version control by default and warn users before placing secrets inside a project directory.
  4. Require explicit user confirmation before enabling browser-cookie or Keychain access.
  5. Use a dedicated browser profile containing only the minimum YouTube session required for this workflow.
  6. Enable cookie access only for the individual blocked operation and disable it afterward where practical.
  7. Do not run unrelated read-only commands with access to browser cookies or proxy secrets. Separate credential-requiring commands into a restricted execution context.
  8. Preserve secret masking and add safeguards around config get --reveal, such as interactive confirmation and prevention of secret output in logs.
  9. Document credential rotation and revocation procedures for suspected exposure.
  10. Pin and verify the CLI package before granting it access to any credential or browser session.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (36)

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

High
Category
YARA Match
Confidence
82% confidence
Finding

The instruction to configure YT_COOKIES_BROWSER to read a logged-in browser session resembles information-stealer behavior because it leverages browser-stored authentication material. In this skill context the stated purpose is to bypass YouTube bot checks, not credential theft, but it still creates real risk because it encourages access to sensitive browser cookies through an executable package.

Content

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

md
he **yt-mem-ai-desktop** repo
> (`yt-ai-desktop-serve`); it is not part of this engine CLI.

## When YouTube blocks a fetch

Two different blocks with two different fixes — read the message, don't guess.

| Error | Cause | Fix |
|---|---|---|
| `YouTube bot check: ... Sign in to confirm you're not a bot` (exit 4) | yt-dlp (audio/metadata) needs a logged-in session | `uvx yt-mem-ai config set YT_COOKIES_BROWSER chrome` (or `brave`/`firefox`/`edge`/`safari`), then re-run |
| `captions blocked by YouTube (IP rate-limited)` (exit 3) | the transcript API is IP-blocked | cookies do **not** help — retry later, or set `YT_CAPTIONS_USE_WEBSHARE true` + `WEBSHARE_PROXY_USERNAME`/`WEBSHARE_PROXY_PASSWORD` |
| `no captions available` (exit 1) | video has no caption track | re-run with `--whisper` (downloads audio, slower) |

Set these with `config set`, not `KEY=value uvx …`: the config file persists
across runs, an env var only covers the single command you prefixed.
On macOS the first Chro

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description is extremely broad and acts as an umbrella trigger for nearly any YouTube-related operation. Overbroad activation increases the likelihood that the skill is invoked in contexts the user did not intend, causing unnecessary execution of external tooling and expanding the attack surface.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill repeatedly instructs the agent to execute uvx yt-mem-ai without pinning a specific package version or artifact hash. Because uvx resolves and runs the latest available package, the behavior of this skill can change over time and could execute a compromised or malicious upstream release, creating a software supply-chain risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This invocation pattern uses uvx yt-mem-ai without a pinned version, so the skill depends on whatever package version is current at runtime. If the upstream package is hijacked or a bad release is published, the agent may execute attacker-controlled code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill recommends running an unpinned remote package via uvx, which is a classic supply-chain exposure. Since this is an execution path, compromise of the package publisher or dependency chain could directly affect the host where the skill is used.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The generic command form uvx yt-mem-ai <command> is unpinned and therefore non-deterministic. This makes the skill operationally unsafe because the same skill content may execute materially different code in future sessions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This fetch example relies on the latest uvx-resolved package rather than a reviewed version. Since the command downloads content and processes local/system resources, package compromise could lead to code execution or data access.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The transcript example invokes an unversioned package through uvx, exposing users to upstream release substitution. Because the skill strongly directs use of uvx, this risk is systemic rather than incidental.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The discover command is another execution path using an unpinned remote package. Supply-chain compromise would let an attacker influence all discovery workflows run through this skill.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

fetch-pending is documented through an unpinned uvx call, so runtime behavior can drift or become malicious with upstream changes. This is dangerous because the skill is intended as an operational entry point, increasing execution frequency.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The channel enumeration example still executes a latest-resolved package. An attacker controlling or compromising the package distribution could turn ordinary content operations into host compromise.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The list command uses the same unpinned uvx pattern, which is a direct supply-chain risk. Because the skill encourages frequent CLI use, the exposure is broad and persistent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The show example is unpinned, leaving the agent dependent on whatever code the package registry serves at runtime. A compromised or malicious release could abuse access to stored transcript and metadata content.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The status command continues the same unsafe package execution model. Even read-oriented commands can be dangerous when the executable itself is not fixed to a reviewed version.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The search command runs an unversioned package, which can introduce arbitrary code changes via normal package updates. Since search may be used as part of larger agent-driven workflows, compromise could cascade into many tasks.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The save-summary command is executed through an unpinned uvx package, so even write operations to the video library depend on mutable upstream code. This can enable tampering, exfiltration, or code execution if the package supply chain is compromised.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

uvx yt-mem-ai save-summary <video_id> "<summary_md>"
--highlights '' --qa ''

text
Do **not** write summaries free-hand here. For the model-generated analysis
(summary + timestamped highlights + Q&A + presentation, a subscription digest, or
a cross-video review), hand off to **[[yt-agent]]**.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The like command is another unpinned executable reference. The cumulative pattern across the file shows deliberate reliance on 'always latest,' which materially increases supply-chain exposure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The dislike example executes an unreviewed-at-runtime package version. This is a true vulnerability because the risk is in code acquisition and execution, not the specific command semantics.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The recommendation command uses uvx without version pinning, preserving the same supply-chain weakness. If exploited, attacker code would run in the context of the user invoking the skill.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The configuration listing example still resolves yt-mem-ai dynamically at runtime. Because config commands interact with settings and potentially secrets, package compromise would be especially sensitive here.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This config set example runs an unpinned package that may process credentials and other sensitive configuration values. A malicious upstream release could capture or misuse those inputs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill exposes commands for setting proxy usernames, passwords, and other sensitive configuration but does not explicitly warn that these are secrets or require careful handling. In an agent context, this can lead to credentials being entered into chat, logs, transcripts, or shell history and then persisted in a config file.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The config get example uses an unpinned runtime dependency, creating the same supply-chain execution risk. Because it can reveal secret values with flags like --reveal, the context increases potential damage.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The config unset example continues the unpinned execution pattern. While functionally simple, it still exposes the host to arbitrary upstream code execution risk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.