Scan Report
67 /100
awareness-memory
Persistent cloud memory across sessions with semantic recall, recording, and lookup
Critical undeclared data exfiltration: import.js reads OpenClaw session files (~/.openclaw/agents/main/sessions/), parses full message content (including user prompts and assistant responses which may contain credentials, API keys, and code), and uploads them to the external awareness.market cloud API. This is completely absent from SKILL.md's declared behavior and directly contradicts the 'no secrets captured' claim.
Do not install this skill
Do not use this skill in its current form. The import.js script must be removed or fundamentally redesigned. If used, it will exfiltrate the complete history of all Claude Code sessions—including any secrets typed into conversations—to an external cloud service. The skill also has multiple undocumented filesystem WRITE operations and a remote npx execution pattern.
Attack Chain 5 steps
◎
Entry Skill installed with credible memory functionality; SKILL.md claims 'no secrets captured'
SKILL.md:1⬡
Escalation recall.js UserPromptSubmit hook runs before each prompt, sending full user prompt to awareness.market
scripts/recall.js:107⬡
Escalation On first run, recall.js silently spawns import.js detached in background
scripts/recall.js:203⬡
Escalation import.js reads ~/.openclaw/agents/main/sessions/*.jsonl, parses full message content including typed credentials
scripts/import.js:138⬡
Escalation Parsed session content (user prompts, assistant responses) uploaded to awareness.market cloud API
scripts/import.js:181Findings 7 items
| Severity | Finding | Location |
|---|---|---|
| Critical | Undeclared session file exfiltration to external cloud Data Exfil | scripts/import.js:181 |
| High | SKILL.md explicitly denies reading file contents while import.js does exactly that Doc Mismatch | SKILL.md:1 |
| High | Multiple undocumented filesystem WRITE operations Priv Escalation | scripts/sync.js:89 |
| High | Remote npx execution for daemon auto-start Supply Chain | scripts/shared.js:102 |
| Medium | Full user prompt transmitted to external API before each response Data Exfil | scripts/recall.js:107 |
| Medium | Record rule embeds executable instructions in XML context Prompt Injection | scripts/recall.js:173 |
| Low | OpenClaw migration feature not disclosed as automatic background process Doc Mismatch | scripts/recall.js:203 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | NONE | WRITE | ✗ Violation | scripts/sync.js:89 appends to workspace MEMORY.md; scripts/setup.js:100 appends … |
| Network | READ | WRITE | ✗ Violation | scripts/import.js:181-191 POSTs parsed session content to awareness.market/api/v… |
| Shell | NONE | WRITE | ✗ Violation | scripts/shared.js:102 spawns 'npx -y @awareness-sdk/local start' for auto-daemon… |
| Environment | READ | READ | ✓ Aligned | scripts/shared.js:12-16 reads AWARENESS_* env vars for config only; no iteration… |
| Skill Invoke | NONE | READ | ✓ Aligned | scripts/recall.js spawns import.js detached; save-memory.js record-rule instruct… |
3 findings
Medium External URL 外部 URL
https://awareness.market/cli-auth scripts/recall.js:47 Medium External URL 外部 URL
https://awareness.market/api/v1 scripts/recall.js:92 Medium External URL 外部 URL
https://awareness.market\n scripts/setup.js:216 File Tree
15 files · 99.1 KB · 2656 lines JavaScript 14f · 2448L
Markdown 1f · 208L
├─
▾
scripts
│ ├─
agent-prompt.js
JavaScript
│ ├─
capture.js
JavaScript
│ ├─
harness-builder.mjs
JavaScript
│ ├─
import.js
JavaScript
│ ├─
init.js
JavaScript
│ ├─
lookup.js
JavaScript
│ ├─
poll-auth.js
JavaScript
│ ├─
recall.js
JavaScript
│ ├─
record.js
JavaScript
│ ├─
save-memory.js
JavaScript
│ ├─
search.js
JavaScript
│ ├─
setup.js
JavaScript
│ ├─
shared.js
JavaScript
│ └─
sync.js
JavaScript
└─
SKILL.md
Markdown
Dependencies 1 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
@awareness-sdk/local | * | npx -y (remote) | No | Auto-downloaded at runtime with no version pinning or integrity verification |
Security Positives
✓ Credentials stored with 0600 permissions in ~/.awareness/credentials.json
✓ Local daemon mode (localhost:37800) available for privacy-conscious users
✓ No direct credential harvesting from environment variables beyond AWARENESS_* keys
✓ Stop hook (capture.js) is a no-op, not sending conversation content
✓ XML escaping (escapeXml) properly implemented in harness-builder.mjs
✓ Session ID expires after 4 hours (configurable)