安全决策报告

awareness-memory

Awareness Cloud Memory 是一项合法的云端记忆服务,代码行为与文档声明基本一致。核心风险为 npx 自动启动无版本锁定,存在供应链隐患。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/18
文件 37
IOC 3
越权项 0
发现 5

为什么得出这个结论

0/4 个维度触发
通过
声明与实际能力

声明资源与推断能力基本一致。

复核
隐藏执行与外联

提取到 3 个一般风险产物,需要结合上下文判断。

通过
攻击链与高危发现

没有形成明确的恶意路径。

复核
依赖与供应链卫生

发现 1 项需要关注的依赖或供应链线索。

风险分是怎么被拉高的

npx 自动启动无版本锁定 +15

shared.js 和 mcp-stdio.cjs 中 daemon auto-start 使用 'npx -y @awareness-sdk/local start' 无版本固定,存在供应链攻击风险

用户 prompt 数据发送至外部 API +10

recall.js 在 UserPromptSubmit hook 中将完整用户 prompt 发送到 awareness.market 进行语义搜索,属于已声明行为但涉及敏感数据

OpenClaw session 文件导入 +5

import.js 读取 ~/.openclaw/agents/main/sessions/ 下的 JSONL 会话文件并上传,可能包含敏感内容但已通过 awareness-memory XML 标签过滤

最关键的证据

中危 供应链

守护进程自动启动缺少版本锁定

shared.js:165 和 mcp-stdio.cjs:92 中使用 'npx -y @awareness-sdk/local start' 无版本锁定,攻击者可劫持包名或依赖注入恶意代码。

scripts/shared.js:165
指定版本:spawn('npx', ['-y', '@awareness-sdk/[email protected]', 'start'], ...)
低危 数据外泄

用户 prompt 数据发送至外部云服务

recall.js 作为 UserPromptSubmit hook,在每次用户提交 prompt 前将其发送至 awareness.market 进行语义搜索。prompt 可能包含敏感信息(代码、凭证上下文等),数据离开本地环境。SKILL.md 有声明但警告不够突出。

scripts/recall.js:97
建议用户使用 AWARENESS_LOCAL_URL=localhost:37800 启用本地模式,或在 prompt 中避免包含明文密钥
低危 敏感访问

导入功能读取 OpenClaw 会话历史

import.js 读取 ~/.openclaw/agents/main/sessions/ 下的 JSONL 会话文件并上传至云端记忆服务,可能包含对话中的敏感内容。代码有 awareness-memory XML 标签过滤,但 JSONL 解析器不保证完全清除。

scripts/import.js:76
在导入前增加更严格的敏感信息过滤(如移除 API 密钥模式、密码等)
提示 文档欺骗

capture.js 钩子已禁用但仍在 SKILL.md 声明

SKILL.md 中声明了 Stop hook: 'node ${CLAUDE_SKILL_DIR}/scripts/capture.js',但 capture.js 源码明确注释说明其已被禁用(no-op,直接 exit(0)),不会产生任何副作用。属于过时文档,误导用户以为有会话检查点功能。

scripts/capture.js:1
从 SKILL.md 中移除 Stop hook 声明,或将 capture.js 改名为 capture-disabled.js 以明确状态
提示 供应链

pip/npm 依赖无版本锁定

此技能本身无 package.json/requirements.txt(纯脚本包),但通过 npx 隐式依赖 @awareness-sdk/local 包,缺少版本控制。

scripts/shared.js:165
建议在 SKILL.md 中声明 @awareness-sdk/local 的最低支持版本

声明能力 vs 实际能力

文件系统 通过
声明 READ
→
推断 WRITE
scripts/setup.js:63 - 写入 ~/.awareness/credentials.json; scripts/poll-auth.js:97 - 写入 ~/.openclaw/openclaw.json
网络访问 通过
声明 WRITE
→
推断 WRITE
scripts/recall.js:52 - POST awareness.market/cli-auth; scripts/recall.js:110 - POST /memories/{id}/retrieve
命令执行 通过
声明 WRITE
→
推断 WRITE
scripts/shared.js:165 - spawn('npx', ['-y', '@awareness-sdk/local', 'start']); scripts/recall.js:79 - spawn poll-auth.js detached
环境变量 通过
声明 NONE
→
推断 READ
scripts/shared.js:33 - 仅读取 AWARENESS_* 前缀变量,文档声明'不捕获密钥',代码未遍历 os.environ 匹配敏感关键字
剪贴板 通过
声明 NONE
→
推断 NONE
无剪贴板访问代码
浏览器 通过
声明 NONE
→
推断 READ
scripts/headless-auth.js:63 - openBrowserSilently() 调用 open/xdg-open/start 启动浏览器
数据库 通过
声明 NONE
→
推断 NONE
无直接数据库访问,通过本地守护进程 MCP 协议间接操作
技能调用 通过
声明 NONE
→
推断 READ
scripts/recall.js:155 - spawn import.js 导入 OpenClaw 历史记录

可疑产物与外联

中危 外部 URL
https://awareness.market/cli-auth

scripts/recall.js:52

中危 外部 URL
https://awareness.market/api/v1

scripts/recall.js:110

中危 外部 URL
https://awareness.market\n

scripts/setup.js:223

依赖与供应链

包名版本来源漏洞备注
@awareness-sdk/local * (unpinned) npx implicit 否 npx -y 安装,无版本锁定,存在供应链劫持风险
better-sqlite3 * (未声明) daemon dependency 否 本地守护进程依赖,SKILL.md metadata 未声明

文件构成

37 个文件 · 6740 行
JavaScript 31 个文件 · 6015 行Markdown 4 个文件 · 693 行Shell 1 个文件 · 27 行JSON 1 个文件 · 5 行
需关注文件 · 4
scripts/recall.js JavaScript · 435 行
用户 prompt 数据发送至外部云服务 · https://awareness.market/cli-auth · https://awareness.market/api/v1
scripts/shared.js JavaScript · 382 行
守护进程自动启动缺少版本锁定 · pip/npm 依赖无版本锁定
scripts/setup.js JavaScript · 365 行
https://awareness.market\n
scripts/import.js JavaScript · 242 行
导入功能读取 OpenClaw 会话历史
其他文件 · harness-builder.mjs · SKILL.md · mcp-stdio.cjs · recall.js · shared.js · setup.js +2

安全亮点

代码开源可审计,GitHub 地址公开在 SKILL.md
文档-行为一致性高:未发现未声明的阴影功能
敏感凭证写入权限最小化(0600)且路径隔离(~/.awareness/)
未发现凭证收割行为:代码明确声明且实际不遍历 os.environ 匹配敏感关键字
未发现 base64 编码执行、eval 动态代码执行或反向 shell
capture.js 已明确禁用,不产生会话检查点外泄
提供本地守护进程模式(localhost:37800),可完全避免数据外发
perception-cache.json 在项目级和全局级路径隔离存储,合理