Back to skill

Security audit

tracking-startup-founders-on-twitter

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its stated Apify/Twitter research purpose, but its examples can expose an Apify API token in URLs and do not clearly warn users about credential handling.

Review before installing. Use a narrowly scoped Apify token, avoid the documented REST examples that put the token in the URL, prefer a safer auth mechanism such as MCP or an authorization header if supported, and do not commit or share .env files. Keep scraping parameters narrow and confirm the data collection is appropriate for your use case.

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

Apify API Token Exposed Through URL Query Parameters

Content
View full analysis

Vulnerability Details

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

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["founder [SECTOR]", "building [SECTOR] startup", "CEO [SECTOR]", "#buildinpublic [SECTOR]"], "maxItems": 100}'

Wait for SUCCEEDED. Fetch dataset:

bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN"

Technical Analysis

The documented REST fallback expands the sensitive APIFY_TOKEN environment variable directly into request URLs. Authentication with Apify is necessary for the Skill's declared Twitter-scraping functionality, and the destination is consistent with that purpose. However, transmitting the credential as a query parameter is not the minimum-risk authentication method.

URL query strings can be captured in shell tracing output, process command-line inspection, command histories, HTTP client diagnostics, monitoring systems, reverse-proxy logs, server access logs, and copied URLs. HTTPS encrypts the request while it is in transit but does not prevent exposure at either endpoint or through local process and logging facilities.

Attack Path

  1. A user exports a valid APIFY_TOKEN and executes one of the documented curl commands.
  2. The shell substitutes the token into the URL before starting curl.
  3. The resulting command line or request URL is observed or retained by a local process inspector, shell debugging facility, monitoring agent, proxy, or server-side log.
  4. An attacker with access to that source extracts the token.
  5. The attacker submits authenticated requests to Apify using the exposed credential.
  6. The attacker can perform operations allowed by the token until it is revoked, expires, or is otherwise ...[truncated 737 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the token from both request URLs and use an authorization header supported by Apify:

    bash
    curl -X POST \
      "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs" \
      -H "Authorization: Bearer $APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"searchTerms": ["founder [SECTOR]", "building [SECTOR] startup", "CEO [SECTOR]", "#buildinpublic [SECTOR]"], "maxItems": 100}'
    
    bash
    curl \
      "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items" \
      -H "Authorization: Bearer $APIFY_TOKEN"
    
  2. Verify the precise authorization-header syntax against the current Apify API documentation before publishing the replacement examples.

  3. Use a narrowly scoped token with only the permissions required to run the designated actor and read its resulting dataset.

  4. Ensure .env files are excluded from version control and readable only by the owning account.

  5. Disable shell tracing around credential-bearing operations and configure clients, proxies, and monitoring systems to redact authorization values.

  6. Rotate any token that may already have appeared in command output, process telemetry, logs, or copied URLs.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

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

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["founder [SECTOR]", "building [SECTOR] startup", "CEO [SECTOR]", "#buildinpublic [SECTOR]"], "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 86)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["founder [SECTOR]", "building [SECTOR] startup", "CEO [SECTOR]", "#buildinpublic [SECTOR]"], "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 93)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["founder [SECTOR]", "building [SECTOR] startup", "CEO [SECTOR]", "#buildinpublic [SECTOR]"], "maxItems": 100}'

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This markdown file applies to SQP-2, and it explicitly requires an environment variable containing an API token. While the file explains that APIFY_TOKEN must be set, it does not warn users that this is a sensitive credential or advise against exposing it in shared shells, logs, or committed .env files.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.