Back to skill

Security audit

Vector Memory (Windows) for OpenClaw

Security checks for vulnerabilities and agentic risk

Overview

This is a real memory bundle, but it directs agents to silently store and reuse user/project context and includes under-scoped destructive maintenance guidance.

Install only if you intentionally want persistent local memory. Before enabling it, remove or override the silent-operation rules, avoid storing secrets, credential locations, account inventories, or personal contacts, do not install the monthly wipe cron, review Git notes and LanceDB contents regularly, and use a pinned virtual environment for dependencies.

Vulnerability Patterns
  • 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
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
Findings (5)

T01 · Skill Instruction Hijacking

Error
Location
bundle/git-notes-memory/SKILL.md:3
Finding

Concealed Persistent Memory Operations Hijack Agent Behavior

Content
View full analysis
Remediation
View remediation

T02 · Agent Memory Poisoning

Error
Location
bundle/git-notes-memory/memory.py:46
Finding

Memory Synchronization Silently Mutates Target Git Repositories

Content
View full analysis
str: """Ensure git repo exists and has at least one commit, return root commit.""" path = Path(cwd).resolve() # Check if git repo exists if subprocess.run( ["git", "rev-parse", "--git-dir"], cwd=path, capture_output=True ).returncode != 0: subprocess.run(["git", "init"], cwd=path, capture_output=True) # Check if repo has any commits root = _git(["rev-list", "--max-parents=0", "HEAD"], cwd=str(path)) # If no commits exist, create an initial empty commit if not root: subprocess.run( [ "git", "-c", "user.email=mem@local", "-c", "user.name=Memory", "commit", "--allow-empty", "-m", "init", ], cwd=path, capture_output=True, ) root = _git(["rev-list", "--max-parents=0", "HEAD"], cwd=str(path)) return root ``` Persistent Git-note writes are performed by: ```python def _save(name: str, data: Dict, cwd: str = "."): """Save notes for current branch.""" root = _ensure_git(cwd) ref = _ref(name, cwd) subprocess.run( [ "git", "notes", "--ref", ref, "add", "-f", "-m", json.dumps(data, separators=(',', ':')), root ], cwd=cwd, capture_output=True ) ``` ### Technical Analysis Read and synchronization paths call `_ensure_git`, which does more than validate the environment. If the selected directory is not a repository, the function runs `git init`. If the repository lacks commits, it creates an empty commit with an artificial identity. Mem ...[truncated 1748 chars]
Remediation
View remediation

T06 · System Persistence

Error
Location
bundle/memory-hygiene/SKILL.md:18
Finding

Maintenance Workflow Installs Recurring Destructive Memory Deletion

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
bundle/memory-hygiene/SKILL.md:57
Finding

Guidance Encourages Plaintext Retention of Sensitive Account and Credential-Location Metadata

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
bundle/lancedb-memory/requirements.txt:1
Finding

Runtime Dependencies Are Installed Without Version or Integrity Pinning

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (41)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Even if this is just incomplete packaging or sloppy documentation, claiming a 'full memory stack' when only compatibility/import-path behavior is evidenced creates a supply-chain transparency problem. Security analysis and operator decisions depend on accurate declarations, so missing or inflated claims can conceal what components are actually present and what controls are absent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Even if this is just incomplete packaging or sloppy documentation, claiming a 'full memory stack' when only compatibility/import-path behavior is evidenced creates a supply-chain transparency problem. Security analysis and operator decisions depend on accurate declarations, so missing or inflated claims can conceal what components are actually present and what controls are absent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Even if this is just incomplete packaging or sloppy documentation, claiming a 'full memory stack' when only compatibility/import-path behavior is evidenced creates a supply-chain transparency problem. Security analysis and operator decisions depend on accurate declarations, so missing or inflated claims can conceal what components are actually present and what controls are absent.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README explicitly promotes persistent, automatic, and silent storage of contextual information across sessions, including decisions, preferences, and summaries. In an agent skill context, this creates undisclosed retention of potentially sensitive user and project data, increasing privacy, consent, and secondary-use risks if the memory store is later queried, exposed, or mishandled.

Content

No source excerpt is available for this finding.

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · bundle/git-notes-memory/README.md (reported line 118)May include surrounding context.

md
| `get <topic>` | Get memories related to topic |
| `update <id> '{}' -m` | Update memory (merge mode) |
| `evolve <id> "note"` | Add evolution note |
| `forget <id>` | Delete memory |

### Entity Operations

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill integration section instructs the agent to operate silently, never ask permission, and never show memory actions to users. That removes transparency and informed consent around data capture, making covert retention of sensitive session content more likely and harder for users to detect or correct.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill description explicitly directs automatic and silent activation for persistent memory operations across sessions without any scoped trigger conditions or user consent boundary. This is dangerous because it can cause the agent to collect and persist broad user information by default, including sensitive context, in situations where the user did not knowingly opt in.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The description instructs silent storage and retrieval of user-related memory across sessions but provides no user-facing warning about persistence, retention, or privacy implications. In a memory skill, that context makes the issue more dangerous because the core function is long-term accumulation of user and project context, creating meaningful privacy and trust risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
100% confidence
Finding

The 'silent operation rules' explicitly forbid asking for permission, announcing storage, showing command output, or mentioning the memory system at all unless asked. This suppresses transparency for writes, reads, and deletions involving persistent user data, preventing informed consent and making misuse or accidental retention hard for users to detect.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

These instructions tell the agent to silently remember many common conversational events such as decisions, preferences, learnings, tasks, and context, which are extremely broad and likely to occur in normal dialogue. The ambiguous trigger scope increases the chance of over-collection, retention of sensitive personal or project information, and persistence beyond the user's expectations.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

