Back to skill

Security audit

awareness-memory

Security checks across malware telemetry and agentic risk

Overview

This memory skill has a coherent purpose, but it performs broad automatic persistence and imports prior OpenClaw memory/session history without clear opt-in.

Review before installing. This skill can send prompt text and saved memories to awareness.market when cloud credentials are configured, store long-lived credentials locally, modify shell/OpenClaw configuration, start a local daemon automatically, and import existing OpenClaw memory/session history on first run. Install only if you are comfortable with that persistence model, and prefer local mode plus a clean review of existing memory files if the workspace may contain secrets or private conversations.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (19)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares no permissions even though its documented behavior includes network access and use of environment-stored credentials. That mismatch prevents informed consent and weakens sandbox/policy enforcement, especially because hooks run automatically before each prompt and after each response.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill is presented as local-first and no-account-needed, but the documented behavior routes prompt text to an external API, supports cloud authentication, persists credentials, edits shell profiles, and modifies local configuration. This creates a serious trust and privacy issue because users may enable it expecting local-only memory while it actually performs broad side effects and external synchronization.

Natural-Language Policy Violations

Medium
Confidence
76% confidence
Finding
The instructions require bilingual EN+CJK inclusion in summaries to improve retrieval, which can transform or augment user content without consent. In a memory system that stores and transmits summaries, this increases privacy exposure, may misrepresent user intent, and can create unnecessary retention of additional personal or project-identifying data.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The server automatically runs `npx -y @awareness.market/local start` whenever the local daemon is unavailable, which causes code execution and package retrieval without explicit user consent at tool invocation time. In a memory skill that is expected to be local-first and persistent across sessions, this increases risk because a simple MCP tool call can unexpectedly spawn software, depend on the user's PATH/npm configuration, and potentially execute a changed or compromised package.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The generated XML explicitly instructs the agent to 'Save significant work SILENTLY', which creates a covert persistence channel for user data without notice or consent. In a memory skill, this is especially risky because the stored content can include decisions, preferences, bugs, and project details across sessions, expanding privacy impact beyond a single interaction.

Missing User Warnings

High
Confidence
96% confidence
Finding
The script automatically batches and transmits contents from MEMORY.md, daily memory logs, and recent session transcripts to an Awareness endpoint without any explicit user consent, approval prompt, or granular opt-in. Because these sources can contain sensitive user data, code, secrets, or private conversations, this creates a real confidentiality risk and unexpected data exfiltration path, especially on first install.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This script stores an API key and memory identifier in plaintext under user-home cache/config files, which creates a persistent secret exposure risk if local file permissions are weak, backups are shared, or other local processes can read those paths. In the context of a persistence/memory skill, this is more dangerous because the token grants continuing access across sessions and is written automatically by a detached background auth flow without any visible controls in this script.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The script silently spawns a background import process on first run that may ingest prior workspace history without explicit, contemporaneous user consent or disclosure in this execution path. Because this skill is explicitly designed for persistent memory across sessions, importing historical workspace data broadens collection scope and can capture sensitive project context the user did not intend to load into memory.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script automatically sends recorded content to an external destination via syncRecordToOpenClaw() in both local and cloud recording paths, with no explicit consent prompt, opt-in gate, or clear user-visible warning at the point of transmission. Because this skill is a persistent memory tool that may collect sensitive task history, code, and decisions, silent network synchronization materially increases the risk of unintentional exfiltration of secrets, proprietary data, or personal information.

Missing User Warnings

Low
Confidence
87% confidence
Finding
The cachePerception() function writes perception and crystallization signals into .awareness/perception-cache.json or ~/.awareness/perception-cache.json without notifying the user. While this is local rather than remote exposure, the skill handles cross-session memory and may store sensitive workflow metadata or hints derived from prior activity, creating privacy and data-retention risk on shared systems or developer machines.

Missing User Warnings

Medium
Confidence
85% confidence
Finding
The helper automatically launches a local daemon with `npx -y @awareness.market/local start` when the service is not running. In a security-sensitive agent skill, implicit subprocess execution can surprise users, trigger unreviewed code download/execution through `npx`, and expand attack surface without explicit consent.

Ssd 3

Medium
Confidence
91% confidence
Finding
The file header documents broad collection of long-term notes, daily logs, and recent session JSONL content for migration into another memory system. In this skill context, persistent memory is the core feature, so collection itself is expected; however, the breadth of imported content increases exposure because user/assistant exchanges and memory notes may include confidential or regulated data.

Credential Access

