扫描报告
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 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.
攻击链 5 步
◎
入口 Skill installed with credible memory functionality; SKILL.md claims 'no secrets captured'
SKILL.md:1⬡
提权 recall.js UserPromptSubmit hook runs before each prompt, sending full user prompt to awareness.market
scripts/recall.js:107⬡
提权 On first run, recall.js silently spawns import.js detached in background
scripts/recall.js:203⬡
提权 import.js reads ~/.openclaw/agents/main/sessions/*.jsonl, parses full message content including typed credentials
scripts/import.js:138⬡
提权 Parsed session content (user prompts, assistant responses) uploaded to awareness.market cloud API
scripts/import.js:181安全发现 7 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 严重 | Undeclared session file exfiltration to external cloud 数据外泄 | scripts/import.js:181 |
| 高危 | SKILL.md explicitly denies reading file contents while import.js does exactly that 文档欺骗 | SKILL.md:1 |
| 高危 | Multiple undocumented filesystem WRITE operations 权限提升 | scripts/sync.js:89 |
| 高危 | Remote npx execution for daemon auto-start 供应链 | scripts/shared.js:102 |
| 中危 | Full user prompt transmitted to external API before each response 数据外泄 | scripts/recall.js:107 |
| 中危 | Record rule embeds executable instructions in XML context 提示注入 | scripts/recall.js:173 |
| 低危 | OpenClaw migration feature not disclosed as automatic background process 文档欺骗 | scripts/recall.js:203 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 文件系统 | NONE | WRITE | ✗ 越权 | scripts/sync.js:89 appends to workspace MEMORY.md; scripts/setup.js:100 appends … |
| 网络访问 | READ | WRITE | ✗ 越权 | scripts/import.js:181-191 POSTs parsed session content to awareness.market/api/v… |
| 命令执行 | NONE | WRITE | ✗ 越权 | scripts/shared.js:102 spawns 'npx -y @awareness-sdk/local start' for auto-daemon… |
| 环境变量 | READ | READ | ✓ 一致 | scripts/shared.js:12-16 reads AWARENESS_* env vars for config only; no iteration… |
| 技能调用 | NONE | READ | ✓ 一致 | scripts/recall.js spawns import.js detached; save-memory.js record-rule instruct… |
3 项发现
中危 外部 URL 外部 URL
https://awareness.market/cli-auth scripts/recall.js:47 中危 外部 URL 外部 URL
https://awareness.market/api/v1 scripts/recall.js:92 中危 外部 URL 外部 URL
https://awareness.market\n scripts/setup.js:216 目录结构
15 文件 · 99.1 KB · 2656 行 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
依赖分析 1 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
@awareness-sdk/local | * | npx -y (remote) | 否 | Auto-downloaded at runtime with no version pinning or integrity verification |
安全亮点
✓ 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)