Back to skill

Security audit

Competitive Research

Security checks for vulnerabilities and agentic risk

Overview

This skill performs disclosed competitor research and optional local report saving, with a limited overwrite caveat users should understand.

Install only if you are comfortable with the agent doing web-based competitor research and, for Deep Dive mode, saving markdown reports into your OpenClaw workspace. Use distinct slugs or version control if preserving prior reports matters, because repeated same-day saves with the same slug can overwrite earlier output.

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

Note
Location
scripts/save-report.sh:35
Finding

Existing Reports Are Overwritten Without Explicit Authorization

Content
View full analysis
&2 fi # Read content from file argument or stdin if [[ $# -ge 2 ]]; then INPUT_FILE="$2" if [[ ! -f "$INPUT_FILE" ]]; then echo "Error: input file '$INPUT_FILE' not found." >&2 exit 1 fi cp "$INPUT_FILE" "$OUTPUT_FILE" else # Read from stdin cat > "$OUTPUT_FILE" fi ``` ### Technical Analysis The output filename is constructed exclusively from the current date and a normalized, user-supplied slug. Consequently, all reports generated with the same normalized slug on the same day resolve to an identical path. The collision check only emits a warning. It does not request confirmation, reject the operation, preserve the existing report, or require an explicit overwrite option. Both `cp "$INPUT_FILE" "$OUTPUT_FILE"` and `cat > "$OUTPUT_FILE"` replace the contents of an existing destination. Different inputs may also normalize to the same slug. For example, case differences, spaces, and stripped punctuation can produce an identical normalized value. The implementation therefore permits accidental or intentional replacement of a previously generated report. This behavior also conflicts with the statement in `SKILL.md` that the script “creates files” and “never modifies” existing workspace content. ### Attack Path 1. A report is saved with a slug such as `market-analysis`. 2. The script creates a path such as `workspace/research/competitive-intel/2026-09-12-market-analysis.md`. 3. On the same day, another invocation supplies the same slug or a different input that normalizes to the same value. 4. The script detects the existing file ...[truncated 969 chars]
Remediation
View remediation
Vulnerability Patterns
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (3)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description presents this skill as an analysis/research capability for competitor and market intelligence. The supplied code does not perform any research, market mapping, competitor identification, or brief generation. Its sole function is to save already-created content to a markdown file in the workspace. While saving a report could be a supporting utility within a broader competitive-intel workflow, the code chunk itself has a materially different primary purpose: local file output. That filesystem write behavior is also undeclared in the description. Therefore this is a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Unbounded Output

Medium
Category
Output Handling
Confidence
60% confidence
Finding

Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.

Content

Scanner excerpt · PLAN.md (reported line 52)May include surrounding context.

md
- [x] Extended constitution pass: Tools section added (declarative + fallback)
- [x] Extended constitution pass: Verification section added (checklist + edge case table + pass/fail signal)
- [x] Extended constitution pass: Blast Radius and Hooks documented (explicit decisions, not defaults)
- [x] Read discipline: all files fully read before edits (no truncation; 119→169 lines SKILL.md, 73 ev-tiers, 59 script)
- [x] Untrusted-input: no external content in skill affects execution policy
- [x] Atomicity: changes are targeted additions only; no scope drift

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger phrases are broad enough to match many ordinary strategy, proposal, content, and client-prep requests, which can cause over-invocation of this skill outside narrowly intended competitor-research use cases. Over-broad routing can expose user prompts to unnecessary web research and local report-saving behavior, increasing data handling and the chance of acting on ambiguous or sensitive business requests without clear user intent.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.