Back to skill

Security audit

Reflective Memory

Security checks across malware telemetry and agentic risk

Overview

Keep is a broad but openly documented memory/context plugin that stores conversations and indexes workspace content; I found no artifact-backed deception or exfiltration.

Install only if you want an agent memory system that can persist conversation history and index workspace files. Review the OpenClaw indexPaths/indexExclude settings, choose local providers if you do not want content sent to model APIs or keepnotes.ai, use KEEP_NO_SETUP if you do not want automatic tool-config hooks, and keep dependencies updated.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (17)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
capture_output=True,
                timeout=60,
            )
            subprocess.run(
                [npm, "run", "build"],
                cwd=str(plugin_dir),
                check=True,
Confidence
86% confidence
Finding
subprocess.run( [npm, "run", "build"], cwd=str(plugin_dir), check=True, capture_output=True, timeout=30,

subprocess module call

Medium
Category
Dangerous Code Execution
Content
tmp = f.name

    try:
        subprocess.run([editor, tmp], check=True)
        new_content = Path(tmp).read_text()
    except (subprocess.CalledProcessError, KeyboardInterrupt):
        typer.echo("Editor exited abnormally, no changes saved", err=True)
Confidence
96% confidence
Finding
subprocess.run([editor, tmp], check=True)

Tainted flow: 'editor' from os.environ.get (line 3026, credential/environment) → subprocess.run (code execution)

Medium
Category
Data Flow
Content
tmp = f.name

    try:
        subprocess.run([editor, tmp], check=True)
        new_content = Path(tmp).read_text()
    except (subprocess.CalledProcessError, KeyboardInterrupt):
        typer.echo("Editor exited abnormally, no changes saved", err=True)
Confidence
97% confidence
Finding
subprocess.run([editor, tmp], check=True)

Lp3

Medium
Category
MCP Least Privilege
Confidence
97% confidence
Finding
The skill documentation instructs the agent to modify workspace configuration files, read and write local files, invoke shell/CLI commands, and optionally contact hosted services, yet the skill declares no permissions. This creates a trust-boundary failure: users and hosting platforms cannot accurately assess or constrain what the skill may do, increasing the chance of unauthorized file changes, data exposure, or command execution under the guise of a benign memory tool.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The declared purpose of 'Reflective Memory' materially understates the broader operational scope described by the analysis: integrations, MCP/CLI services, external API usage, document/media ingestion, OCR, export/import, watchers, and background processes. This mismatch is dangerous because users may authorize or invoke the skill expecting a narrow note-taking aid, while it may process sensitive local content, contact third parties, or establish persistent hooks and services beyond that expectation.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Content
**The practice is `keep_prompt(name="reflect")`.** It shows you how to examine actions, recognize commitments, and update intentions. Run it. Follow the steps. Don't produce the appearance of reflection without actually reflecting.

**Three tools:** `keep_flow` (all operations), `keep_help` (documentation), `keep_prompt` (practice prompts).

```
keep_prompt(name="reflect")                                                               # The practice
Confidence
88% confidence
Finding
tools:*

Known Vulnerable Dependency: @modelcontextprotocol/sdk==1.12.1 — 3 advisory(ies): CVE-2026-25536 (@modelcontextprotocol/sdk has cross-client data leak via shared server/transport); CVE-2026-0621 (Anthropic's MCP TypeScript SDK has a ReDoS vulnerability); CVE-2025-66414 (Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protec)

High
Category
Supply Chain
Confidence
98% confidence
Finding
@modelcontextprotocol/sdk==1.12.1

Known Vulnerable Dependency: chromadb — 2 advisory(ies): CVE-2026-45829 (ChromaDB Python project has a pre-authentication code injection vulnerability); CVE-2026-45829 (ChromaDB Python project has a pre-authentication code injection vulnerability)

Critical
Category
Supply Chain
Confidence
94% confidence
Finding
chromadb

Known Vulnerable Dependency: mistralai — 2 advisory(ies): GHSA-wx9m-wx4f-4cmg (Malicious dropper in mistralai 2.4.6 PyPI package); MAL-2026-3608 (Malicious code in mistralai (PyPI))

Critical
Category
Supply Chain
Confidence
97% confidence
Finding
mistralai

Known Vulnerable Dependency: pyjwt — 10 advisory(ies): CVE-2026-32597 (PyJWT accepts unknown `crit` header extensions); CVE-2024-53861 (PyJWT Issuer field partial matches allowed); CVE-2026-48522 (PyJWKClient: missing scheme allowlist enables CVE-2024-21643-class SSRF + token ) +7 more

High
Category
Supply Chain
Confidence
86% confidence
Finding
pyjwt

Known Vulnerable Dependency: pypdf — 10 advisory(ies): CVE-2026-48156 (pypdf: Possible long runtimes for zero-only width values in cross-reference stre); CVE-2026-24688 (pypdf has possible Infinite Loop when processing outlines/bookmarks); CVE-2026-27628 (pypdf has a possible infinite loop when loading circular /Prev entries in cross-) +7 more

Low
Category
Supply Chain
Confidence
88% confidence
Finding
pypdf

Known Vulnerable Dependency: tinytag — 1 advisory(ies): CVE-2026-32889 (Denial of service via non-terminating SYLT frame parsing loop in tinytag)

Low
Category
Supply Chain
Confidence
84% confidence
Finding
tinytag

Known Vulnerable Dependency: Pillow — 10 advisory(ies): CVE-2016-2533 (Pillow buffer overflow in ImagingPcdDecode); CVE-2023-50447 (Arbitrary Code Execution in Pillow); CVE-2021-27922 (Pillow Uncontrolled Resource Consumption) +7 more

Critical
Category
Supply Chain
Confidence
83% confidence
Finding
Pillow

Known Vulnerable Dependency: mcp — 6 advisory(ies): CVE-2025-53366 (MCP Python SDK vulnerability in the FastMCP Server causes validation error, lead); CVE-2025-66416 (Model Context Protocol (MCP) Python SDK does not enable DNS rebinding protection); CVE-2025-53365 (MCP Python SDK has Unhandled Exception in Streamable HTTP Transport, Leading to ) +3 more

High
Category
Supply Chain
Confidence
85% confidence
Finding
mcp

Known Vulnerable Dependency: mlx — 4 advisory(ies): CVE-2025-62609 (MLX has Wild Pointer Dereference in load_gguf()); CVE-2025-62608 (MLX has heap-buffer-overflow in load()); CVE-2025-62608 (MLX is an array framework for machine learning on Apple silicon. Prior to versio) +1 more

Critical
Category
Supply Chain
Confidence
80% confidence
Finding
mlx

Known Vulnerable Dependency: langchain-core — 10 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) +7 more

Critical
Category
Supply Chain
Confidence
89% confidence
Finding
langchain-core

Known Vulnerable Dependency: langgraph-checkpoint — 4 advisory(ies): CVE-2026-48775 (LangGraph Checkpoint: Unsafe JSON deserialization in checkpoint loading); CVE-2026-27794 (LangGraph: BaseCache Deserialization of Untrusted Data may lead to Remote Code E); CVE-2025-64439 (LangGraph Checkpoint affected by RCE in "json" mode of JsonPlusSerializer ) +1 more

High
Category
Supply Chain
Confidence
88% confidence
Finding
langgraph-checkpoint

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec, suspicious.exposed_secret_literal, suspicious.prompt_injection_instructions

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
keep/data/openclaw-plugin/index.legacy.ts:29

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
keep/data/openclaw-plugin/src/index.ts:252

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
bench/locomo/llm.py:23

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
tests/test_git_ingest.py:267

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
later/draft-supernode-prompts.md:107