Back to skill

Security audit

subtitles

Security checks for vulnerabilities and agentic risk

Overview

The skill can fetch subtitles as advertised, but its setup flow asks the agent to handle account signup, sign-in codes, and API keys in unsafe ways.

Review before installing. Use this only if you are comfortable sending video identifiers and subtitle options to TranscriptOut, and configure the API key through a trusted secret manager yourself. Do not paste API keys or email verification codes into chat, and revoke or rotate any key that was handled that way.

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

Insecure Handling and Persistence of API 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:66-69`: ```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:110-114`: ```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. The response looks like this: ``` `references/auth-setup.md:158-170`: ```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. ``` `references/auth-setup.md:178-183`: ```text **The `access_token` or `api_key` value shows as `[REDACTED]` or is missing from the response.** You let the response pass through to ...[truncated 4140 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (12)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The document explicitly tells the agent to offer opening a free account for the user, contradicting the skill metadata that says to skip account chores. This inconsistency is dangerous because it can bypass user and platform expectations about what the skill is allowed to do, leading the agent into higher-risk authentication workflows under the guise of a low-risk subtitles capability.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

Telling the user to paste their sk_ API key into chat exposes authentication material through a natural-language channel that may be retained, summarized, or visible to systems beyond the immediate task. This normalizes unsafe credential-sharing behavior and can directly compromise the user’s TranscriptOut account if chat transcripts or tool logs are later accessed.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill directs the agent to perform account registration, email-based verification, API key issuance, and persistent secret storage, which materially exceeds a subtitles skill’s stated scope. This expands the attack surface from content processing into identity and credential management, creating opportunities for secret mishandling, unauthorized account actions, and confused-deputy behavior.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The workflow asks the user to relay a one-time email verification code to the agent, then uses that code to mint an API key on the user’s behalf. This is effectively credential harvesting of a second factor or magic-link equivalent, and it trains users to hand over authentication proofs that should only be entered directly into the service they are authenticating to.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The skill sends user-supplied video identifiers/URLs and an API bearer token to an external service, which creates a genuine data exposure boundary. In this skill context that behavior is necessary for functionality, but it is still security-relevant because it involves third-party transmission and credential use, and users may not understand the trust implications.

Content

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

bash
# SRT body inside the JSON envelope
curl -s "https://api.transcriptout.com/v1/transcript?video=VIDEO_URL_OR_ID&format=srt" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# or the raw .srt file itself

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The download=true example likewise transmits the same user-supplied video reference and authorization token to the third-party API. The risk is not active malicious behavior in the skill, but reliance on an external processor with access to request metadata and bearer credentials if mishandled.

Content

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

-H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

or the raw .srt file itself

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

text

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill asks the user to paste an API key into chat and instructs the agent to persist it, but does not provide strong security boundaries, consent language, or safe-storage requirements tied to the host platform. That creates a realistic risk of secrets being exposed in conversation history, logs, tool traces, or insecure shell/profile persistence.

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" }

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill documentation does not clearly warn users that invoking the skill sends the YouTube URL or video ID, requested language, and formatting options to a third-party API. This is a real transparency/privacy issue because users may not realize their requested content is disclosed outside the local agent context, even though the transmitted data is limited and expected for the feature.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

Defaulting lang to en without user opt-in can cause unintended requests for English subtitles when the user did not specify a language, which may produce incorrect behavior or unnecessary external requests. This is a mild consent/quality issue rather than a direct security exploit, but it can still mis-handle user intent and reduce transparency.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.