Back to skill

Security audit

YouTube API

Security checks for vulnerabilities and agentic risk

Overview

This YouTube API skill is coherent and not malicious, but it handles the JustOneAPI token in ways that can expose it through command lines and request URLs.

Review before installing. The skill appears purpose-aligned and limited to JustOneAPI YouTube lookup operations, but use only a narrowly scoped token and be aware that the current design can expose that token in process arguments and URL logs. Rotate the token if it may have been captured in logs, shell history, request traces, or monitoring systems.

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

API Token Exposed Through Command-Line Arguments

Content
View full analysis
" --token "$JUST_ONE_API_TOKEN" --params-json '{"key":"value"}' ``` `bin/run.mjs:183-193`: ```js if (flag === "--params-json") { parsed.paramsJson = value; index += 1; continue; } if (flag === "--token") { parsed.token = value; index += 1; continue; } fail(`Unknown argument "${flag}".`); ``` ### Technical Analysis The documented invocation passes `JUST_ONE_API_TOKEN` as the value of the `--token` command-line argument. Shell variable expansion places the actual secret in the Node process argument vector. Depending on the operating system and deployment environment, process arguments may be available through process-inspection utilities, `/proc` metadata, container monitoring, execution telemetry, audit systems, or diagnostic tooling. This creates an unnecessary secondary disclosure channel for a credential that the Skill documentation explicitly requires users to keep private. Passing authentication information is necessary for the declared API functionality, but exposing it through a command-line argument is not required. The helper can read the already-required `JUST_ONE_API_TOKEN` environment variable directly. ### Attack Path 1. A user follows the documented command and supplies the API token through `--token`. 2. The shell expands `$JUST_ONE_API_TOKEN`, placing the plaintext credential in the process argument vector. 3. An attacker or monitoring system with permission to inspect process metadata records or reads the command line while the helper is running. 4. The observer extracts the token from the `--token` argument. 5. The token is reused to make unauthorized requests to JustOneAPI within the privileges and service limits assigned to that credential. ### ...[truncated 453 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
bin/run.mjs:259
Finding

API Token Transmitted in URL Query String

Content
View full analysis
parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` `bin/run.mjs:259-285` appends every query parameter, including `token`, to the URL: ```js function applyQueryParams(operation, params, url) { for (const parameter of operation.parameters.filter((item) => item.location === "query")) { const value = params[parameter.name]; if (value === undefined) { continue; } appendValue(url.searchParams, parameter.name, value); } } function appendValue(searchParams, name, value) { if (Array.isArray(value)) { for (const item of value) { appendValue(searchParams, name, item); } return; } if (value && typeof value === "object") { searchParams.append(name, JSON.stringify(value)); return; } searchParams.append(name, String(value)); } ``` The resulting URL is then transmitted at `bin/run.mjs:133`: ```js response = await fetch(url, requestInit); ``` ### Technical Analysis The operation manifest identifies `token` as a query parameter. `injectToken` stores the creden ...[truncated 2285 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

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

md
- Get a token from [Just One API Dashboard](https://dashboard.justoneapi.com/en/login?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_youtube&utm_content=project_link).
- Authentication details: [Just One API Usage Guide](https://docs.justoneapi.com/en/?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_youtube&utm_content=project_link).

## Output Rules

- Start with a plain-language answer tied to the YouTube task the user asked for.
- Include the most decision-relevant fields from the selected endpoint before dumping raw JSON.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

This finding is a true issue in context because the declared credential parameter is not merely documented; it is actually used as a query parameter in outbound requests. The dangerous part is credential exposure through the URL rather than active credential theft by the script itself, but that still creates a meaningful risk of token leakage to intermediaries and logs.

Content

Scanner excerpt · bin/run.mjs (reported line 20)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for this API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

As with the other operation, this endpoint also requires an access token in the query string, creating the same systemic credential-handling weakness across multiple API calls. In a skill context, users or orchestrators may invoke these commands automatically, increasing the chance that token-bearing URLs are captured in platform logs or diagnostic output.

Content

Scanner excerpt · bin/run.mjs (reported line 66)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for this API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · generated/operations.json (reported line 14)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for this API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · generated/operations.json (reported line 60)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for this API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · generated/operations.md (reported line 17)May include surrounding context.

md
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for this API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · generated/operations.md (reported line 41)May include surrounding context.

md
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for this API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill invokes a Node helper that performs authenticated external API requests, but the manifest does not declare an explicit tool scope such as allowed tools or permissions. That creates a governance gap: a host may permit broader execution/network behavior than reviewers or users can infer from the skill declaration, increasing the chance of unintended outbound access or misuse of the provided token.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill defines the API access token as a query parameter and later appends all query parameters directly into the request URL. Query-string credentials are commonly exposed via logs, browser/history artifacts, proxies, monitoring systems, and error telemetry, making accidental credential disclosure more likely even when HTTPS is used.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The operation requires an API access token in the URL query string, which is an unsafe credential transport pattern even over HTTPS. Query parameters are commonly exposed in logs, browser history, intermediary monitoring systems, analytics, and referrer data, increasing the chance of token leakage beyond the intended recipient.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This second endpoint repeats the same insecure design by sending the API token as a query parameter. Even if the API is read-only, leaked tokens can enable unauthorized use of the service, quota exhaustion, billing impact, or access to account-linked data through reused credentials.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation instructs users to supply an access token as a query parameter without any warning about sensitive credential handling. Query parameters are commonly logged by clients, proxies, browsers, and servers, so documenting token transmission this way increases the risk of credential leakage and unauthorized API use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This second endpoint repeats the same unsafe pattern by requiring an access token in the query string and providing no warning about protecting sensitive credentials. Because the file is operational API documentation, this can directly influence downstream implementations and normalize insecure token handling.

Content

No source excerpt is available for this finding.