Back to skill

Security audit

super-search

Security checks for vulnerabilities and agentic risk

Overview

This search skill has a coherent purpose, but it needs review because it can activate too broadly, send queries to external providers, and uses unsafe shell command templates for user-controlled search terms.

Review before installing. Avoid using sensitive personal, business, legal, medical, or credential-related queries with this skill unless it is changed to require explicit invocation, disclose provider transmission, ask before using location defaults, and encode search terms safely instead of interpolating them into shell commands.

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

Error
Location
SKILL.md:82
Finding
Shell Command Injection Through Unsafely Interpolated Search Terms## Vulnerability Details **File Location**: `SKILL.md`, lines 82–100 **Vulnerability Type**: Unsanitized user input in generated shell commands **Risk Level**: High ### Vulnerable Code ```bash curl -s "https://api.tavily.com/search" \ -H "Content-Type: application/json" \ -d '{ "api_key": "'$TAVILY_API_KEY'", "query": "TERMO", "max_results": 8, "include_answer": true, "include_images": true }' ``` ```bash curl -s "https://api.search.brave.com/res/v1/web/search?q=TERMO&count=5" \ -H "Accept: application/json" \ -H "X-Subscription-Token: $BRAVE_SEARCH_API_KEY" ``` ### Technical Analysis The Skill instructs the Agent to insert a user-controlled search term into shell command text. It does not require JSON serialization, URL encoding, shell-safe argument handling, or validation before the command is executed. In the Tavily command, the query is embedded in a shell-quoted JSON document. A search term containing quote characters and shell syntax could terminate the intended quoting context if the Agent performs direct textual substitution. The resulting text would then be interpreted by the shell as additional commands or arguments. In the Brave command, the query is placed inside a double-quoted URL without URL encoding. Shell-sensitive constructs inserted into generated command text may be evaluated when the shell parses the command. Independently of command execution, characters such as `&`, `#`, `?`, and whitespace can alter the request structure or inject unintended query parameters. Although transmitting search terms and API credentials to Tavily and Brave is consistent with the declared search functionality, constructing those requests through interpolated shell source exceeds what is necessary. Structured HTTP requests can provide the same functionality without exposing a command-execution boundary. ### Attack Path 1. An attacker sends a message containing the ...[truncated 1776 chars]
Remediation
## Remediation Suggestions 1. Do not generate or execute shell source from search terms. Use a structured HTTP client or a trusted search tool that accepts separate URL, header, and body parameters. 2. Serialize the Tavily request body with a JSON library so the query and API key are encoded as data rather than embedded into a command string. 3. Construct the Brave URL with a URL API or query-parameter encoder. The search term must be percent-encoded rather than concatenated into the URL. 4. If invoking `curl` is unavoidable, launch it without a shell using an argument array. Pass each header, URL, and request body as a distinct process argument. 5. Never use `eval`, `sh -c`, `bash -c`, or equivalent mechanisms with user-derived input. 6. Add tests covering quotes, command substitutions, semicolons, ampersands, newlines, Unicode, and unusually long search terms. 7. Keep API keys in scoped secret storage or environment variables, restrict their provider-side permissions, apply usage limits, and rotate them if command injection may previously have been possible. 8. Restrict the Agent runtime with filesystem, process, and outbound-network controls so a request-formatting defect cannot expose unrelated resources.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Vague Triggers

High
Confidence
98% confidence
Finding
The trigger activates on any message containing the common word "buscar", making accidental invocation very likely in normal conversation. Because the skill then sends user queries to external search providers and may fetch additional page content, broad activation can cause unintended data disclosure and unexpected network actions without clear user intent.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill infers location from phrases like "perto de mim" and silently defaults to São Lourenço, Minas Gerais, Brasil when location is unclear, but does not clearly warn the user. This can mislead users about the basis of results and may expose or fabricate location context in searches without explicit consent.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill describes sending search terms to Tavily and Brave and fetching full content from third-party pages, but it does not clearly warn users that their queries and retrieved content will be transmitted to external services. Users may unknowingly submit sensitive names, locations, or business data to outside providers, creating privacy and compliance risks.

External Transmission

Medium
Category
Data Exfiltration
Content
### Tavily (principal)
```bash
curl -s "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'$TAVILY_API_KEY'",
Confidence
90% confidence
Finding
This skill explicitly transmits user-provided search terms to an external API endpoint, which is a real data exposure boundary even though it is core to the feature. In combination with the broad trigger and lack of user warning, sensitive queries could be sent off-platform without deliberate user consent.

External Transmission

Medium
Category
Data Exfiltration
Content
### Tavily (principal)
```bash
curl -s "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "'$TAVILY_API_KEY'",
Confidence
90% confidence
Finding
This skill explicitly transmits user-provided search terms to an external API endpoint, which is a real data exposure boundary even though it is core to the feature. In combination with the broad trigger and lack of user warning, sensitive queries could be sent off-platform without deliberate user consent.

External Transmission

Medium
Category
Data Exfiltration
Content
### Brave (backup)
```bash
curl -s "https://api.search.brave.com/res/v1/web/search?q=TERMO&count=5" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: $BRAVE_SEARCH_API_KEY"
```
Confidence
89% confidence
Finding
The Brave backup search also sends user queries to a third-party provider, expanding the number of external recipients of potentially sensitive input. The backup-path nature can make this less visible to users, especially since the skill does not state when fallback providers will receive their data.

Static analysis

No suspicious patterns detected.