Back to skill

Security audit

YouTube Subscription

Security checks for vulnerabilities and agentic risk

Overview

This skill is aimed at managing YouTube subscriptions, but it needs Review because it can change a YouTube account and uses sensitive OAuth tokens through an unpinned third-party CLI.

Install only if you are comfortable granting a third-party CLI access to your YouTube account. Verify the yutu package source and version, protect the OAuth credential and token files, and require an explicit review/confirmation step before running insert or delete commands, especially bulk deletion.

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
references/setup.md:34
Finding
Unpinned and Unverified Third-Party CLI Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:15-18`; `references/setup.md:34-52` **Vulnerability Type**: Unpinned third-party dependency and unverified executable installation **Risk Level**: Medium ### Vulnerable Code `SKILL.md:15-18`: ```yaml install: - kind: node package: "@eat-pray-ai/yutu" bins: [yutu] ``` `references/setup.md:34-52`: ```bash # Node.js (all platforms) npm i -g @eat-pray-ai/yutu # macOS brew install yutu # Linux brew install yutu # Windows winget install yutu # Gopher go install github.com/eat-pray-ai/yutu@latest ``` ```markdown ### Other platforms Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH. ``` ### Technical Analysis The installation metadata and setup guide direct users to install a third-party command-line utility without pinning a reviewed version, commit, package digest, or binary checksum. The Go command explicitly selects `@latest`, while npm installation without a version also resolves a mutable current release. Package-manager formulas and the latest GitHub release are similarly mutable. Because the resulting `yutu` executable handles Google OAuth credentials and cached YouTube access tokens, its supply-chain integrity is security-sensitive. If the upstream package, repository, release account, package-manager formula, or publishing credentials are compromised, a malicious update could be distributed through the documented installation procedure. No evidence establishes that the current upstream package is malicious. The vulnerability is the absence of reproducible version selection and artifact verification, which prevents users from ensuring that the installed executable is the same artifact that was reviewed. ### Attack Path 1. An attacker compromises an upstream package registry account, source repository, release account, build pipeline, or package-manager distribution channel. 2. The attacker p ...[truncated 1507 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the npm package to a specifically reviewed version, for example: ```bash npm install -g @eat-pray-ai/yutu@<reviewed-version> ``` 2. Replace `@latest` in the Go installation command with a reviewed semantic version or immutable commit: ```bash go install github.com/eat-pray-ai/yutu@<reviewed-version-or-commit> ``` 3. Pin the version in `SKILL.md` installation metadata if the Skill schema supports version constraints or immutable package references. 4. Publish SHA-256 checksums and, preferably, cryptographic signatures for release binaries. Require users to verify both before placing a binary in `PATH`. 5. Document the expected package owner, repository, release version, checksum, and signature-verification procedure so users can detect package substitution. 6. Use lockfiles, package-manager lock mechanisms, or an internally mirrored and reviewed artifact where supported. 7. Avoid global installation where practical. Run the dependency in a constrained environment with access only to the files and network destinations required for YouTube API operations. 8. Request only the minimum necessary Google OAuth scopes and protect cached tokens with restrictive filesystem permissions. Do not expose credential or token contents in debug logs. 9. Establish a dependency-update review process that verifies source changes, build provenance, package signatures, and published artifact hashes before updating the pinned version. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (7)

Credential Access

High
Category
Privilege Escalation
Content
bins:
        - yutu
      config:
        - client_secret.json
        - youtube.token.json
    primaryEnv: YUTU_CREDENTIAL
    emoji: "\U0001F3AC\U0001F430"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
bins:
        - yutu
      config:
        - client_secret.json
        - youtube.token.json
    primaryEnv: YUTU_CREDENTIAL
    emoji: "\U0001F3AC\U0001F430"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
bins:
        - yutu
      config:
        - client_secret.json
        - youtube.token.json
    primaryEnv: YUTU_CREDENTIAL
    emoji: "\U0001F3AC\U0001F430"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
bins:
        - yutu
      config:
        - client_secret.json
        - youtube.token.json
    primaryEnv: YUTU_CREDENTIAL
    emoji: "\U0001F3AC\U0001F430"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The manifest description embeds many broad trigger phrases such as 'list subscription' and 'delete subscription' that can overlap with ordinary user requests. In agent-routing systems, this can cause the skill to activate unexpectedly and steer users into actions affecting YouTube account state, including subscription changes, without sufficiently precise scoping.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill documents destructive delete/unsubscribe capability but does not prominently warn that these actions modify the user's YouTube account state. In an agent setting, lack of an explicit warning and confirmation step increases the chance of accidental account changes or misuse through ambiguous prompts.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The documentation provides direct deletion commands for YouTube subscriptions without any warning, confirmation guidance, or emphasis that the action is destructive. In an agent skill context, this increases the chance that a user or automated system invokes irreversible account changes based on terse prompts, leading to unintended unsubscribes or bulk deletion.

Static analysis

No suspicious patterns detected.