Back to skill

Security audit

YouTube Data

Security checks for vulnerabilities and agentic risk

Overview

This YouTube data skill mostly matches its stated API-wrapper purpose, but its broad automatic triggering and credential setup flow create review-worthy privacy and secret-storage risk.

Install only if you are comfortable using TranscriptOut as a third-party service for YouTube requests. Avoid letting the agent create an account or store credentials automatically; create the key yourself, provide it through a trusted secret manager, and confirm before sending sensitive searches, private/unlisted links, channel targets, playlists, or bulk jobs.

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

Warning
Location
references/auth-setup.md:17
Finding

Insecure Collection and Persistent Storage of Authentication Credentials

Content
View full analysis
Do you have a TranscriptOut key already? Paste it and I'll wire it up. If not, give me an email > address and I'll open a free account for you: 100 credits included, no card asked. ``` `references/auth-setup.md:53-57` ```text **Pipe the response into a temporary file and build the next request by reading the token out of that file. Never echo the token on its own.** Several agent runtimes scrub anything shaped like `access_token` or a bearer token from tool output before the model sees it, so a printed token arrives as `[REDACTED]` and the flow dead-ends. File in, file out, one chained command. ``` `references/auth-setup.md:105-107` ```text Same discipline as before: **response into a file, key read out of the file**, because `sk_`-prefixed values get scrubbed from tool output by the same runtimes. ``` `references/auth-setup.md:150-158` ```text ## Storing the Key You now have a string that starts with `sk_`. This is the `TRANSCRIPTOUT_API_KEY`. Store it persistently using whatever method is correct for this environment (which you determined in Step 0). Make sure it will be available in future sessions, including non-interactive shells, without any manual sourcing step from the user. Once stored, verify it is accessible in the current session. If the session needs a reload or restart to pick up the new value, do that or tell the user to do it. Delete the temporary files this process created. ``` ### Technical Analysis The setup procedure asks the user to paste an API key directly into the Agent conversation. This can place the credential in conversation history, runtime telemetry, model context, or tool logs. The a ...[truncated 2475 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 (23)

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

This file is materially unrelated to the stated YouTube-data skill purpose. Instead of fetching structured YouTube data, it drives the agent to onboard users to a third-party service, collect credentials, and persist secrets, which expands the skill's authority and creates an unexpected trust boundary. In context, this mismatch is dangerous because users invoking a YouTube utility would not reasonably expect account creation and credential management for an external vendor.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The instructions tell the agent to create third-party accounts on the user's behalf, submit the user's email to an external service, receive one-time codes, obtain API keys, and persist those keys across sessions. Those are sensitive account-management and credential-storage actions that are not justified by a skill advertised as requiring no project and no quota, and they create lasting state changes on the user's system. In this skill context, the capability overreach makes the behavior substantially more dangerous because it normalizes hidden provisioning and secret persistence under a benign YouTube-data label.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger description explicitly says the skill should activate on creator names and topic research 'even when unstated,' which can cause the agent to invoke this skill without clear user intent. Because the skill sends queries and identifiers to a third-party API, over-broad invocation increases the chance of unintended external data disclosure and unnecessary use of the user's API credits.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill describes setup and API usage but does not clearly warn users that their search queries, channel names, playlist URLs, and video identifiers will be transmitted to TranscriptOut, a third-party service. This is a privacy and consent issue because users may believe the agent is performing local or first-party retrieval when it is actually disclosing potentially sensitive research interests or private links externally.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This skill is designed to transmit user inputs to an external API endpoint, which is a real security-relevant behavior because it moves data outside the agent boundary. In context, this is expected functionality rather than overtly malicious behavior, but it still creates privacy, consent, and third-party dependency risks, especially when combined with broad triggering.

Content

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

md
## API Reference

