Back to skill

Security audit

google-search-results-scraper-api-skill

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it asks users to provide an API key through the agent conversation and sends search inputs to BrowserAct.

Review before installing. Use this only for non-sensitive search queries you are comfortable sending to BrowserAct, and configure BROWSERACT_API_KEY through a secure local environment or secret manager rather than pasting the key into chat. Rotate the key if it was previously shared in an agent conversation.

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:28
Finding
API Key Disclosure Through Agent Conversation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:28-29`; `scripts/google_search_results_scraper_api.py:94-101` **Vulnerability Type**: Credential exposure through insecure onboarding instructions **Risk Level**: Medium ### Vulnerable Code `SKILL.md:28-29`: ```markdown Before running, check the `BROWSERACT_API_KEY` environment variable. If it is not set, do not take other measures; ask and wait for the user to provide it. Agent must tell the user: > "Since you haven't configured the BrowserAct API Key yet, please go to the [BrowserAct Console](https://www.browseract.com/reception/integrations?co-from=google-search-results-scraper) to get your Key." ``` `scripts/google_search_results_scraper_api.py:94-101`: ```python api_key = os.getenv("BROWSERACT_API_KEY") if not api_key: print("\n[!] ERROR: BrowserAct API Key is missing.", flush=True) print("Please follow these steps:", flush=True) print(f"1. Go to: {API_KEY_URL}", flush=True) print("2. Copy your API Key.", flush=True) print("3. Provide it to me or set it as an environment variable (BROWSERACT_API_KEY).", flush=True) sys.exit(1) ``` ### Technical Analysis The Skill instructions tell the Agent to ask for the BrowserAct API key and wait for the user to provide it. The executable script reinforces this behavior by explicitly offering “Provide it to me” as a credential configuration method. An API key is an authentication secret. Asking a user to paste it into an Agent conversation can expose it to conversation history, model context, Agent telemetry, execution transcripts, tool logs, or other systems that retain prompts and responses. This exposure is unnecessary because the script already supports retrieving the key from the `BROWSERACT_API_KEY` environment variable. The script legitimately transmits the key as a Bearer token only to the declared HTTPS endpoint at `api.browseract.com`. That network transmission is required for the Skill’s stated BrowserAct functio ...[truncated 1763 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the instruction to ask users to provide the API key to the Agent. 2. Replace the affected text with an explicit warning such as: ```text Set BROWSERACT_API_KEY securely in your local environment or approved secret manager. Do not paste the API key into chat. ``` 3. Change the script’s missing-key message so that it only recommends secure local configuration: ```python print( "Set BROWSERACT_API_KEY securely in your local environment. " "Do not provide the key through chat.", flush=True, ) ``` 4. Where supported, use the execution platform’s protected secret-storage mechanism rather than ordinary conversation input or command-line arguments. 5. Ensure the key is never included in logs, exception messages, task output, debugging traces, or process arguments. 6. Apply least privilege to the BrowserAct key, restrict its available capabilities where supported, and rotate any key previously pasted into an Agent conversation. 7. Document credential revocation and rotation procedures so users can respond promptly to accidental disclosure. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Lp3

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding
The skill can access environment variables and invoke a Python script that makes external API calls, but it does not clearly declare user-visible permissions or trust boundaries for those capabilities. This can cause users or orchestrators to underestimate that the skill will read `BROWSERACT_API_KEY` and transmit user-supplied search terms to an external service.

Vague Triggers

Medium
Confidence
84% confidence
Finding
The description contains broad trigger phrases like dataset enrichment, monitoring public web data, and scraping requests, which can cause the skill to activate for generic requests not clearly intended for this specific BrowserAct template. Over-broad routing increases the chance that unrelated or sensitive user tasks are funneled into a third-party scraping workflow without sufficiently specific user intent.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill does not clearly warn users that their search terms and related request context will be sent to BrowserAct, an external service. In this context, even seemingly public scraping tasks can involve sensitive research terms, client names, investigation topics, or proprietary business intent, so omission of disclosure creates a privacy and data-handling risk.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script sends user-supplied search terms and parameters to BrowserAct's third-party API without any explicit notice or consent mechanism at the point of collection or execution. In an agent skill context, users may assume processing is local, so transmitting potentially sensitive queries externally creates a real privacy and data-handling risk even though the transmission is functionally required.

External Transmission

Medium
Category
Data Exfiltration
Content
print("Start Task", flush=True)
    try:
        response = requests.post(
            f"{API_BASE_URL}/templates/{TEMPLATE_ID}/runs",
            json=payload,
            headers=headers,
Confidence
88% confidence
Finding
This HTTP POST transmits user-controlled input and an authorization bearer token to an external service. While this is the intended behavior of the integration, it still constitutes a real security/privacy concern because user data leaves the local environment and is processed by a third party, which is more sensitive in an agent setting where users may not expect external exfiltration of their queries.

Static analysis

No suspicious patterns detected.