Back to skill

Security audit

YouTube Channels

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly aligned with YouTube channel lookups, but it also directs agents to collect and persist a TranscriptOut API key using under-specified credential-handling steps.

Review before installing. Use this skill only if you are comfortable sending YouTube channel handles, URLs, IDs, and search terms to TranscriptOut and spending TranscriptOut credits. Configure TRANSCRIPTOUT_API_KEY through a dedicated secret manager or trusted environment-secret mechanism rather than pasting it into chat or storing it in shell profiles or project files.

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:20
Finding

Insecure API Credential Collection, Temporary Storage, and Persistence

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. ``` At `references/auth-setup.md:51-54`: ```markdown **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. ``` At `references/auth-setup.md:105-108`: ```markdown 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. ``` At `references/auth-setup.md:158-168`: ```markdown ## 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 workflow instructs the user to paste an API key into the conversation. Depending on the agent runtime, conversation content may be retained in transcripts, telemetry, debugging records, or tool logs ...[truncated 3284 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 (18)

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

This file is fundamentally mismatched with the declared purpose of a YouTube-channel lookup skill: it instructs the agent to create TranscriptOut accounts, handle OTP-based authentication flows, and manage API secrets. That capability expansion is dangerous because it introduces credential collection and account lifecycle actions unrelated to the advertised skill, creating strong risk of covert data harvesting or privilege escalation under false pretenses.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The instructions direct the agent to solicit user email addresses and API keys, perform sign-up/sign-in on the user's behalf, and persist secrets across future sessions. In the context of a YouTube lookup skill, this is unjustified sensitive-data collection and long-term secret storage, which could enable unauthorized use of user accounts or silent reuse of credentials well beyond the immediate task.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The invocation description is broad enough to trigger on ordinary user requests about YouTube channels, which can cause the agent to route more conversations than intended to this skill. Because the skill sends user-supplied channel names, handles, URLs, and search queries to a third-party API, overbroad triggering increases the chance of unnecessary external data disclosure and unintended paid API usage.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill does not clearly warn that user-provided channel identifiers and search terms will be transmitted to TranscriptOut, a third-party service. This weakens informed consent and can expose sensitive investigative interests, private target lists, or proprietary research queries to an external vendor when users may assume processing stays local to the agent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This skill is explicitly designed to transmit user-supplied data to an external API, including channel names, handles, URLs, IDs, and search queries, together with a bearer credential. In this context the transmission is expected functionality, but it still creates a real privacy and governance risk if users are not clearly informed or if sensitive targets are queried through the third party.

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/channel/latest · 1 credit

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The example shows direct transmission of a user-supplied channel identifier to TranscriptOut's API. Although this is core to the skill's purpose, it is still a genuine data-sharing surface and can reveal who or what the user is investigating to an outside provider.

Content

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

The ~15 most recent videos of a channel, served from its RSS feed: the fastest and cheapest way to check what a creator published recently.

bash
curl -s "https://api.transcriptout.com/v1/channel/latest?name=@kurzgesagt" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The catalogue endpoint transmits channel identifiers to a third party and can retrieve large amounts of metadata, increasing both privacy exposure and spend if triggered unnecessarily. In-channel catalogue collection may also reveal sustained monitoring of a creator or organization, which can be sensitive in some environments.

Content

Scanner excerpt · SKILL.md (reported line 52)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
94% confidence
Finding

Use of next_page_token continues third-party retrieval and can silently expand the volume of transmitted and received data over multiple requests. The risk is not the token itself, but that automation can make repeated external calls without clear user awareness, increasing data exposure and cost.

Content

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

md
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Next pages
curl -s "https://api.transcriptout.com/v1/channel/videos?next_page_token=TOKEN" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

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

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The ids_only mode enables bulk harvesting of up to 500 video IDs per page from a channel via a third-party service. In context this is legitimate functionality, but it increases the scale of external data acquisition and could facilitate high-volume monitoring or downstream bulk processing without adequate notice or constraints.

Content

Scanner excerpt · SKILL.md (reported line 60)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
97% confidence
Finding

This endpoint sends both the channel identifier and the user's search query to a third-party API, which can expose sensitive investigative terms, business interests, or personal concerns. The contextual danger is higher here than a plain channel lookup because the query text may contain the most sensitive user-provided content.

Content

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

Search inside one channel using YouTube's native relevance search. A result whose title lacks the query word is normal: it is relevance, not substring match.

bash
curl -s "https://api.transcriptout.com/v1/channel/search?name=@kurzgesagt&q=QUERY&limit=30" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The workflow guidance encourages live third-party retrieval as the default 'cheapest first' step, which can normalize sending user-specified targets externally even when the user may only want general information. The main risk is unnecessary third-party disclosure and paid API use from automatic routing.

Content

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

bash
# Cheapest first: what did they post lately?
curl -s "https://api.transcriptout.com/v1/channel/latest?name=@handle" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Whole catalogue as IDs when bulk work follows

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The workflow also promotes bulk ID retrieval, which broadens the amount of externally processed data and can support extensive monitoring. In a monitoring-oriented skill, this makes the privacy and cost implications more significant than a one-off lookup.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

Whole catalogue as IDs when bulk work follows

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

text

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file documents only channel endpoints (/channel/latest, /channel/videos, /channel/search), but the error rows refer to caption tracks, language selection, kind=auto, removed videos, and age-restricted transcript access. That is not merely incomplete documentation; it actively describes a different feature set than the code/documented API surface in this skill file.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
81% confidence
Finding

This step transmits the user's email address to an external service to register an account, which is a real data exfiltration event relative to the agent environment. While contacting a legitimate API can be acceptable in the right skill, here it is more dangerous because the skill's stated purpose is unrelated to TranscriptOut account creation, so the transmission lacks contextual justification.

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
84% confidence
Finding

This request sends a bearer access token to an external endpoint and participates in an OTP verification flow that culminates in API key issuance. Because the skill is unrelated to TranscriptOut authentication, this external transmission materially increases credential-handling risk and could facilitate unauthorized account access or secret acquisition if the skill is abused or modified.

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
89% confidence
Finding

The file instructs the agent to store an API key persistently and ensure it survives future sessions, but it does not require a clear user-facing warning about the risks of durable credential storage or obtain explicit consent for that retention. This increases the chance that a sensitive key will be stored in insecure locations, reused unexpectedly, or exposed to later processes or prompts.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This command transmits the stored API key in an Authorization header to an external service, proving the skill is designed to use and validate a long-lived secret. In isolation, key validation may be normal, but in this mismatched YouTube skill it confirms unauthorized expansion into persistent credential use and increases the blast radius if the key is mishandled or the environment is compromised.

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"

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes a skill for channel handles, recent uploads, full catalogues, and channel-local search, but the error table documents failures like 'No captions on that language/track' and suggests trying another language or auto-caption kind. Those behaviors relate to transcript retrieval rather than channel browsing, indicating the documented behavior does not align with the skill's declared purpose.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.