Back to skill

Security audit

discovering-pre-launch-startups-on-twitter

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it uses a third-party Twitter scraper with an Apify token and under-documents privacy and credential handling risks.

Review before installing. Use this skill only when you intend to send the query to Apify/apidojo for Twitter/X scraping, avoid sensitive client or internal scouting terms unless that is acceptable, set tight maxItems limits, and prefer authenticated tooling or authorization headers rather than the documented token-in-URL curl fallback.

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

Apify API Token Exposed in URL Query Parameters

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 98-107
Vulnerability Type: Credential exposure through URL query parameters
Risk Level: Medium

Vulnerable Code

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["launching soon [SECTOR]", "beta waitlist [SECTOR]", "building [SECTOR] product", "#buildinpublic [SECTOR]", "soft launch [SECTOR]"], "maxItems": 100}'
bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN"

Technical Analysis

The documented REST fallback interpolates the APIFY_TOKEN credential into the URL query string for both actor execution and dataset retrieval. Although the destination is the expected Apify API domain and the network access is necessary for the Skill's declared functionality, placing credentials in URLs exceeds the minimum safe exposure required for authentication.

Expanded URLs can be captured by shell history, process inspection, proxy and gateway logs, observability platforms, HTTP client diagnostics, and error reports. TLS protects the request in transit but does not prevent credential disclosure through these endpoint and infrastructure records. There is no evidence that the Skill intentionally sends the token to an attacker-controlled service.

Attack Path

  1. A user sets APIFY_TOKEN and executes one of the documented REST fallback commands.
  2. The shell expands $APIFY_TOKEN into the command's URL.
  3. The credential-bearing URL is retained in shell history, process telemetry, proxy logs, monitoring data, or diagnostic output.
  4. An attacker or unauthorized operator with access to one of those records extracts the token.
  5. The attacker reuses the token against the Apify API within the permissions and account limits assigned to that credential.

Impact Assessment

A recovere ...[truncated 429 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove token=$APIFY_TOKEN from all URLs and send the credential through an authorization header supported by Apify:

    bash
    curl -X POST \
      "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs" \
      -H "Authorization: Bearer $APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"searchTerms": ["launching soon [SECTOR]", "beta waitlist [SECTOR]", "building [SECTOR] product", "#buildinpublic [SECTOR]", "soft launch [SECTOR]"], "maxItems": 100}'
    
    bash
    curl \
      "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items" \
      -H "Authorization: Bearer $APIFY_TOKEN"
    
  2. Ensure application, proxy, and monitoring logs redact authorization values and other credentials.

  3. Avoid command tracing or verbose diagnostics while invoking authenticated requests.

  4. Store the token in a protected secret manager or environment variable rather than plaintext configuration.

  5. Grant the token only the minimum Apify permissions required for actor execution and dataset retrieval.

  6. Rotate any token that may previously have appeared in command history, logs, telemetry, or diagnostic records.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger description is broad enough to activate on generic research requests such as researching what companies are building in a space, which may cause the agent to invoke this Twitter-scraping skill unexpectedly. That can lead to unintended third-party data transmission and use of an external scraper when the user did not explicitly request Twitter-specific collection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs use of Apify and an external Twitter scraper but does not clearly disclose that user-provided search terms and parameters will be sent to a third-party service. This creates a privacy and data-handling risk, especially if users include sensitive market research topics, client names, or internal scouting criteria in queries.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This step explicitly sends search terms to an external API endpoint using a bearer-like token in the URL query string. Besides normal third-party transmission risk, placing the token in the URL increases exposure through shell history, logs, proxies, and monitoring systems.

Content

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

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["launching soon [SECTOR]", "beta waitlist [SECTOR]", "building [SECTOR] product", "#buildinpublic [SECTOR]", "soft launch [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 100)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["launching soon [SECTOR]", "beta waitlist [SECTOR]", "building [SECTOR] product", "#buildinpublic [SECTOR]", "soft launch [SECTOR]"], "maxItems": 100}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

Fetching dataset items from the external Apify endpoint continues the third-party data flow and again places the API token in the URL. The context makes this more sensitive because collected results and associated metadata may be logged or exposed via tooling, browser history, or infrastructure logs.

Content

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

Wait for SUCCEEDED. Fetch dataset:

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

Step 3: Classify Results