High
Category
Privilege Escalation
Content
const API_BASE = process.env.AWARENESS_BASE_URL || "https://awareness.market/api/v1";
const CREDS_DIR = path.join(os.homedir(), ".awareness");
const CREDS_FILE = path.join(CREDS_DIR, "credentials.json");

// ---------------------------------------------------------------------------
// HTTP helper (zero deps)
Confidence
88% confidence
Finding
credentials.json

Hidden Instructions

High
Category
Prompt Injection
Content
OpenClaw, and the cloud backend.

**When to extract** (emit a card):
<!-- SHARED:extraction-when-to-extract BEGIN -->
- The user **made a decision** — chose X over Y, with a stated reason
- A **non-obvious bug was fixed** — symptom + root cause + fix + how to avoid recurring
- A **workflow / convention was established** — ordered steps, preconditions, gotchas
Confidence
86% confidence
Finding
<!-- SHARED:extraction-when-to-extract BEGIN --> - The user **made a decision** — chose X over Y, with a stated reason - A **non-obvious bug was fixed** — symptom + root cause + fix + how to avoid rec

Hidden Instructions

High
Category
Prompt Injection
Content
<!-- SHARED:extraction-when-not-to-extract END -->

**Per-card required scores**:
<!-- SHARED:extraction-scoring BEGIN -->
Every card you emit MUST carry three LLM self-assessed scores (0.0-1.0):

- `novelty_score`: how new is this vs known facts & existing cards?
Confidence
84% confidence
Finding
<!-- SHARED:extraction-scoring BEGIN --> Every card you emit MUST carry three LLM self-assessed scores (0.0-1.0): - `novelty_score`: how new is this vs known facts & existing cards? (restating an e

Hidden Instructions

High
Category
Prompt Injection
Content
const recordRule = `  <record-rule>
    Save significant work SILENTLY: node "${esc(options.recordRuleScript)}" '<JSON>'
    JSON: {"content":"what+why in detail","cards":[...],"skills":[...]}
    <!-- SHARED:extraction-when-to-extract BEGIN -->
- The user **made a decision** — chose X over Y, with a stated reason
- A **non-obvious bug was fixed** — symptom + root cause + fix + how to avoid recurring
- A **workflow / convention was established** — ordered steps, preconditions, gotchas
Confidence
91% confidence
Finding
<!-- SHARED:extraction-when-to-extract BEGIN --> - The user **made a decision** — chose X over Y, with a stated reason - A **non-obvious bug was fixed** — symptom + root cause + fix + how to avoid rec

Hidden Instructions

High
Category
Prompt Injection
Content
Returning \`"knowledge_cards": []\` is a **first-class answer** — prefer it over fabricating
a card from low-signal content.
<!-- SHARED:extraction-when-not-to-extract END -->
    <!-- SHARED:extraction-scoring BEGIN -->
Every card you emit MUST carry three LLM self-assessed scores (0.0-1.0):

- \`novelty_score\`: how new is this vs known facts & existing cards?
Confidence
88% confidence
Finding
<!-- SHARED:extraction-scoring BEGIN --> Every card you emit MUST carry three LLM self-assessed scores (0.0-1.0): - \`novelty_score\`: how new is this vs known facts & existing cards? (restating an

Session Persistence

Medium
Category
Rogue Agent
Content
}
        } catch { /* best-effort */ }

        // Write result cache file
        const cacheDir = path.dirname(AUTH_CACHE_FILE);
        if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir, { recursive: true });
        fs.writeFileSync(
Confidence
90% confidence
Finding
Write result cache file const cacheDir = path.dirname(AUTH_CACHE_FILE); if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir, { recursive: true }); fs.writeFileSync( A

Session Persistence

Medium
Category
Rogue Agent
Content
if (!memoryId) { console.error("  No memory selected. Run setup again."); process.exit(1); }

  // Step 4: Save credentials + write env vars
  console.log(`  Selected memory: ${memoryName} (${memoryId})\n`);
  console.log("  Saving configuration...");
Confidence
91% confidence
Finding
write env vars console.log(` Selected memory: ${memoryName} (${memoryId})\n`); console.log(" Saving configuration..."); saveCreds(apiKey, memoryId, API_BASE); console.log(` Saved to ${CRED

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.potential_exfiltration

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/headless-auth.js:63

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/recall.js:62

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
mcp-stdio.cjs:24

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/shared.js:20

Sensitive-looking file read is paired with a network send.

Warn
Code
suspicious.potential_exfiltration
Location
scripts/recall.js:27

Sensitive-looking file read is paired with a network send.

Warn
Code
suspicious.potential_exfiltration
Location
scripts/shared.js:215