Back to skill

Security audit

YouTube Transcript

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its YouTube transcript purpose, but its account-signup shell examples handle user input unsafely enough to require review before installation.

Install only if you are comfortable using getyoutubetranscript.com and an API key. Avoid running the signup examples by direct text substitution; use a structured HTTP client or safely serialized JSON, validate the OTP as six digits, and do not save the API key persistently unless you explicitly choose to.

Vulnerability Patterns
  • 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
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:45
Finding
Shell Command Injection Through Unsafe User-Input Interpolation## Vulnerability Details **File Location**: `SKILL.md`, lines 45–59 **Vulnerability Type**: Shell command injection caused by unsafe JSON construction **Risk Level**: High The vulnerable instructions provide shell commands in which a user-supplied email address and one-time verification code are expected to be substituted directly into single-quoted JSON arguments: ```bash curl -s -X POST "https://getyoutubetranscript.com/api/v1/signup" \ -H "Content-Type: application/json" \ -d '{"email": "the_user_email"}' ``` ```bash curl -s -X POST "https://getyoutubetranscript.com/api/v1/signup/verify" \ -H "Content-Type: application/json" \ -d '{"email": "the_user_email", "otp": "123456"}' ``` ### Technical Analysis The Skill directs the Agent to insert user-controlled values into shell commands but does not require validation, shell-safe argument handling, or JSON serialization. The JSON body is enclosed in a single-quoted shell argument. If an Agent performs literal textual substitution, a value containing a single quote can terminate that argument. Additional shell syntax can then be interpreted as a separate local command. User consent to transmit an email address does not mitigate this issue because consent controls whether the network request is allowed, not whether the supplied value is safe to embed in shell source. JSON encoding alone is also insufficient if encoding is performed before unsafe interpolation into a shell command; the value must remain data throughout command construction. ### Attack Path 1. The Skill determines that no API key is available and asks the user for an email address. 2. A malicious user supplies an email-like value containing a single quote followed by shell control syntax and an attacker-selected command. 3. The Agent replaces `the_user_email` in the documented command with that value without using a safe serializer or separate argument channel. 4. The injected single quote cl ...[truncated 1222 chars]
Remediation
## Remediation Suggestions - Do not instruct the Agent to perform textual substitution inside shell command source. - Store the email address and OTP in separately quoted variables and use a JSON serializer such as `jq` to construct the request body: ```bash EMAIL="$USER_PROVIDED_EMAIL" OTP="$USER_PROVIDED_OTP" PAYLOAD="$(jq -n \ --arg email "$EMAIL" \ --arg otp "$OTP" \ '{email: $email, otp: $otp}')" curl --silent --show-error --fail-with-body \ -X POST "https://getyoutubetranscript.com/api/v1/signup/verify" \ -H "Content-Type: application/json" \ --data-binary "$PAYLOAD" ``` - Apply equivalent safe serialization to the initial signup request. - Validate the OTP against an exact six-digit allowlist pattern before invoking `curl`. - Validate the email for expected length and structure, while treating validation only as defense in depth rather than a replacement for safe command construction. - Prefer implementing signup as a dedicated script or structured HTTP tool whose API accepts individual data fields, avoiding generation of shell source entirely. - Preserve the existing explicit-consent requirement and continue restricting transmission to the documented HTTPS origin. - Add tests using values containing single quotes, double quotes, command substitutions, semicolons, newlines, and Unicode characters to verify that every value remains inert request data.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (4)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The code’s implemented behavior is narrowly limited to transcript retrieval. That aligns with one part of the description, but the declared purpose also claims several additional capabilities that are not represented in this code chunk: searching YouTube, resolving channel handles, listing playlist videos, and performing summarization/analysis/quoting. Since the evaluation asks whether the declared description accurately represents what the supplied code chunk actually does, this is a mismatch due to materially overclaiming capabilities beyond transcript fetching. Resource access is consistent with the transcript API, and there is no evidence of unrelated or hidden behavior.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill instructs use of shell/curl but does not declare an explicit tool scope such as allowed-tools or permissions. That creates an avoidable trust gap: an agent/runtime may grant broader shell capability than the skill actually needs, increasing the blast radius if the skill is modified, misused, or combined with prompt injection elsewhere.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
account (100 credits, no card required) and verify it with a 6-digit
   code. What email would you like to use?"* Only proceed once they've
   given you an email in response to that - don't reuse an email already
   present in this conversation for an unrelated purpose without asking.
2. Send the code:

   ```bash
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

External Transmission

Medium
Category
Data Exfiltration
Content
2. Send the code:

   ```bash
   curl -s -X POST "https://getyoutubetranscript.com/api/v1/signup" \
     -H "Content-Type: application/json" \
     -d '{"email": "the_user_email"}'
   ```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.