Back to skill

Security audit

SearXNG Local

Security checks for vulnerabilities and agentic risk

Overview

The skill is a straightforward SearXNG setup, but its example exposes a persistent unauthenticated search service on the network without enough hardening guidance.

Review before installing if the machine is on an untrusted network or reachable from the internet. Prefer binding Docker to 127.0.0.1, generate a real random secret, pin the container image, and add TLS, authentication, firewalling, and rate limits before allowing remote access.

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:24
Finding

Network-Exposed SearXNG Service with an Insecure Default Secret

Content
View full analysis
docker-compose.yml << 'EOF' services: searxng: image: searxng/searxng:latest container_name: searxng ports: - "8080:8080" volumes: - ./searxng:/etc/searxng:rw environment: - SEARXNG_BASE_URL=http://localhost:8080/ restart: unless-stopped EOF # Create settings.yml with JSON API enabled cat > searxng/settings.yml << 'EOF' use_default_settings: true server: secret_key: "change-me-to-random-string" bind_address: "0.0.0.0" port: 8080 search: safe_search: 0 autocomplete: "google" default_lang: "en" formats: - html - json EOF ``` ### Technical Analysis The documented Docker configuration publishes container port 8080 through the host binding `"8080:8080"`. Docker normally interprets this as a binding on all available host interfaces. The application is also explicitly configured with `bind_address: "0.0.0.0"`, making the SearXNG interface reachable from any network allowed by the host firewall. The instructions do not configure authentication, HTTPS, a reverse proxy, or network-level access restrictions. If applied on an Internet-facing server or an untrusted local network, the search interface and JSON API can therefore be accessed by unauthorized users. The configuration additionally uses the known placeholder `secret_key: "change-me-to-random-string"`. Any SearXNG functionality that depends on the secrecy or unpredictability of this value would not receive the expected security protection. The instructions also use the mutable `searxng/searxng:latest` image tag, so subsequent deployments can execute a different upstream image without a corresponding review of the skill. ### Attack Path 1. A user copies the documented Docker and Sea ...[truncated 1618 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (2)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The setup explicitly configures SearXNG to listen on all interfaces via bind_address: "0.0.0.0" and maps port 8080 to the host, but the documentation does not warn that this makes the service reachable from other machines depending on host firewall and network configuration. In a self-hosted search service, unnecessary exposure increases the attack surface and can enable unauthorized access, abuse, or reconnaissance against the instance.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The sample configuration sets default_lang: "en", which imposes a specific language/locale by default. The document does not present this as optional user choice or justify an English-only default for a region-specific use case.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.