Back to skill

Security audit

yee-brave-search

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward Brave Search integration that sends search terms and a Brave API key to Brave's search API, which matches its stated purpose.

Install only if you are comfortable sending your search queries to Brave Search and providing a Brave API key through BRAVE_API_KEY. Do not include secrets, private customer data, or confidential internal details in search queries.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Tainted flow: 'req' from os.getenv (line 26, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · brave_search.py (reported line 27)May include surrounding context.

python
try:
        req = urllib.request.Request(url, headers=headers)
        with urllib.request.urlopen(req) as response:
            if response.status == 200:
                data = json.loads(response.read().decode())
                results = []

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill advertises executable behavior that uses environment variables and network access, but it does not declare any explicit tool scope such as permissions or allowed-tools. This weakens reviewability and containment because users and platforms cannot easily see or enforce what capabilities the skill needs before installation or invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description and usage text do not clearly warn that user queries will be transmitted to Brave's external search service. Without an explicit disclosure, users may provide sensitive prompts or identifiers that are then sent off-platform, creating privacy and compliance risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The usage guidance is very broad: 'search for anything' could cause the agent to invoke the skill in many contexts without clear user intent or guardrails. Over-broad triggering increases the chance of accidental data disclosure in queries and unnecessary calls to an external service.

Content

No source excerpt is available for this finding.

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 · brave_search.py (reported line 11)May include surrounding context.

python
# Brave Search API Configuration
# Reads from environment variable BRAVE_API_KEY
API_KEY = os.getenv("BRAVE_API_KEY")
BASE_URL = "https://api.search.brave.com/res/v1/web/search"

def search_brave(query, count=5):
    if not API_KEY:

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

User-supplied search queries are sent to an external third-party service, which can expose sensitive prompts, internal investigation topics, or personal data if users are unaware of the transmission. In a tool/skill context, this matters because queries may be constructed from broader agent context and not just explicit user text, increasing privacy and data-handling risk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.