Back to skill

Security audit

YouTube API

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for YouTube data via TranscriptOut, but its setup asks the agent to handle and persist API credentials in an under-specified way that could expose the key.

Review before installing. Use this only if you are comfortable sending YouTube URLs, search terms, channel handles, playlist IDs, and an API key to TranscriptOut. Prefer creating the account and key yourself in the provider dashboard, store the key in a real secret manager or protected environment-secret facility, avoid pasting secrets into ordinary chat, and do not use this for confidential investigations unless the third-party service is approved for that data.

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

Unsafe Collection, Temporary Storage, and Persistence of Authentication Secrets

Content
View full analysis

Vulnerability Details

File Location: references/auth-setup.md, lines 18–24, 50–57, 108–109, and 154–167
Vulnerability Type: Insecure credential handling and unsafe temporary-file usage
Risk Level: Medium

Vulnerable Instructions

Lines 18–24 instruct the agent to request an API key directly through the conversation:

markdown
## Step 1: Ask the user one question

Ask the user exactly this, in a single message:

> 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.

- If they paste a key (starts with `sk_`), go straight to **Storing the Key** below.
- If they want a new account, go to **Path B**.

Lines 50–57 direct the agent to write an authentication response containing a bearer token to a temporary file:

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.

The response looks like this:

Lines 108–109 apply the same file-based handling to the permanent API key:

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.

Lines 154–167 require persistent storage without prescribing a protected storage mechanism:

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 
...[truncated 3783 chars]
Remediation
View remediation

Remediation Suggestions

  1. Do not ask users to paste API keys into ordinary conversation messages. Use the agent runtime's protected secret-input interface so the value is not retained in chat history or routine telemetry.
  2. Store the API key only through an approved operating-system or runtime secret manager, such as a credential vault, keychain, encrypted secret store, or protected environment-secret facility.
  3. Explicitly prohibit persistence in shell history, command-line arguments, source-controlled files, world-readable configuration files, and plaintext shell profiles.
  4. If a temporary file is unavoidable, create it atomically with a facility such as mktemp, place it in a user-private directory, and set permissions to 0600 before writing sensitive content.
  5. Install cleanup traps before the first network request so temporary files are deleted on normal exit, errors, signals, and interruptions.
  6. Minimize stored material by parsing only the required field inside a protected process and immediately deleting the raw response body.
  7. Avoid printing, logging, or returning bearer tokens, API keys, complete authentication responses, or commands containing those values.
  8. Provide separate, explicit secret-storage procedures for every supported runtime rather than delegating persistence to an unspecified environment-dependent method.
  9. Verify the credential using redacted output and document immediate revocation and rotation procedures if a key is exposed.
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 (12)

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The file is for obtaining and storing a TranscriptOut API key, but the skill is presented as a YouTube API helper. This mismatch is dangerous because it can cause the agent to collect credentials for an unrelated third-party service and route user data or activity outside the stated skill boundary, which is a strong indicator of capability drift or deceptive integration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instructions direct the agent to create third-party accounts on behalf of users by registering emails, handling OTPs, and issuing API keys. That exceeds the expected behavior of a YouTube-data skill and introduces account lifecycle actions, identity verification handling, and secret issuance that increase the chance of unauthorized account creation, user confusion, and abuse of persisted credentials.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This skill is explicitly designed to send requests, including a bearer API key and user-supplied YouTube identifiers or search terms, to a third-party service at api.transcriptout.com. That external transmission creates real confidentiality and privacy risk because user queries and metadata leave the local environment and are handled by a non-Google provider.

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).

## Endpoint Reference

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

The example demonstrates live requests to an external API using a bearer token in the Authorization header. Even though this is expected behavior for the skill, it still represents a genuine outbound data-transfer and credential-use surface, with risk if users send sensitive video targets, transcripts, or research queries to the service.

Content

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

bash
# A transcript with metadata
curl -s "https://api.transcriptout.com/v1/transcript?video=dQw4w9WgXcQ&format=text&video_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Search

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This search example sends user query content to an external provider, which can expose potentially sensitive research interests, investigations, or internal topics. The risk is contextual rather than overtly malicious, but it is still a true external-transmission concern because query strings may contain confidential information.

Content

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

md
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# Search
curl -s "https://api.transcriptout.com/v1/search?q=rust+lifetimes&limit=10" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# A channel's uploads

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This example transmits a channel handle to a third-party API and authenticates with a bearer key. While the content is public YouTube data, the transmission still reveals user activity and can contribute to profiling of analyst interests or workflows by the service provider.

Content

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

md
-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# A channel's uploads
curl -s "https://api.transcriptout.com/v1/channel/videos?name=@3blue1brown" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# A playlist

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

This playlist example sends a playlist URL or identifier to the external service using the stored API key. Although this is core functionality, it is still a genuine data egress path and may expose user investigative targets, curation habits, or other context to the third-party provider.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

A playlist

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

text

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill tells the agent to ask for an API key and persist it across future sessions and shells, but it does not first present a clear security warning about long-term secret storage, scope, retention, and who can access it. In this context, that is risky because the agent may normalize collecting a powerful bearer credential for an unrelated service without informed user consent.

Content

No source excerpt is available for this finding.

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 · 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
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 · references/auth-setup.md (reported line 102)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
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 · references/auth-setup.md (reported line 176)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" }

Vague Triggers

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The manifest description says the skill 'Triggers on YouTube links, @handles and creator research,' but 'creator research' is an open-ended phrase that could overlap with many ordinary requests involving people or channels. While the description includes one exclusion ('Skip it for uploads and account chores'), it does not clearly define the limits of what counts as creator research or provide enough negative examples to avoid unintended invocation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.