Back to skill

Security audit

Raven Memory

Security checks for vulnerabilities and agentic risk

Overview

This is a real local memory skill, but it persistently stores conversation-derived content and tells agents to reuse recalled memory in privileged prompt context without enough safeguards.

Review this skill before installing. It is not evidence of malware, but it can retain sensitive conversation and tool-history data across sessions and may reintroduce that data into future agent behavior. Only enable it for workspaces where persistent memory is appropriate, avoid storing secrets or regulated data, verify the database location and filesystem permissions, and do not rely on the advertised SQLCipher encryption unless the package version you install actually implements and enforces it.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T02 · Agent Memory Poisoning

Error
Location
tcc/core/reconciler.py:84
Finding

Persistent untrusted memory is promoted into privileged system-prompt context

Content
View full analysis
dict: global _current_session_id if _current_session_id is None: ctx = _reconciler.start_session(_dag) _current_session_id = ctx[" ...[truncated 3120 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
tcc/core/store.py:61
Finding

Sensitive persistent memory is stored in plaintext despite an encryption claim

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (33)

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · benchmark/test_openclaw_integration.py (reported line 64)May include surrounding context.

python
def main():
    with tempfile.TemporaryDirectory() as tmp_dir:
        db_path = os.path.join(tmp_dir, "test_raven.db")
        env = {**os.environ, "RAVEN_DB_PATH": db_path}

        print("Starting Raven MCP server...")
        proc = subprocess.Popen(

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README explicitly promotes persistent storage of user preferences, session history, decisions, and significant events across sessions, but it does not pair that behavior with a clear privacy notice, retention policy, consent model, or guidance on sensitive-data minimization. In an agent skill context, this can lead operators to deploy durable collection of personal or sensitive prompts without users understanding that their content will be retained locally for long periods.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The setup instructions tell users to automatically call raven_start_session with the user's first message and to record significant events, effectively encouraging automatic ingestion of user input into persistent memory without any user-facing disclosure or consent step. This is more dangerous in an agent plugin because these instructions are meant to be copied directly into operational configs, making silent collection of prompts and potentially sensitive data likely.

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 183)May include surrounding context.

Automatic — no code required

When multiple agents write to the same database concurrently, Raven detects when all open branches are done and fires an auto-merge milestone:

text
main chain ──●──●──●──────────────────────────────●── (merge milestone)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

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 · benchmark/test_openclaw_integration.py (reported line 67)May include surrounding context.

python
env = {**os.environ, "RAVEN_DB_PATH": db_path}

        print("Starting Raven MCP server...")
        proc = subprocess.Popen(
            [sys.executable, "-m", "tcc.integration.mcp_server"],
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE,

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 · benchmark/test_openclaw_integration.py (reported line 151)May include surrounding context.

python
time.sleep(0.2)

            # Restart server with same DB
            proc = subprocess.Popen(
                [sys.executable, "-m", "tcc.integration.mcp_server"],
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The description emphasizes convenience and persistence but does not clearly warn users that conversation history, decisions, tool calls, and session activity are stored across sessions by default. This weak disclosure can lead users to share sensitive information without understanding that it will be retained and later resurfaced through search or session initialization.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill explicitly instructs the agent to call memory-loading and event-recording tools at the start of every conversation and throughout the session by default. This creates always-on cross-session persistence of user content and agent activity without any built-in consent gate, minimization, or context sensitivity, which can expose sensitive data and cause inappropriate reuse of prior context.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The system prompt guidance directs the agent to persist and reload the user's first message and subsequent session events across conversations by default. This is dangerous because it operationalizes cross-session data retention and retrieval at the prompt level, increasing the chance of storing personal, confidential, or security-sensitive content and reintroducing it in unrelated future contexts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The delete method removes records from the nodes and node_parents tables and commits the change immediately. There is no confirmation prompt, logging/print statement, or explanatory comment/docstring warning that this operation is destructive, which matches the missing-warning criterion for code files.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The start-session flow accepts a user message/topic as search_query and uses it for semantic retrieval over persistent history, while the tool descriptions encourage injecting that content into long-term memory workflows. Without clear disclosure and minimization, sensitive user text may enter storage, embedding, or retrieval pipelines and become queryable across sessions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The MCP tools explicitly persist user- and agent-supplied events across sessions, but the interface provides no user-facing notice, consent flow, retention policy, or controls over what gets stored. In an agent-memory skill, this is particularly sensitive because conversations, tool results, and inferred preferences may be recorded automatically and later surfaced, creating privacy and compliance risk if users are unaware of persistence.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: sqlite-vec has 2 known advisory(ies) (CVE-2024-46488 (Heap-based Buffer Overflow in sqlite-vec); CVE-2024-46488 (Heap-based Buffer Overflow in sqlite-vec)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
88% confidence
Finding

The optional dependency sqlite-vec>=0.1.0 is not pinned to a known-safe version, and the package family has known heap-buffer-overflow advisories. Because this skill is an agent memory component that may process untrusted content and store embeddings locally, a vulnerable native SQLite extension could increase risk if the optional vector path is enabled.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: pytest has 2 known advisory(ies) (CVE-2025-71176 (pytest has vulnerable tmpdir handling); CVE-2025-71176 (pytest has vulnerable tmpdir handling)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

torch>=2.1.0 sets only a lower bound, so package resolution may install any later version, including one with unresolved security issues or breaking changes. Given PyTorch's history of unsafe deserialization and model-loading risks, lack of exact pinning weakens supply-chain control.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
torch>=2.1.0
transformers>=4.45.0
langgraph>=0.2.0
langgraph-checkpoint-sqlite

Unverifiable Dependency: torch has 16 known advisory(ies) (CVE-2025-2953 (PyTorch susceptible to local Denial of Service); CVE-2022-45907 (PyTorch vulnerable to arbitrary code execution); CVE-2025-32434 (PyTorch: `torch.load` with `weights_only=True` leads to remote code execution) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding

torch has multiple published advisories, and because the manifest does not pin an exact version, there is no way to verify whether installations will avoid affected releases. In ML systems, vulnerable PyTorch versions can be especially dangerous due to model loading, checkpoint handling, and native code execution paths.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

transformers>=4.45.0 is not fully pinned, allowing unreviewed newer versions to be installed. For a package that often processes remote models and complex inputs, this creates avoidable supply-chain and compatibility risk.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
torch>=2.1.0
transformers>=4.45.0
langgraph>=0.2.0
langgraph-checkpoint-sqlite
langchain-core>=0.3.0

Unverifiable Dependency: transformers has 16 known advisory(ies) (CVE-2023-2800 (transformers has Insecure Temporary File); CVE-2026-4372 (HuggingFace transformers vulnerable to remote code execution); CVE-2025-3933 (Transformers is vulnerable to ReDoS attack through its DonutProcessor class) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

transformers has known advisories, but the unpinned requirement prevents determining whether deployed environments are safe. In an agent skill that may fetch or process external model artifacts, this uncertainty materially increases risk compared with a pinned, vetted release.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

langgraph>=0.2.0 allows indefinite version drift, which can introduce vulnerable checkpointing or orchestration behavior without code changes in the skill. In an agent memory/orchestration component, dependency predictability is especially important because it handles execution flow and state.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
torch>=2.1.0
transformers>=4.45.0
langgraph>=0.2.0
langgraph-checkpoint-sqlite
langchain-core>=0.3.0
accelerate

Unverifiable Dependency: langgraph has 3 known advisory(ies) (CVE-2026-28277 (LangGraph checkpoint loading has unsafe msgpack deserialization); CVE-2026-48776 (LangGraph Python SDK is used to connect to running LangGraph API servers, manage); CVE-2026-28277 (LangGraph SQLite Checkpoint is an implementation of LangGraph CheckpointSaver th)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
88% confidence
Finding

langgraph has known advisories and the open-ended version specifier makes it impossible to verify whether affected versions are excluded. Since LangGraph is central to orchestration and checkpoint/state behavior, vulnerable releases could affect agent execution integrity or state handling.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency langgraph-checkpoint-sqlite is completely unpinned, so installs may pull different versions over time, including newly introduced vulnerable or breaking releases. In a persistence/memory skill that stores agent state, this increases supply-chain risk and makes builds non-reproducible.

Content

Scanner excerpt · requirements.txt (reported line 4)May include surrounding context.

text
torch>=2.1.0
transformers>=4.45.0
langgraph>=0.2.0
langgraph-checkpoint-sqlite
langchain-core>=0.3.0
accelerate
sqlite-vec

Unverifiable Dependency: langgraph-checkpoint-sqlite has 8 known advisory(ies) (CVE-2026-71433 (LangGraph: Namespace prefix matching crosses segment boundaries in Postgres and ); CVE-2025-8709 (LangGraph's SQLite store implementation has a SQL Injection Vulnerability); CVE-2025-64104 (LangGraph SQLite Checkpoint Filter Key SQL Injection POC for SqliteStore) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
93% confidence
Finding

langgraph-checkpoint-sqlite has multiple advisories, including SQL injection-related issues, and the dependency is unpinned, so the manifest provides no assurance that safe versions will be installed. This skill's stated purpose is persistent agent memory, making the checkpoint/storage layer directly relevant and increasing the practical danger of vulnerable releases.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

langchain-core>=0.3.0 is only minimally constrained, so installations may pick up future versions with security regressions or breaking behavior. Because LangChain components often handle prompts, files, URLs, and tool interactions, uncontrolled updates can meaningfully expand attack surface.

Content

Scanner excerpt · requirements.txt (reported line 5)May include surrounding context.

text
transformers>=4.45.0
langgraph>=0.2.0
langgraph-checkpoint-sqlite
langchain-core>=0.3.0
accelerate
sqlite-vec
sentence-transformers

Unverifiable Dependency: langchain-core has 16 known advisory(ies) (CVE-2026-26013 (LangChain affected by SSRF via image_url token counting in ChatOpenAI.get_num_to); CVE-2024-10940 (langchain-core allows unauthorized users to read arbitrary files from the host f); CVE-2025-65106 (LangChain Vulnerable to Template Injection via Attribute Access in Prompt Templa) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

langchain-core has several advisories, and because only a lower bound is given, deployments may resolve to an affected version. In agent systems that interact with prompts, tools, files, and URLs, vulnerable framework components can create significant secondary attack surface.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.prompt_injection_instructions

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
skill.md:65