T09 · Insecure Skill Coding Practices
- Location
scripts/searxng.py:94- Finding
Search Queries and Responses Are Exposed to Network Interception
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a real SearXNG search skill, but it needs review because it can route broad search requests through an insecure or non-local endpoint.
Review before installing. Use this only with a SearXNG endpoint you control, prefer HTTPS with proper certificate validation, replace the bundled URL, and narrow the triggers so routine search requests are not silently routed through this skill. Treat all returned titles, URLs, and snippets as untrusted web content.
scripts/searxng.py:94Search Queries and Responses Are Exposed to Network Interception
scripts/searxng.py:124Untrusted Search-Result Content Is Emitted Directly into Agent-Visible Output
The README explicitly recommends curl -k, which disables TLS certificate verification. Combined with the stated behavior of bypassing SSL verification (ssl.CERT_NONE), this normalizes insecure transport and makes man-in-the-middle interception or redirection of search traffic much easier, especially if users point the skill at non-local or public SearXNG instances.
# Use your configured URL from searxng.ini
curl -k http://your-searxng-instance.com:port
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
The README uses very broad activation phrases such as generic 'Search' examples, and the skill metadata includes many unconstrained triggers like 'look up', 'find information', and common Chinese web-search phrases. In an agent environment, broad triggers can cause unintended tool invocation, sending sensitive user text to the configured search backend when the user did not clearly intend web access.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
url = http://your-searxng-instance.com:port
Note: If the configuration file does not exist or is missing required settings, the script will automatically create a default configuration file and prompt you to modify it.
## Direct CLI Usage
The skill instructs execution of a Python script that performs network access and may create a local configuration file, but it declares no explicit tool scope or permissions. This weakens least-privilege controls and makes the skill easier to over-grant or invoke in environments where users and orchestrators cannot clearly assess its capabilities.
The trigger 'search for' overlaps with a built-in search command, creating a shadowing risk where this third-party skill may capture intents meant for trusted native functionality. In a network-enabled skill, that can redirect queries, alter outputs, or expose user requests to a different backend than expected.
The trigger 'search web' is highly similar to a built-in search capability and may intercept common user intents. Because this skill issues outbound requests to a configured SearXNG instance, users may unknowingly route searches through an alternate service, changing privacy and trust assumptions.
The trigger 'find information' is broad and conflicts with generic built-in discovery behavior, increasing the chance of unintended interception. In this context, accidental routing to a networked custom skill can lead to unanticipated data exposure and inconsistent results compared with trusted built-ins.
The trigger set includes broad everyday phrases such as 'look up', '帮我查', and '搜一下', which can cause accidental activation in unrelated conversations. Unintended invocation is risky here because the skill can initiate network requests and potentially create local files, expanding the attack surface without deliberate user intent.
The document includes imperative AI instructions written in Chinese such as "AI 必读" and "AI 约束," directing required behavior without offering a user language choice. This can constitute a language/locale policy issue because the skill embeds mandatory non-user-selected language guidance rather than presenting language preferences as optional.
The manifest description frames the skill as operating through 'your local SearXNG instance', but the code accepts any URL from searxng.ini and does not enforce localhost or other local-only endpoints. That means the actual behavior can route searches to external SearXNG servers, which is broader than the stated local-instance scope.