Back to skill

Security audit

Deep Research Pro

Security checks for vulnerabilities and agentic risk

Overview

This research skill fits its stated purpose, but its documented URL-fetching command can let a malicious link run local shell commands and its browsing, saving, and sub-agent behavior is not tightly scoped.

Review before installing. Use this only for non-sensitive research unless you are comfortable with queries, URLs, and reports being processed and stored locally. Do not let it fetch arbitrary or untrusted URLs through the documented shell template; a safer implementation should validate URLs and call curl without shell interpolation.

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

Command Injection Through Untrusted URL Interpolation

Content
View full analysis
" | python3 -c " import sys, re html = sys.stdin.read() # Strip tags, get text text = re.sub('<[^>]+>', ' ', html) text = re.sub(r'\s+', ' ', text).strip() print(text[:5000]) " ``` ### Technical Analysis The documented workflow instructs the Agent to replace `` with URLs obtained from web searches and execute the resulting command through a shell. Although the placeholder is enclosed in double quotes, shell double quotes still permit command substitution through `$(...)` and backticks. Consequently, a malicious URL containing shell syntax can cause local commands to run before `curl` is invoked. The downloaded response body is not itself passed to a shell or Python evaluator—the fixed Python program only reads it as text—so this is not direct remote payload retrieval and execution. The vulnerability instead arises from unsafe construction of the `curl` command. The command also follows redirects with `-L` without defining destination, protocol, response-size, or timeout restrictions. This can expose internal or link-local HTTP services if an attacker controls the initial URL or a redirect destination. However, the confirmed code-execution issue is the shell interpolation of the URL. ### Attack Path 1. An attacker submits a research request containing a crafted URL or publishes a search result whose URL contains shell command-substitution syntax. 2. The Agent selects that URL while following the deep-read workflow. 3. The Agent replaces `` with the attacker-controlled value and executes the documented command using a shell. 4. The shell evaluates command substitutions inside the double-quoted URL before starting `curl`. 5. The injected command executes with the same operating-system identity and permissions as the Agent. F ...[truncated 1214 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (7)

External Script Fetching

High
Category
Supply Chain
Confidence
97% confidence
Finding

The skill instructs fetching arbitrary URLs with curl and piping untrusted remote content directly into a Python process for parsing. Even though the Python snippet is static, this pattern still enables server-side request forgery–style behavior against attacker-controlled or internal URLs, permits retrieval of dangerous or sensitive network resources, and processes untrusted data without validation or protocol restrictions.

Content

Scanner excerpt · SKILL.md (reported line 58)May include surrounding context.

For the most promising URLs, fetch full content:

bash
curl -sL "<url>" | python3 -c "
import sys, re
html = sys.stdin.read()
# Strip tags, get text

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README says 'Just ask your agent to research something' and gives generic example prompts without defining a constrained trigger scope. This is ambiguous for an agent skill because ordinary user requests for information could match unintentionally, and no exclusion conditions or explicit trigger boundaries are provided.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill is designed to activate for essentially any research-related request, which is overly broad and increases the chance it will run in situations the user did not explicitly intend. In a skill that performs web access, file writes, and optional sub-agent spawning, broad triggering expands the attack surface and can cause unexpected external actions or storage of sensitive prompts.

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 the agent to save reports under ~/clawd/research/[slug] without warning the user that their prompts, synthesized findings, or potentially sensitive research topics will be persisted locally. This creates a privacy and data-retention risk, especially if research topics include confidential business, personal, or regulated information.

Content

No source excerpt is available for this finding.

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 · SKILL.md (reported line 142)May include surrounding context.

text
sessions_spawn(
  task: "Run deep research on [TOPIC]. Follow the deep-research-pro SKILL.md workflow.
  Read /home/clawdbot/clawd/skills/deep-research-pro/SKILL.md first.
  Goal: [user's goal]
  Specific angles: [any specifics]
  Save report to ~/clawd/research/[slug]/report.md

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The description states that the skill performs 'Full-page content fetching for deep reads,' which implies outbound network requests to third-party sites, but the README does not warn users about this behavior. For markdown descriptions, externally fetching content is a relevant disclosure because it affects privacy and network activity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The feature list advertises 'Save to file' but does not include any user warning about writing local files or potential overwriting of existing paths. For a markdown skill description, file-affecting behavior should be disclosed so users understand the impact on local data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.