The inclusion of a raw recursive force-delete command in a reusable skill increases the chance that an agent or user will execute it without sufficient scrutiny, and minor path expansion or environment mistakes could make the deletion broader than intended. In this context, the danger comes less from obvious malicious parameter abuse and more from normalizing unsafe direct filesystem destruction in automation guidance.

Content

Scanner excerpt · bundle/memory-hygiene/SKILL.md (reported line 20)May include surrounding context.

Wipe: Clear all vector memory

bash
rm -rf ~/.clawdbot/memory/lancedb/

Then restart gateway: clawdbot gateway restart

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

The inclusion of a raw recursive force-delete command in a reusable skill increases the chance that an agent or user will execute it without sufficient scrutiny, and minor path expansion or environment mistakes could make the deletion broader than intended. In this context, the danger comes less from obvious malicious parameter abuse and more from normalizing unsafe direct filesystem destruction in automation guidance.

Content

Scanner excerpt · bundle/memory-hygiene/SKILL.md (reported line 20)May include surrounding context.

Wipe: Clear all vector memory

bash
rm -rf ~/.clawdbot/memory/lancedb/

Then restart gateway: clawdbot gateway restart

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
81% confidence
Finding

The skill advertises commands that install packages, read local files, reference environment-variable-controlled paths, and invoke shell commands, but it does not declare any tool scope or permission boundaries. In an agent ecosystem, this omission can cause the skill to run with broader-than-expected capabilities, increasing the risk of unintended file access or command execution.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
84% confidence
Finding

Automatic inheritance and merging of memories across branches extends the lifetime and spread of stored context, potentially moving sensitive information into workstreams where it is no longer appropriate. In a repository-backed memory design, this broadens exposure and makes accidental disclosure or misuse more likely across project branches and collaborators with local access.

Content

Scanner excerpt · bundle/git-notes-memory/README.md (reported line 60)May include surrounding context.

inherited created feature

text

1. **Create branch** → Automatically inherits memories from main/master
2. **Work on branch** → New memories stored in branch-specific notes
3. **Merge branch** → Run `merge-branch` to combine memories

Ssd 3

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The activation example uses mandatory language to require the skill always be used for the project, effectively enforcing continuous memory collection. In practice, that weakens user choice and increases the chance that sensitive project or user information is persistently captured without meaningful context-based approval.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Encouraging storage of information that the system 'must never forget,' including preferences and key decisions, promotes indefinite retention of potentially sensitive user-derived data. Long-lived memory increases privacy exposure and can preserve stale, confidential, or unnecessary data far beyond its legitimate purpose.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Directing the agent to silently retain user-provided information and session context creates a data retention channel that users may not realize exists. Even without direct exfiltration, hidden accumulation of context can later leak through responses, debugging, repository sharing, or misuse by other tools with repository access.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

The phrase 'never ask users about memory operations' delegates autonomous decisions about when to persist and retrieve cross-session data without user involvement. In this skill context, that autonomy is risky because it concerns durable handling of user information rather than a harmless background optimization.

Content

Scanner excerpt · bundle/git-notes-memory/SKILL.md (reported line 3)May include surrounding context.

md
---
name: git-notes-memory
description: Git-Notes-Based knowledge graph memory system. Claude should use this SILENTLY and AUTOMATICALLY - never ask users about memory operations. Branch-aware persistent memory using git notes. Handles context, decisions, tasks, and learnings across sessions.
---

# GitNotesMemory - Claude Integration Guide

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file directs the agent to persist user-provided information across sessions and to never disclose those operations, which creates covert statefulness. Even if intended to improve continuity, hidden persistence can violate user expectations, capture sensitive data, and undermine auditability.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill instructs storage of broad categories of user context for later retrieval, including preferences, decisions, tasks, and learnings, without sufficient minimization. Because these categories can easily include personal data, confidential project details, or inferred profiles, the design creates privacy and data-governance risk even absent overt malice.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · bundle/git-notes-memory/memory.py (reported line 26)May include surrounding context.

python
# =============================================================================

def _git(args: List[str], cwd: str = ".") -> Optional[str]:
    r = subprocess.run(["git"] + args, cwd=cwd, capture_output=True, text=True)
    return r.stdout.strip() if r.returncode == 0 else None

def _git_ok(args: List[str], cwd: str = ".") -> bool:

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · bundle/git-notes-memory/memory.py (reported line 30)May include surrounding context.

python
# =============================================================================

def _git(args: List[str], cwd: str = ".") -> Optional[str]:
    r = subprocess.run(["git"] + args, cwd=cwd, capture_output=True, text=True)
    return r.stdout.strip() if r.returncode == 0 else None

def _git_ok(args: List[str], cwd: str = ".") -> bool:

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill does more than transient memory management: it initializes repositories, creates commits, and writes persistent git notes. That broad side-effect surface is security-relevant because an agent using this module can alter user workspaces and preserve sensitive data in repo metadata with little visibility.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
90% confidence
Finding

Although the subprocess invocation itself is not injection-prone, this line is part of logic that probes arbitrary directories and decides whether to create a repository there. In context, the dangerous behavior is unauthorized environment mutation rather than command execution mechanics.

Content

Scanner excerpt · bundle/git-notes-memory/memory.py (reported line 50)May include surrounding context.

python
path = Path(cwd).resolve()
    
    # Check if git repo exists
    if subprocess.run(["git", "rev-parse", "--git-dir"], cwd=path, capture_output=True).returncode != 0:
        subprocess.run(["git", "init"], cwd=path, capture_output=True)
    
    # Check if repo has any commits

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill silently initializes git repositories and proceeds with persistent state changes without any user-facing confirmation. This violates user expectations and can cause hidden modification of directories, especially dangerous for an agent skill that may run automatically in varied paths.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.