Back to skill

Security audit

finding-youtube-channels-by-growth-rate

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a disclosed YouTube research workflow, but its REST fallback can expose the user's Apify API token in URLs.

Install only if you are comfortable sending YouTube search inputs and scraper results through Apify/apidojo. Prefer the MCP or helper-script path if it avoids putting secrets in URLs; do not paste or run the REST curl examples with a real token unless the token is narrowly scoped and you can prevent command, proxy, and audit logs from recording it. Treat the growth tier output as an analyst heuristic, not a guaranteed computed metric.

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
SKILL.md:88
Finding

Apify API Token Exposed in URL Query Strings

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 88–96
Vulnerability Type: Credential exposure through URL query parameters
Risk Level: Medium

Vulnerable Code

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": "[NICHE] channel", "[NICHE] YouTube", "maxItems": 100}'
bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN"

Technical Analysis

Authentication with Apify is necessary for the Skill's declared YouTube research functionality, and the documented requests are sent to the expected api.apify.com domain. However, the REST fallback places the APIFY_TOKEN secret directly in URL query strings.

After shell expansion, the complete credential may become visible in process command lines and can be retained by shell history, terminal session recording, command auditing, proxy logs, client diagnostics, monitoring platforms, or other systems that record URLs. HTTPS protects the request while it is in transit but does not prevent disclosure at these endpoints or through operational logging.

The Skill therefore transmits a required credential using a mechanism that exposes it more broadly than the minimum privilege and disclosure necessary for API authentication.

Attack Path

  1. A user configures a valid APIFY_TOKEN and follows the documented REST fallback.
  2. The shell expands $APIFY_TOKEN into the command-line URL.
  3. The expanded URL is captured by a local process monitor, audit facility, diagnostic tool, proxy, terminal recorder, or another logging component.
  4. An attacker with access to that record extracts the token.
  5. The attacker submits authenticated Apify API requests using the recovered token.
  6. The attacker can perform operations allowed by the token until it is revoked, expires, or reaches applicable a ...[truncated 618 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the token query parameter from all documented URLs.

  2. Send the credential in an authorization header supported by Apify:

    bash
    curl -X POST \
      "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs" \
      -H "Authorization: Bearer $APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"searchTerms":["[NICHE] channel","[NICHE] YouTube"],"maxItems":100}'
    
    bash
    curl \
      -H "Authorization: Bearer $APIFY_TOKEN" \
      "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items"
    
  3. Ensure application and proxy logging redacts Authorization headers and known secret values.

  4. Do not run credential-bearing commands with shell tracing such as set -x; avoid verbose HTTP diagnostics in shared logs.

  5. Store the token in a protected secret manager or environment variable rather than source-controlled files. If .env remains supported, require restrictive permissions and exclusion from version control.

  6. Use a narrowly scoped token where Apify supports scope restrictions, rotate it regularly, and revoke it immediately if URL-based commands have already been logged or shared.

  7. Document the external data flow clearly so users understand that search parameters and retrieved YouTube research data are processed by Apify and the selected third-party actor.

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 (5)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest claims the skill returns channel name, subscriber count, growth signals, view momentum, upload frequency, and growth tier. However, the file contains only instructions to invoke the generic apidojo~youtube-scraper actor and prose formulas for later classification; there is no actual code or concrete implementation here that computes the promised growth metrics or tiers.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 88)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": "[NICHE] channel", "[NICHE] YouTube", "maxItems": 100}'

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 89)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": "[NICHE] channel", "[NICHE] YouTube", "maxItems": 100}'

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 96)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": "[NICHE] channel", "[NICHE] YouTube", "maxItems": 100}'

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The heading and workflow imply that scoring is performed, but the content is only a formula snippet with no executable implementation in this file. This creates an intent-code divergence because the documentation presents a completed behavior that the artifact does not actually carry out.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.