Back to skill

Security audit

YouTube Transcript

Security checks for vulnerabilities and agentic risk

Overview

This skill is a small YouTube URL parser/demo, but it exposes a credential-like API key and claims paid transcript functionality it does not implement.

Review before installing. Treat this package as a demo URL parser, not a working paid transcript service. The publisher should remove and rotate the exposed key, disclose any external provider and data sharing, implement transcript retrieval, and avoid returning paid status without real payment verification.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:39
Finding

Hardcoded API Key Exposed in Skill Documentation

Content
View full analysis
Remediation
View remediation

other

Note
Location
handler.py:4
Finding

Unverified Payment Status and Misrepresented Transcript Functionality

Content
View full analysis
dict: url_match = re.search(r'(youtube\.com/watch\?v=|youtu\.be/)([a-zA-Z0-9_-]{11})', input_text) if not url_match: return {"error": "Please provide a YouTube URL"} video_id = url_match.group(2) return {"video_id": video_id, "status": "Transcript service ready", "demo": "Use youtube-transcript-api library to fetch actual transcript", "payment_status": "paid"} ``` Related documented claims include: ```markdown ## Features - Auto-detect YouTube video URL - Fetch available transcripts - Support multiple languages - Return timestamps ## Price - **0.001 USDT** per transcript ``` ### Technical Analysis The handler only extracts an 11-character YouTube video ID. It does not contact YouTube or another transcript provider, retrieve subtitles, return timestamps, enumerate languages, perform a payment transaction, or verify payment state. Despite the absence of payment validation, every syntactically accepted URL receives `"payment_status": "paid"`. This creates an integrity flaw if another component treats the returned field as authoritative. The documented transcript and pricing behavior also does not match the implementation. The code does not demonstrate an actual payment-system compromise by itself because no payment or authorization mechanism is implemented in the reviewed package. Exploitation requires a downstream integration that trusts this response. ### Attack Path 1. Submit any input containing a supported YouTube URL with an 11-character video ID. 2. The handler validates only the URL pattern and extracts the video ID. 3. No payment token, transaction identifier, account balance, receipt, or provid ...[truncated 857 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (4)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill publishes a hardcoded API key directly in SKILL.md, exposing a secret to anyone who can view the file. This is unrelated to the user-facing transcript functionality and could allow unauthorized use of the backing service, quota theft, billing abuse, or pivoting into other systems if the key has broader scope.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The example trigger "Show video subtitles" is ambiguous because it does not explicitly mention YouTube, a URL, or other scope constraints. In a manifest-style markdown skill description, this can cause unintended invocation for generic subtitle-related requests rather than only YouTube transcript retrieval.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill does not warn users that provided YouTube URLs or video identifiers are sent to an external service to retrieve transcripts. This creates a privacy and transparency issue because users may not realize their request data is being disclosed to a third party, which is more concerning when combined with the exposed API integration details.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file is labeled "YouTube Transcript", which indicates transcript retrieval capability. However, the implementation does not fetch or return any transcript data; it only parses a YouTube URL, extracts the video ID, and returns a demo/status payload saying a separate library should be used.

Content

No source excerpt is available for this finding.