Back to skill

Security audit

cove

Security checks for vulnerabilities and agentic risk

Overview

This fact-checking skill is review-worthy because it reads private OpenClaw memory and workspace data by default and may send that context to configured model, search, or vector services.

Install only if you are comfortable letting the skill read OpenClaw workspace and memory content and include selected content in model verification prompts. For sensitive environments, disable auto-correction, disable system memory and web/vector sources unless explicitly needed, avoid ambient generic API keys, and review stdout/session logs for sensitive claim text.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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 (2)

T01 · Skill Instruction Hijacking

Error
Location
src/knowledge.js:57
Finding

Untrusted Knowledge Sources Can Hijack Verification and Automatic Correction

Content
View full analysis
maxFileSize) continue; // skip large files const content = fs.readFileSync(fullPath, 'utf8'); results.push({ path: path.relative(HOME, fullPath), content, }); } catch { /* skip unreadable */ } } ``` `src/knowledge.js:175-222` collects content from memory, workspace files, custom paths, and OpenClaw root documents: ```javascript function loadKnowledge(config) { const sources = config.knowledge_sources || {}; const allFiles = []; // 1. System memory (always on by default) if (sources.use_system_memory !== false) { // 1a. Memory flush files (markdown) allFiles.push(...readDir(MEMORY_DIR, 2)); // 1b. Memory database (SQLite — extract text chunks) const dbChunks = readMemoryDb(); if (dbChunks.length > 0) { allFiles.push({ path: '.openclaw/memory/main.sqlite (chunks)', content: dbChunks.join('\n\n') }); } } // 2. Workspace root files (non-recursive, just top-level docs) const workspaceFiles = readDir(WORKSPACE, 1); allFiles.push(...workspaceFiles); // 3. Custom document paths if (Array.isArray(sources.document_paths)) { for (const docPath of sources.document_paths) { const resolved = docPath.startsWith('~/') ? path.join(HOME, docPath.slice(2)) : path.resolve(docPath); try { const stat = fs.statSync(resolved); if (stat.isDirectory()) { allFiles.push(...readDir(resolv ...[truncated 4317 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
src/knowledge.js:95
Finding

Default Verification Performs Overly Broad Collection and External Disclosure of Local Knowledge

