Back to skill

Security audit

Private Deep Search

Security checks for vulnerabilities and agentic risk

Overview

This skill provides the advertised search and research capability, but users should review it because its privacy claims and local-only service claims do not match its actual network behavior.

Review before installing. Do not use it for sensitive searches unless you accept that external search engines and visited websites can receive query-derived requests and metadata. Bind SearXNG to 127.0.0.1, enable rate limiting or firewall the port, pin the Docker image and Python dependencies, and avoid running the documented curl templates with unsanitized query text.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (6)

T09 · Insecure Skill Coding Practices

Error
Location
skills/deep-research/deep_research.py:72
Finding

Arbitrary URL Fetching Enables Server-Side Request Forgery

Content
View full analysis
bool: """Check if URL should be processed.""" if not url or url in self.seen_urls: return False for domain in IGNORED_DOMAINS: if domain in url.lower(): return False return True async def fetch_content(self, url: str) -> Optional[str]: """Fetch and extract readable content from URL.""" for attempt in range(MAX_RETRIES): try: headers = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/120.0.0.0 Safari/537.36" } async with aiohttp.ClientSession() as session: async with session.get( url, headers=headers, timeout=aiohttp.ClientTimeout(total=REQUEST_TIMEOUT) ) as resp: if resp.status != 200: continue html = await resp.text() soup = BeautifulSoup(html, "html.parser") ``` ```python async def process_result(self, result: Dict) -> Optional[Dict]: """Process a single search result.""" url = result.get("url", "") title = result.get("title", "") snippet = result.get("content", "") if not self.is_valid_url(url): return None self.seen_urls.add(url) # Try to fetch full content content = await self.fetch_content(url) ``` ### Technical Analysis URLs obtained from SearXNG results are requested directly by `aiohttp`. The validation function only checks for duplicate URLs and a small list of ignored domain substrings. It does not: - Restrict requests to HTTP and HTTPS. - Resolve ...[truncated 1667 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Error
Location
skills/deep-research/deep_research.py:95
Finding

Untrusted Web Content Is Returned to the Agent Without Prompt-Injection Isolation

Content
View full analysis
500 else content report.append(f"### [{i}] {title}\n") report.append(f"**Source:** {url}\n") report.append(f"\n{preview}\n") self.citations.append({"num": i, "title": title, "url": url}) ``` ### Technical Analysis The Skill extracts arbitrary text, titles, and URLs from remote pages and places them directly into an agent-facing Markdown report. Removing HTML script and style elements does not remove natural-language instructions intended to manipulate an AI agent. There is no trust boundary, prompt-injection detection, instruction filtering, or structured separation between trusted Skill instructions and untrusted source data. The implementation also does not perform the claimed synthesis operation; it reproduces source previews, increasing the chance that model-directed instructions are exposed verbatim. ### Attack Path 1. An attacker publishes or modifies a page containing text such as ...[truncated 1205 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
skills/searxng/SKILL.md:14
Finding

Unsafe Shell Templates Permit Query-Based Command Injection

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
docker/docker-compose.yml:7
Finding

SearXNG Is Exposed on All Host Interfaces Without Rate Limiting

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
docker/docker-compose.yml:5
Finding

Mutable Container Image and Unpinned Python Dependencies Undermine Supply-Chain Integrity

Content
View full analysis
Remediation
View remediation

other

Warning
Location
docs/PRIVACY.md:9
Finding

Privacy Documentation Incorrectly Claims Queries Never Leave the Machine

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (14)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README strongly emphasizes privacy and 'forgets everything' while describing repeated multi-engine searches and full-page scraping, but it does not clearly warn that user queries and follow-up fetches are still sent to external search engines and target websites. This can mislead users into disclosing sensitive prompts under a false sense of anonymity, especially because the deep-research flow amplifies exposure by issuing multiple refined searches and scraping many pages.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs users to run a local shell script and start containers, but it does not describe what the script changes, what files it creates, or what privileges/resources it uses. Even if intended for convenience, opaque setup commands increase supply-chain and local-environment risk because users may execute them without reviewing potentially impactful system changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The guide strongly implies that SearXNG prevents third parties from seeing user searches, but the configured search engines still receive the query terms and usually the user's IP unless additional protections are used. This can mislead users into exposing sensitive searches under a false sense of privacy, especially because the document emphasizes 'no logs' and 'no third-party sees your queries' without clearly qualifying the downstream disclosure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · docs/TROUBLESHOOTING.md (reported line 101)May include surrounding context.

Example for WireGuard

wg show sudo wg-quick up wg0

text

## Clawdbot Issues

File System Enumeration

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code scans file system directories looking for sensitive files. This could be reconnaissance for credential theft.

Content

Scanner excerpt · docs/TROUBLESHOOTING.md (reported line 110)May include surrounding context.

bash
# Check skill directory
ls -la ~/.clawdbot/skills/

# Verify SKILL.md exists
cat ~/.clawdbot/skills/searxng/SKILL.md

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · docs/TROUBLESHOOTING.md (reported line 113)May include surrounding context.

md
ls -la ~/.clawdbot/skills/

# Verify SKILL.md exists
cat ~/.clawdbot/skills/searxng/SKILL.md

# Restart gateway
clawdbot gateway restart

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code fetches arbitrary third-party URLs returned by SearXNG and processes their contents without any user-facing consent, allowlist, or network-safety boundary. In an agent skill context, that creates unintended external network access and can expose the system to privacy leaks, tracking, and SSRF-like access to internal or sensitive endpoints if untrusted search results include such URLs.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description includes the broad activation wording 'Use for any web search query,' which overlaps with a very large range of ordinary user requests. It does not provide constraints, exclusions, or narrower invocation scope, making unintended activation more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The setup section instructs users to run a shell script, start containers, and copy skills into a local agent directory without clearly warning that these actions modify the local system and install runnable components. In a skill ecosystem, understated install steps can increase the chance that users execute changes they do not fully understand, though the README does not itself contain overtly deceptive or malicious commands.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The installation instructions copy files recursively into a user configuration/skills directory without warning about overwriting existing content or altering local assistant behavior. This can lead to unintended configuration changes, persistence of unreviewed skills, or replacement of existing files if paths overlap.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The setting default_lang: "en" hard-codes a specific language/locale in a user-facing search configuration. Under the policy, locale constraints should either be optional for users or clearly justified as region-specific, and neither is evident in this file.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

Low
Category
Tool Misuse
Confidence
15% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · docs/PRIVACY.md (reported line 71)May include surrounding context.

curl -s ifconfig.me

Docker's IP (should match if VPN is active)

docker run --rm curlimages/curl -s ifconfig.me

text

## Enabled Search Engines

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This code writes a generated secret into a settings file and then launches Docker services. Although it prints status messages as it runs, there is no upfront warning, confirmation, or comment explaining that the script will modify configuration and start background containers, which are safety-relevant side effects.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.