Back to skill

Security audit

2026 02 10 Clawhub Clawvault 1.5.1

Security checks for vulnerabilities and agentic risk

Overview

ClawVault is a coherent local memory skill, but it has real boundary and persistence risks that users should review before installing.

Install only if you are comfortable with a global CLI and OpenClaw hook that persist local memory, index Markdown, and can modify vault files. Keep the vault in a dedicated directory, avoid storing secrets or regulated data, use dry-run modes before bulk linking or session repair, avoid unpinned qmd installs, and use --no-git unless you explicitly want sleep to prompt for a whole-repository commit.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
', 'Read content from file') .option('--stdin', 'Read content from stdin') .option('--overwrite', 'Overwrite if exists') .option('--no-index', 'Skip qmd index update (auto-updates by default)') .option('--embed', 'Also update qmd embeddings for vector search') .option('-v, --vault <path>', 'Vault path (default: find nearest)') .action(async (options) => { try { const vault = await getVault(options.vault); let content = options.content || ''; if (options.file) { co ...[truncated 2397 chars]:195
Finding

Path Traversal Allows Markdown Writes Outside the Vault

Content
View full analysis
{ const { category, title, content, frontmatter = {}, overwrite = false, qmdUpdate: triggerUpdate = false, qmdEmbed: triggerEmbed = false } = options; // Create filename from title const filename = this.slugify(title) + '.md'; const relativePath = path.join(category, filename); const fullPath = path.join(this.config.path, relativePath); // Check if exists if (fs.existsSync(fullPath) && !overwrite) { throw new Error(`Document already exists: ${relativePath}. Use overwrite: true to replace.`); } // Ensure category directory exists const categoryPath = path.join(this.config.path, category); if (!fs.existsSync(categoryPath)) { fs.mkdirSync(categoryPath, { recursive: true }); } // Build frontmatter with date const fm = { title, date: new Date().toISOString().split('T')[0], ...frontmatter }; // Write file const fileContent = matter.stringify(content, fm); fs.writeFileSync(fullPath, fileContent); ``` The corresponding CLI option accepts an unrestricted category: ```js program .command('store') .description('Store a new memory') .requiredOption( '-c, --category ', 'Category (preferences, decisions, patterns, people, projects, goals, transcripts, inbox)' ) .requiredOption('-t, --title ', 'Document title') .option('--content <content>', 'Content body') .option('-f, --file <file>', 'Read content from file') .option('--stdin', 'Read content from stdin') .option('--overwrite', 'Overwrite if exists') .option('--no-index', 'Skip qmd index update (auto-updates by default)') .option('--embed', 'Also update qmd embeddings for vector search') .opt ...[truncated 2518 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
src/lib/session-utils.ts:29
Finding

Path Traversal in Session Repair Can Access and Rewrite Files Outside OpenClaw Sessions

Content
View full analysis
Remediation
View remediation

T02 · Agent Memory Poisoning

Warning
Location
hooks/clawvault/handler.js:91
Finding

Persisted Checkpoint Content Is Injected into Startup Agent Messages

Content
View full analysis
l.toLowerCase().includes('working on')); if (workingOnLine) { const parts = workingOnLine.split(':'); if (parts.length > 1) { workingOn = sanitizeForDisplay(parts.slice(1).join(':').trim()); } } } return { hadDeath, workingOn }; } ``` The recovered value is then inserted into the event's agent messages: ```js const { hadDeath, workingOn } = parseRecoveryOutput(result.output); if (hadDeath) { // Build safe alert message with sanitized content const alertParts = ['[ClawVault] Context death detected.']; if (workingOn) { alertParts.push(`Last working on: ${workingOn}`); } alertParts.push('Run `clawvault wake` for full recovery context.'); const alertMsg = alertParts.join(' '); // Inject into event messages if available if (event.messages && Array.isArray(event.messages)) { event.messages.push(alertMsg); } console.warn('[clawvault] Context death detected, alert injected'); } ``` The sanitization applied before insertion is: ```js function sanitizeForDisplay(str) { if (typeof str !== 'string') return ''; // Remove control characters, limit length, escape markdown return str .replace(/[\x00-\x1f\x7f]/g, '') .replace(/[`*_~\[\]]/g, '\\$&') .slice(0, 200); } ``` ### Technical Analysis ...[truncated 2332 chars]
Remediation
View remediation
... ``` 4. Keep the fixed warning separate from recovered content. Consider injecting only: ```text [ClawVault] Context death detected. Run `clawvault wake` to review recovery data. ``` The agent can then retrieve the data through an explicit tool response that preserves provenance. 5. Validate checkpoint-file ownership and permissions, and reject vaults or state files writable by untrusted principals. 6. Avoid detecting death based on broad substring checks such as `output.includes('⚠️')`; consume a structured JSON response from `recover --json` instead. 7. Add adversarial tests using plain-text prompt injection that contains no Markdown or control characters. ]]>

T08 · Insecure Dependencies

Note
Location
SKILL.md:204
Finding

Documentation Recommends Globally Installing an Unpinned Git Dependency

Content
View full analysis
Remediation
View remediation
``` 2. Prefer a specific published package version with lockfile and integrity metadata: ```bash npm install -g qmd@ ``` 3. Document the expected package publisher, version, source repository, and integrity verification procedure. 4. Avoid using floating branches or unrestricted version ranges in security-sensitive installation guidance. 5. Periodically review the pinned dependency and update it through a controlled release process. 6. Where possible, isolate the search dependency with restricted filesystem and network permissions rather than running it with unrestricted access to the user's environment. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (74)

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

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

earch "what did I decide" # Semantic search

Session management

clawvault wake clawvault sleep "build wake/sleep commands" --next "run doctor" clawvault handoff --working-on "task1" --next "task2" # Manual handoff (advanced) clawvault recap # Manual recap (advanced)

text

**Tip:** Set `CLAWVAULT_PATH` to skip directory walk (or use `shell-init`):
```bash
echo 'export CLAWVAULT_PATH="$HOME/memory"' >> ~/.bashrc
eval "$(clawvault shell-init)"

Search: qmd vs memory_search

Use qmd (or clawvault search) — not memory_search

ToolBackendSpeedAPI Limits
qmd search / clawvault searchLocal BM25InstantNone
qmd vsearch / clawvault vsearchLocal embeddingsFastNone
memory_searchGemini APIVariableYes, hits quotas
bash
# ✅ Use this
qmd search "query" -c my-memory
clawvault search "query"

# ❌ Avoid (API quotas)
memory_search
``

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The documented commands can automatically traverse a vault and modify markdown files to insert links and maintain metadata. In an agent skill, silent bulk file edits are potentially dangerous because they can alter large numbers of local documents, corrupt notes, or modify unintended files if vault boundaries are misconfigured or symlinked.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @hono/node-server==1.19.9 — 3 advisory(ies): CVE-2026-39406 (@hono/node-server: Middleware bypass via repeated slashes in serveStatic); GHSA-frvp-7c67-39w9 (Node.js Adapter for Hono: Path traversal in `serve-static` on Windows via encode); CVE-2026-29087 (@hono/node-server has authorization bypass for protected static paths via encode)

High
Category
Supply Chain
Confidence
86% confidence
Finding

@hono/node-server 1.19.9 is present in the lockfile and is flagged for multiple high-severity path handling issues in static file serving, including traversal and authorization bypass variants. Although it is marked optional and transitive via @modelcontextprotocol/sdk, if the affected serve-static functionality is ever enabled in this skill or its dependencies, an attacker could access protected files or bypass middleware checks.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @modelcontextprotocol/sdk==1.25.3 — 1 advisory(ies): CVE-2026-25536 (@modelcontextprotocol/sdk has cross-client data leak via shared server/transport)

High
Category
Supply Chain
Confidence
84% confidence
Finding

@modelcontextprotocol/sdk 1.25.3 is directly included as a transitive dependency of qmd and is flagged for a cross-client data leak via shared server/transport. In a memory-oriented agent skill, cross-client leakage is especially relevant because the skill handles stored context and transcripts, so unintended client isolation failures could expose sensitive agent data.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.4 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
89% confidence
Finding

axios 1.13.4 is present transitively through optional native/build-related dependencies and is associated with multiple serious advisories including SSRF-related and request-handling issues. Even though it is optional and may not be exercised in normal operation, this dependency chain significantly expands risk if download, update, or remote model-fetch paths are reachable.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: brace-expansion==2.0.2 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
87% confidence
Finding

brace-expansion 2.0.2 has multiple reported denial-of-service issues involving pathological pattern expansion and is present in the dependency tree used by glob/minimatch-related functionality. For a filesystem-heavy memory skill that likely processes file patterns and markdown vault contents, attacker-controlled glob-like input could plausibly trigger CPU or memory exhaustion.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: fast-uri==3.1.0 — 7 advisory(ies): CVE-2026-13676 (fast-uri vulnerable to host confusion via failed IDN canonicalization); CVE-2026-18446 (fast-uri vulnerable to host confusion via backslash authority introducer); CVE-2026-75975 (fast-uri vulnerable to server-side request forgery via malformed IPv6 normalizat) +4 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

fast-uri 3.1.0 is present transitively via ajv and is reported to have several host parsing and canonicalization issues that can enable SSRF or host confusion in URL validation logic. This matters if the skill or its dependencies rely on URL validation for network access decisions, especially in agent ecosystems where connectors and remote resources may be configured dynamically.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
83% confidence
Finding

form-data 4.0.5 is present transitively and has a high-severity CRLF injection issue in multipart field names and filenames. If any attacker-controlled values are incorporated into multipart requests, this can lead to request smuggling-style header manipulation or malformed downstream requests.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The command executes git add -A and git commit in the repository root discovered from the current working directory, which can modify arbitrary tracked and untracked files in the user's repo, not just vault data. In the context of a memory-management skill, this capability is especially dangerous because it is unexpected, may capture secrets or unrelated work, and creates durable history that is hard to fully undo once pushed or shared.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README explicitly encourages storing decisions, lessons, people, projects, and commitments across sessions, which can easily include sensitive personal, operational, or proprietary information. Because this is an agent memory skill, persistent storage without clear guidance on data sensitivity, access controls, retention, or redaction increases the risk of accidental long-term exposure.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/clawvault.js:85

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
dist/chunk-VJIFT5T5.js:95

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
dist/commands/status.js:45

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
hooks/clawvault/handler.js:8

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
src/commands/status.ts:81

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
src/lib/search.ts:95