Content
View full analysis
= 32 && byte < 127) || byte === 10 || byte === 13 || byte === 9) { current += String.fromCharCode(byte); } else { if (current.length > 80) { const trimmed = current.trim(); // Filter out SQL schema, embedding vectors, metadata JSON, and index data if (trimmed && !trimmed.startsWith('CREATE ') && !trimmed.startsWith('SQLite') && !trimmed.includes('PRIMARY KEY') && !trimmed.includes('UNINDEXED') && !trimmed.includes('WITHOUT ROWID') && !trimmed.startsWith('[') && // embedding arrays !trimmed.s ...[truncated 6219 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (24)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Undeclared CLI behavior, stdin ingestion, auto-correction, exit-code signaling, and direct use of external LLM providers are meaningful operational capabilities that affect security and data flow. When these are omitted from the declared purpose and permissions, reviewers and users cannot accurately assess what content may be ingested, transformed, or transmitted.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Undeclared CLI behavior, stdin ingestion, auto-correction, exit-code signaling, and direct use of external LLM providers are meaningful operational capabilities that affect security and data flow. When these are omitted from the declared purpose and permissions, reviewers and users cannot accurately assess what content may be ingested, transformed, or transmitted.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

Undeclared CLI behavior, stdin ingestion, auto-correction, exit-code signaling, and direct use of external LLM providers are meaningful operational capabilities that affect security and data flow. When these are omitted from the declared purpose and permissions, reviewers and users cannot accurately assess what content may be ingested, transformed, or transmitted.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

Undeclared CLI behavior, stdin ingestion, auto-correction, exit-code signaling, and direct use of external LLM providers are meaningful operational capabilities that affect security and data flow. When these are omitted from the declared purpose and permissions, reviewers and users cannot accurately assess what content may be ingested, transformed, or transmitted.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Undeclared CLI behavior, stdin ingestion, auto-correction, exit-code signaling, and direct use of external LLM providers are meaningful operational capabilities that affect security and data flow. When these are omitted from the declared purpose and permissions, reviewers and users cannot accurately assess what content may be ingested, transformed, or transmitted.

Content

No source excerpt is available for this finding.

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
80% confidence
Finding

Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.

Content

Scanner excerpt · src/verify_claims.js (reported line 288)May include surrounding context.

js
Rules:
- Preserve the original tone, style, and structure as much as possible.
- Only change the parts that are factually wrong.
- Do NOT add disclaimers, notes, or meta-commentary about corrections.
- Do NOT mention that corrections were made.
- Return ONLY the corrected response text.`;

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README explicitly states the plugin verifies claims against memory, workspace files, vector stores, and optionally the web, but it does not clearly warn that this process can transmit user/workspace-derived content to external LLM and search services. In a verification plugin, this is especially sensitive because users may assume local fact-checking while the tool may silently exfiltrate internal data during claim extraction and verification.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

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.

Content

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

yaml
policy: "basic"                    # basic | standard | deep
auto_correct: true                 # Rewrite response with corrections
max_correction_attempts: 1         # Correction loop iterations
log_results_to_dashboard: true     # Log results to stdout

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README says the agent runs verification silently and the user never sees the process, which creates a hidden automation and transparency risk. Silent background processing of user data and workspace content can undermine informed consent, make auditing difficult, and conceal external transmission of sensitive information.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding

The skill declares access to environment variables containing API keys and describes execution via a Node-based CLI, but it does not declare an explicit tool scope such as permissions or allowed-tools. That makes the skill's effective capabilities less transparent to users and reviewers, increasing the risk of unexpected secret access or command execution through the runtime.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The wording says data stays local to the verification pipeline while also stating it may be sent to a configured LLM provider and optionally Brave Search. That framing can mislead users into underestimating external transmission of workspace, memory, or database-derived context, which is especially sensitive in a verification skill handling user-specific knowledge.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

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.

Content

Scanner excerpt · USAGE.md (reported line 18)May include surrounding context.

chmod +x /usr/local/bin/cove-verify

Copy supporting modules next to verifier.js or set NODE_PATH

mkdir -p /usr/local/lib/cove cp src/*.js /usr/local/lib/cove/

text

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation advertises web verification via Brave Search but does not clearly disclose that claims, queries, or derived context may leave the local system and be sent to an external provider. In a verification tool that reads workspace and memory content, this omission is security-relevant because users may enable web search without understanding the privacy boundary crossing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The usage guide states that CoVe reads agent memory, workspace files, agent docs, and configured custom paths, but it does not clearly warn that sensitive local data may be ingested into verification prompts. Because the tool also performs LLM-based verification, users may not realize that private file contents can be collected and potentially transmitted to a model or other components, increasing the risk of unintended data exposure.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation for loadConfig states it loads config from config/default.yaml relative to the plugin directory, which suggests a local plugin-scoped config source. In reality, the code also reads ~/.openclaw/cove.yaml, numerous environment variables, and ~/.openclaw/.brave-api-key, expanding behavior to user-global configuration and secrets resolution.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This loader implicitly enables direct LLM access by harvesting general-purpose provider API keys from the environment and auto-detecting a provider, even when the user did not explicitly configure this skill for that mode. In a verification skill, that broadens outbound network and data-exfiltration capability: content intended only for local verification could be sent to third-party LLM services if ambient credentials are present.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The logger writes raw claim text, reasons/evidence, and corrections to stdout, and the file explicitly notes that stdout is captured into session logs. If claims or corrections contain sensitive user, memory, or knowledge-base content, this creates a clear data-disclosure path without redaction or user warning. In a verification skill that processes model outputs against potentially private sources, this context makes the exposure more likely and more sensitive.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code automatically loads data from the user's workspace, memory flush files, and the OpenClaw memory database into the prompt context without any consent gate, disclosure, or source-level restriction. In an agent skill whose purpose is to fact-check against knowledge sources, this behavior materially increases the risk of unintended sensitive data exposure to the model and to downstream outputs, especially because memory and workspace content can contain secrets, private notes, or unrelated documents.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill accepts arbitrary custom document paths and reads either files or directories from those resolved filesystem locations, then injects their contents into model context. Even if intended for flexible knowledge loading, this creates a broad local file access surface that can expose sensitive data outside the workspace, including files in the user's home directory or other absolute paths, with no warning, approval step, or sandboxing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code sends raw query text to a local embedding proxy and then to configured vector-store backends, which may be remote services. If user prompts or claims contain sensitive data, that content is disclosed outside the immediate skill runtime without any visible consent, minimization, or redaction step. In a verification skill, this is especially relevant because users may submit proprietary or personal facts specifically for checking.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The CLI sends user-supplied response text into verifyResponse() without any execution-time consent prompt or warning, while the tool explicitly supports direct transmission to external LLM providers and web search via environment-configured APIs. This can cause users to unknowingly disclose sensitive data from stdin or command-line input to third-party services, which is especially risky for a verification tool likely to process drafts, internal facts, or memory-derived content.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code can send the user's response, extracted claims, and later knowledge-base content to external LLM providers or a local sidecar without any explicit consent or warning at the transmission point. In a verification skill, that context may contain sensitive workspace, memory, or proprietary data, so silent exfiltration to third-party services creates a real confidentiality risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The web search step transmits claim text derived from the user's response to external search providers with no explicit warning in this file. Even if only claims are sent, they can still reveal sensitive facts, internal project details, customer data, or confidential topics, making this a genuine privacy and data-handling issue.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This code sends raw search queries to Brave's external API whenever web search is enabled, and there is no indication in this file of any disclosure, consent check, or sanitization step before potentially sensitive user- or knowledge-derived content leaves the local trust boundary. In a verification skill, queries may contain private prompts, memory content, or proprietary knowledge-base fragments, so silent transmission can create a meaningful privacy and data-handling risk even if the implementation is otherwise technically straightforward.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.