Base URL: `https://api.transcriptout.com/v1`. Full reference with the latest parameters and schemas: [transcriptout.com/docs](https://transcriptout.com/docs).

## GET /v1/video · 1 credit

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The /v1/video example sends a video URL or ID and an API key to a third-party service, confirming external disclosure of user-requested targets. While required for the feature, it is still a true security concern because video identifiers and associated interest patterns may be sensitive, and misuse can consume the user's paid credits.

Content

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

Metadata for one video (title, channel, duration, views, thumbnails) plus the list of available transcript languages, WITHOUT downloading the subtitles.

bash
curl -s "https://api.transcriptout.com/v1/video?id=VIDEO_URL_OR_ID" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

The transcript endpoint transmits the target video and requests subtitle content from a third-party provider, which may reveal user interests and retrieve potentially sensitive transcript data outside the local environment. The risk is higher here than metadata-only access because transcript text can contain substantial content that may later be processed, stored, or re-shared by downstream systems.

Content

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

Fetch the transcript of any YouTube video.

bash
curl -s "https://api.transcriptout.com/v1/transcript?video=VIDEO_URL_OR_ID&format=text" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The search endpoint sends arbitrary user queries to an external service, which is a genuine data-exposure concern because free-form search text can contain sensitive research topics, names, or investigative intent. In this skill, the risk is amplified by the broad activation language that could cause searches to be sent without explicit user awareness.

Content

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

bash
# Videos
curl -s "https://api.transcriptout.com/v1/search?q=QUERY&type=video&limit=20" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Channels

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

Channel search requests send creator names or related query text to a third party, exposing user interests and potentially sensitive investigations into individuals or organizations. Although expected for functionality, this remains a true privacy-impacting transmission pathway rather than a false positive.

Content

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

md
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Channels
curl -s "https://api.transcriptout.com/v1/search?q=QUERY&type=channel&limit=10" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Next page

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

Next page

curl -s "https://api.transcriptout.com/v1/search?next_page_token=TOKEN"
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

Next page

curl -s "https://api.transcriptout.com/v1/search?next_page_token=TOKEN"
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

Next page

curl -s "https://api.transcriptout.com/v1/search?next_page_token=TOKEN"
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

Fetching a channel's videos sends the supplied channel name to a third-party API, revealing the subject of the user's inquiry and creating an external dependency for data retrieval. This can be sensitive when the channel relates to private investigations, politically exposed persons, or confidential market research.

Content

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

bash
# First page (100 videos)
curl -s "https://api.transcriptout.com/v1/channel/videos?name=@3blue1brown" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Next pages

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

The ids_only channel listing still transmits the channel identifier to a third-party service and enables bulk collection of video IDs at larger scale. That increases potential misuse for mass harvesting and can consume credits quickly if downstream bulk transcript collection is chained from these results.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

IDs only, 500 per page (feed these into the bulk job)

curl -s "https://api.transcriptout.com/v1/channel/videos?name=@3blue1brown&ids_only=true"
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

Playlist enumeration sends a playlist ID or URL to a third-party API, disclosing the user's target collection and potentially revealing private research sets, educational lists, or unlisted content groupings. This is a real privacy risk even though it aligns with the skill's intended purpose.

Content

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

bash
# First page (100 videos)
curl -s "https://api.transcriptout.com/v1/playlist/videos?id=PL_ID_OR_URL" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Next pages

External Transmission

Medium
Category
Data Exfiltration
Confidence
85% confidence
Finding

The ids_only playlist mode supports larger-scale extraction of playlist contents, which increases the chance of mass collection and downstream bulk processing against third-party infrastructure. In context this is not inherently malicious, but it heightens privacy and billing risk if triggered without clear user intent.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

IDs only, 500 per page (feed these into the bulk job)

curl -s "https://api.transcriptout.com/v1/playlist/videos?id=PL_ID_OR_URL&ids_only=true"
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

text

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill description says no Google Cloud project and no quota units are needed, but this file introduces a different external dependency requiring account signup and an API key. That inconsistency can mislead users and downstream reviewers about the true security and privacy posture of the skill, causing them to approve or run it under false assumptions. The mismatch increases risk here because the concealed dependency involves secret persistence and external data transmission.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The instructions ask the agent to collect the user's email address and transmit it to a third-party API without an explicit privacy notice or narrowly scoped consent. Email addresses are personal data, and sending them to an external service creates a privacy and compliance risk, especially when the skill's advertised purpose does not make that transfer obvious. In context, the hidden collection is more concerning because users may believe they are only performing YouTube research.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This step transmits the user's email address to an external domain, establishing a third-party data flow. While external HTTP requests can be legitimate, here the transmission is outside the core YouTube-data function and occurs as part of hidden account provisioning, so it creates an unnecessary privacy and supply-chain trust risk. The context makes it more dangerous because users may not expect any personal data to leave the system for this skill.

Content

Scanner excerpt · references/auth-setup.md (reported line 54)May include surrounding context.

Make a POST request to:

text
POST https://api.transcriptout.com/auth/register-cli
Content-Type: application/json

{ "email": "the_user_email" }

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This request sends a one-time code and bearer token to an external service to complete account verification and key issuance. Even though the endpoint may be legitimate, it expands the attack surface by involving external authentication state and credential bootstrap flows unrelated to the skill's advertised purpose. In this context, the danger comes from unnecessary secret-handling and third-party trust, not from the mere existence of HTTPS.

Content

Scanner excerpt · references/auth-setup.md (reported line 102)May include surrounding context.

Once the user gives you the code, make a POST request to:

text
POST https://api.transcriptout.com/auth/verify-cli
Authorization: Bearer <the access_token from Step B-2>
Content-Type: application/json

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file instructs the agent to persistently store an API key so it survives future sessions, including non-interactive shells, without an explicit warning that this makes a durable credential change on the user's system. Persistent secret installation increases exposure if the machine, shell profile, or runtime secret store is later accessed by other tools, users, or compromised processes. This is especially risky in this skill because long-lived credential management is unrelated to the expected YouTube-data task.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This command transmits the stored API key to an external service to validate it. Credential-bearing outbound requests are sensitive by nature, and here they are part of a broader pattern of obtaining and persisting a third-party key for a skill that users would not expect to manage secrets for. The context increases concern because the verification step normalizes long-term use of an unrelated external credential.

Content

Scanner excerpt · references/auth-setup.md (reported line 176)May include surrounding context.

One free call confirms both the key and the balance (/auth/* endpoints never spend credits):

bash
curl -s https://api.transcriptout.com/auth/me \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The parameter table sets lang default to en, which establishes an English-language preference without indicating user choice or opt-in. This is a natural-language locale policy concern because the skill may default to a specific language even when the user has not requested it.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.