Back to skill

Security audit

finding-designers-and-creatives-on-twitter

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says, but it handles recruiting profile data and an Apify token in ways users should review before installing.

Install only if you are comfortable sending recruiting queries and Twitter/X handles to Apify and storing candidate profile data locally. Use a least-privilege Apify token, avoid the documented query-string token pattern by using an Authorization header where supported, keep exports out of shared repos, and apply your organization's recruiting, privacy, retention, and consent requirements before bulk profiling candidates.

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

Apify API Token Exposed in Tweet Scraper Request URL

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 92–95
Vulnerability Type: API credential exposure through a URL query parameter
Risk Level: Medium

Complete Code Snippet:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["UX designer", "product designer", "portfolio", "[DISCIPLINE] open to work"], "maxItems": 300}'

Technical Analysis

The REST fallback places APIFY_TOKEN in the URL query string. When the shell expands the environment variable, the resulting credential-bearing URL can be exposed through command telemetry, process inspection, debugging output, proxy and access logs, monitoring platforms, or copied command output.

TLS protects the URL while it is transmitted to Apify, but it does not prevent the plaintext URL from being recorded at the client, intermediary infrastructure, or destination. Authentication secrets should therefore be carried in Apify's supported authorization header rather than in query parameters.

Attack Path

  1. A user exports a valid APIFY_TOKEN and executes the documented curl command.
  2. The shell expands $APIFY_TOKEN into the command-line URL.
  3. A local monitoring agent, command logger, process observer, proxy, or API access-log system records the expanded URL.
  4. An attacker with access to that record extracts the token from the token query parameter.
  5. The attacker submits requests to Apify using the stolen credential.

Exploitation requires access to a location where the expanded command or request URL was retained; the document does not itself transmit the token to any undeclared endpoint.

Impact Assessment

A stolen token can grant access to the Apify operations authorized for the associated account. Depending on the token's permissions, an attacker could run actors, consume paid platform resources, access actor ...[truncated 168 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove token=$APIFY_TOKEN from the request URL.
  • Use Apify's supported HTTP authorization header, for example:
    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": ["UX designer", "product designer", "portfolio", "[DISCIPLINE] open to work"], "maxItems": 300}'
    
  • Ensure HTTP clients, shell tracing, CI systems, and monitoring tools redact authorization headers and secret environment variables.
  • Store the token in a dedicated secret manager or protected environment variable rather than source files or command history.
  • Apply least-privilege permissions and usage limits to the token.
  • Rotate any token that may previously have appeared in logs, telemetry, screenshots, or shared command output, and review Apify activity for unauthorized use.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:112
Finding

Apify API Token Exposed in Twitter User Scraper Request URL

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 112–115
Vulnerability Type: API credential exposure through a URL query parameter
Risk Level: Medium

Complete Code Snippet:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"usernames": ["handle1", "handle2"]}'

Technical Analysis

The profile-enrichment REST fallback embeds APIFY_TOKEN in the request URL. After environment-variable expansion, the secret becomes part of the command-line argument and full URL. URLs are commonly retained by process monitoring, shell diagnostics, proxies, access logs, observability platforms, and support artifacts.

Although HTTPS encrypts the request in transit, it does not protect the URL from disclosure at endpoints or through operational logging. A bearer credential should be supplied through an authorization header and subjected to log redaction.

Attack Path

  1. A user executes the documented profile-enrichment request with a valid APIFY_TOKEN.
  2. The shell substitutes the token into the URL.
  3. The expanded command or request URL is retained by process telemetry, diagnostics, proxy infrastructure, API logging, or copied output.
  4. An attacker who can read that retained data extracts the query-string token.
  5. The attacker reuses the token to authenticate to Apify within its assigned permissions.

Exploitation depends on access to a system that captured the expanded URL. No evidence indicates that the Skill intentionally forwards the token to an unrelated service.

Impact Assessment

Reuse of the credential could permit unauthorized Apify API operations, actor execution, consumption of account resources, access to datasets or run results available under the token, and financial charges. The exact privileges and affected data are bounded by the token's permissions, account configuratio ...[truncated 14 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove the API token from the query string.
  • Send it using Apify's supported authorization header:
    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 '{"usernames": ["handle1", "handle2"]}'
    
  • Configure shell, CI/CD, HTTP-client, proxy, and observability logging to redact credentials.
  • Retrieve the credential from a protected secret store or environment variable and never print it.
  • Restrict the token to the minimum necessary permissions and apply appropriate quotas.
  • Rotate potentially exposed tokens and inspect account activity and billing records for misuse.
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 (6)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill requires an APIFY_TOKEN and directs users to third-party Apify actors, but does not warn that credentials will be used for outbound requests to an external service or how to protect that token. This can lead to accidental token disclosure, misuse in shell history/logs, or users unknowingly transmitting data to a third party.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill explicitly instructs users to save scraped Twitter profile data to local CSV/JSON files, but provides no privacy, retention, access control, or data-handling guidance. Because the output includes identifiable profile information and recruiting signals, this creates a real risk of uncontrolled storage, oversharing, or downstream misuse of personal data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow explicitly restricts tweet scraping to English-language content. This is a natural-language locale constraint, and the file does not provide user opt-in, alternatives, or justification for why only English is permitted.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The skill instructs users to POST search terms and scraped-target parameters to api.apify.com, which is a clear external data transmission to a third party. In this context, the transmitted content includes recruiting queries and potentially identifiers of individuals, so users should be explicitly informed about the outbound transfer and its privacy implications.

Content

Scanner excerpt · SKILL.md (reported line 87)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": ["UX designer", "product designer", "portfolio", "[DISCIPLINE] open to work"], "maxItems": 300}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The direct reference to https://api.apify.com confirms reliance on an external service, but the skill does not contextualize this as third-party processing of user-supplied recruitment inputs. That omission can cause users to underestimate data-sharing and compliance implications when scraping and profiling candidates.

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~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["UX designer", "product designer", "portfolio", "[DISCIPLINE] open to work"], "maxItems": 300}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The profile-enrichment step transmits usernames to Apify's external API for processing, which is a genuine external transfer of identifiable data. In a recruiting context, enrichment increases the privacy sensitivity because it supports profiling of individuals without any warning or consent/compliance notice in the skill.

Content

Scanner excerpt · SKILL.md (reported line 107)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 '{"usernames": ["handle1", "handle2"]}'

Static analysis

No suspicious patterns detected.