T09 · Insecure Skill Coding Practices
- Location
scripts/fetch_transcript.py:99- Finding
APIFY API Token Exposed Through URL Query Parameters
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to do what it says, but users should understand it sends YouTube video URLs to APIFY and uses an APIFY API token.
Install only if you are comfortable sharing the requested YouTube video URL and related request metadata with APIFY. Use a dedicated, least-privileged APIFY token where possible, keep it out of source control, consider avoiding permanent shell startup storage, and rotate the token if it may have appeared in logs because this script sends it as a query parameter.
scripts/fetch_transcript.py:99APIFY API Token Exposed Through URL Query Parameters
README.md:42Unpinned Third-Party Dependency Installation
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
export APIFY_API_TOKEN="apify_api_YOUR_TOKEN_HERE"
echo 'APIFY_API_TOKEN=apify_api_YOUR_TOKEN_HERE' >> .env
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
export APIFY_API_TOKEN="apify_api_YOUR_TOKEN_HERE"
echo 'APIFY_API_TOKEN=apify_api_YOUR_TOKEN_HERE' >> .env
The skill explicitly states that transcript requests are routed through APIFY using residential proxies to bypass YouTube bot detection, but it does not clearly warn users that their requested URLs and related request metadata are sent to a third-party service. This creates a real transparency and privacy issue because users may unknowingly disclose their activity to an external provider operating proxy infrastructure.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## Setup
1. Create free APIFY account: https://apify.com/
2. Get your API token: https://console.apify.com/account/integrations
3. Set environment variable:
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# Add to ~/.bashrc or ~/.zshrc
export APIFY_API_TOKEN="apify_api_YOUR_TOKEN_HERE"
# Or use .env file (never commit this!)
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
APIFY_ACTOR_ID = "karamelo~youtube-transcripts"
APIFY_API_BASE = "https://api.apify.com/v2"
def get_api_token():
This code sends the provided YouTube URL to the APIFY service via HTTP requests to fetch transcript data. While the module docstring names the APIFY API, it does not clearly warn the user that video-related data and results are transmitted to an external third-party service, which is the kind of network disclosure required for code files.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
try:
# Start the run
response = requests.post(
run_url,
headers=headers,
params=params,
The markdown instructs users to export an APIFY_API_TOKEN, which is a sensitive credential, but provides no warning about handling or safeguarding it. Under the markdown-file criteria for missing user warnings, documentation should disclose privacy or security-relevant behaviors involving credentials.
No suspicious patterns detected.