Back to skill

Security audit

finding-industry-event-coverage-google

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward Apify Google Search scraper workflow for finding industry event coverage, with a documented credential-handling caveat but no hidden or destructive behavior.

This skill appears appropriate if you intend to use Apify for Google search scraping. Use a narrowly scoped Apify token where possible, avoid sharing logs or terminal output containing authenticated URLs, and prefer the recommended helper or MCP path over the raw curl fallback with token query parameters.

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

API Token Exposed in URL Query Parameters

Content
View full analysis

Vulnerability Details

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

The documented REST fallback embeds the Apify API token directly into request URLs:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~google-search-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["[EVENT_NAME] 2026", "[EVENT_NAME] recap", "[EVENT_NAME] announcements", "[EVENT_NAME] highlights"], "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

Placing an authentication token in a URL query parameter exposes it beyond the HTTP authentication boundary. Although HTTPS protects the URL while it is in transit to Apify, the expanded URL may still become visible in local process listings, diagnostic output, proxy or gateway telemetry, monitoring platforms, HTTP access logs, and error reports.

Authentication is necessary for the Skill's declared Google Search scraping function, and the requests are sent to the expected Apify service. However, transmitting the credential in the URL is not the minimum-risk authentication method. Credentials should be carried in an authorization header or handled by a client that does not expose them in command-line arguments or logged URLs.

Attack Path

  1. A user or Agent follows the documented REST fallback with APIFY_TOKEN present in the environment.
  2. The shell expands $APIFY_TOKEN inside the curl URL.
  3. The resulting authenticated URL may be exposed through process inspection, command diagnostics, proxy logs, access logs, monitoring telemetry, or copied error output.
  4. An attacker with access to one of those sources extracts the token.
  5. The attacker reuses the token against Apify APIs within the permissions grant ...[truncated 488 chars]
Remediation
View remediation

Remediation Suggestions

  • Replace query-string authentication with Apify's supported authorization-header mechanism.
  • Avoid placing credentials in URLs, command-line arguments, generated filenames, logs, or displayed command output.
  • Prefer a maintained API client or wrapper that reads the credential from an environment variable and applies it without printing it.
  • Ensure debug and error logging redacts authorization headers and tokens.
  • Use a narrowly scoped credential where supported, limit its account permissions, and rotate it periodically.
  • Revoke and replace the token immediately if an authenticated URL has been logged or disclosed.
  • Add explicit documentation warning users not to share command output, process captures, or logs containing authenticated requests.
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 (3)

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

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~google-search-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["[EVENT_NAME] 2026", "[EVENT_NAME] recap", "[EVENT_NAME] announcements", "[EVENT_NAME] highlights"], "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 85)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~google-search-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["[EVENT_NAME] 2026", "[EVENT_NAME] recap", "[EVENT_NAME] announcements", "[EVENT_NAME] highlights"], "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 92)May include surrounding context.

REST API fallback:

bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~google-search-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["[EVENT_NAME] 2026", "[EVENT_NAME] recap", "[EVENT_NAME] announcements", "[EVENT_NAME] highlights"], "maxItems": 100}'

Static analysis

No suspicious patterns detected.