Back to skill

Security audit

airbnb-property-listings-scraper-api-skill

Security checks for vulnerabilities and agentic risk

Overview

The skill performs the advertised BrowserAct Airbnb scraping workflow, but it unsafely tells users to provide a BrowserAct API key through the agent chat if the environment variable is missing.

Review before installing. Configure BROWSERACT_API_KEY through a protected local environment or secret manager, not by pasting the key into chat. If you already pasted a BrowserAct key into an agent conversation, rotate it and check account usage. Use this skill only for BrowserAct Airbnb listing extraction where sending the requested parameters and results through BrowserAct is acceptable.

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
scripts/airbnb_property_listings_scraper_api.py:102
Finding
API Credential May Be Solicited Through the Agent Conversation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/airbnb_property_listings_scraper_api.py:102-108` **Additional Location**: `SKILL.md:27-30` **Vulnerability Type**: Credential exposure through insecure secret provisioning guidance **Risk Level**: Medium ### Vulnerable Code ```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) ``` The corresponding Skill instructions state: ```markdown Before running, check the `BROWSERACT_API_KEY` environment variable. If not set, do not take other measures; ask and wait for the user to provide it. **Agent must inform 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=airbnb-property-listings-scraper) to get your Key." ``` ### Technical Analysis The Skill explicitly permits the user to provide a BrowserAct API key directly to the Agent. Secrets entered into an Agent conversation can become part of model context, conversation transcripts, platform logs, monitoring systems, or tool history. These channels should not be treated as secure secret-storage or secret-provisioning mechanisms. The script itself correctly obtains the key from the `BROWSERACT_API_KEY` environment variable and does not print its value. It also sends the key only as a Bearer token to the declared HTTPS BrowserAct API. The vulnerability is therefore the fallback guidance encouraging conversational disclosure, rather than the required authenticated network request. ### Attack Path 1. The user invokes the Skill without configuring `BROWSERACT_API_KEY`. 2. The script exits and ...[truncated 1386 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove all instructions suggesting that users paste or otherwise provide API keys to the Agent. 2. Change the script message to require secure local configuration, for example: ```python print( "Set BROWSERACT_API_KEY in a protected local environment or secret manager, " "then run the command again. Do not paste the key into chat.", flush=True, ) ``` 3. Revise `SKILL.md` so the Agent directs users to configure the environment variable themselves and explicitly warns them not to disclose the key in conversation. 4. Recommend a secret manager, protected runtime secret injection, or a local environment file excluded from version control. 5. Ensure logs, exceptions, and diagnostics never include authorization headers or raw API credentials. 6. If a key has already been entered into a conversation, advise the user to revoke and rotate it immediately and review account usage for unauthorized activity. 7. Apply least privilege to the BrowserAct credential where the service supports scoped keys, usage limits, expiration, or task restrictions. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (2)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares runtime requirements in metadata (`python` and `BROWSERACT_API_KEY`) and instructs the agent to execute a script that performs external API calls, but there is no explicit permission declaration covering environment-variable access and network use. This creates a transparency and policy-enforcement gap: a user or platform may invoke a skill with capabilities they did not clearly consent to, and the script can access sensitive credentials and send data off-box.

Vague Triggers

Medium
Confidence
85% confidence
Finding
The description contains broad trigger phrases such as market research, dataset enrichment, monitoring public records, and lead/research list building, which can cause the skill to be selected for many generic data-collection tasks beyond a narrow Airbnb listings use case. Overbroad routing increases the chance of unintended execution of a networked scraper with credentialed API access, causing data to be sent to a third-party service when a more appropriate or lower-risk skill should have been used.

Static analysis

No suspicious patterns detected.