安全决策报告

layered-memory

代码引用 ~/clawd/scripts/ 下的外部脚本(memory-extractor.js, memory-archiver.js, generate-layers-simple.js, memory-reader.js)但这些脚本未打包在技能目录中;此外 SKILL.md 声明了 4 个命令但代码实际实现了 9 个(extract/archive/summary/dedupe 未声明)。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/6
文件 18
IOC 0
越权项 2
发现 5
最直接的威胁证据
01
用户安装 layered-memory 技能,读取 SKILL.md 理解其功能 初始入口 · SKILL.md
02
技能代码 require ~/clawd/scripts/memory-extractor.js 等外部脚本 权限提升 · index.js
03
generate/read/search/stats 等方法通过 execSync 执行外部 JS 脚本 权限提升 · index.js

为什么得出这个结论

2/4 个维度触发
阻止
声明与实际能力

发现 2 项声明之外的能力或越权行为。

通过
隐藏执行与外联

当前没有明显的高危外联或执行信号。

阻止
攻击链与高危发现

报告包含 4 步攻击链,另有 2 项高危或严重发现。

通过
依赖与供应链卫生

依赖结构存在,但暂未看到明显高危告警。

攻击链

01
用户安装 layered-memory 技能,读取 SKILL.md 理解其功能

初始入口 · SKILL.md:1

02
技能代码 require ~/clawd/scripts/memory-extractor.js 等外部脚本

权限提升 · index.js:29

03
generate/read/search/stats 等方法通过 execSync 执行外部 JS 脚本

权限提升 · index.js:40

04
攻击者可将恶意脚本放置在 ~/clawd/scripts/ 下,技能运行时以同权限执行(条件:用户 ~/clawd/scripts/ 目录可写且无验证)

最终危害 · index.js:40

风险分是怎么被拉高的

未声明的 shell 执行 +20

index.js 使用 execSync 执行外部 JS 脚本,但 SKILL.md 未声明 shell:WRITE 能力

外部依赖缺失 +15

代码 require ~/clawd/scripts/ 下的 4 个脚本但未打包,运行时必然失败或依赖外部污染

文档-行为差异 +10

SKILL.md 只声明 4 个命令,实际实现了 9 个(extract/archive/summary/dedupe)

最关键的证据

高危 供应链

外部脚本缺失导致功能不可用

index.js 第 29-31 行 require ~/clawd/scripts/ 下的 memory-extractor.js 和 memory-archiver.js,第 40-58 行的 generate/read/search/stats 方法通过 execSync 调用 ~/clawd/scripts/ 下的 generate-layers-simple.js 和 memory-reader.js,但这 4 个脚本均未打包在技能目录中。运行时必然报错,除非用户在 ~/clawd/scripts/ 下自行准备这些脚本。

index.js:29-58
将 memory-extractor.js, memory-archiver.js, generate-layers-simple.js, memory-reader.js 打包到 skills/layered-memory/scripts/ 目录内,并更新路径引用
高危 文档欺骗

SKILL.md 声明命令与实际不符

SKILL.md 只声明了 generate、read、search、stats 四个命令,但 index.js 实际实现了 9 个 CLI 命令(generate、read、search、stats、maintain、extract、archive、summary、dedupe),其中 extractMemories、archiveOld、monthlySummary、deduplicate 为阴影功能。

index.js:145-218
更新 SKILL.md,完整声明 extract、archive、summary、dedupe、maintain 命令及其功能
中危 供应链

test.js 对外部路径存在性检查

test.js 第 75-86 行检查 ~/clawd/scripts/generate-layers-simple.js 是否存在,并读取其内容验证 v2 功能。这意味着 test 依赖于用户环境中有该脚本,技能自身不完整。

test.js:75-86
移除对 ~/clawd/scripts 的外部依赖,或将该检查改为 mock 方式
低危 文档欺骗

benchmark.js 包含硬编码用户路径

benchmark.js 第 56-57 行硬编码了 /root/.openclaw/workspace/memory/ 路径,非可移植路径。

benchmark.js:56-57
使用环境变量或相对路径替代硬编码路径
低危 文档欺骗

OpenClaw hook 未在 SKILL.md 中声明

package.json 注册了 openclaw hooks (agent:bootstrap 事件注入记忆提醒),但 SKILL.md 未提及此行为。

package.json:19-26
在 SKILL.md Capabilities 章节补充声明 OpenClaw 集成和行为

声明能力 vs 实际能力

文件系统 阻止
声明 READ
推断 WRITE
index.js:29-31 代码执行 fs.readFileSync/writeFileSync
命令执行 阻止
声明 NONE
推断 WRITE
index.js:40-58 使用 execSync 调用外部脚本
技能调用 通过
声明 NONE
推断 WRITE
index.js:29-31 require(~/clawd/scripts/memory-extractor.js) 等外部模块

可疑产物与外联

没有提取到明显 IOC。

依赖与供应链

包名版本来源漏洞备注
memory-extractor.js N/A ~/.clawd/scripts/ (external, not bundled) 高风险:外部脚本未打包,依赖用户环境存在
memory-archiver.js N/A ~/.clawd/scripts/ (external, not bundled) 高风险:外部脚本未打包,依赖用户环境存在
generate-layers-simple.js N/A ~/.clawd/scripts/ (external, not bundled) 高风险:外部脚本未打包,依赖用户环境存在
memory-reader.js N/A ~/.clawd/scripts/ (external, not bundled) 高风险:外部脚本未打包,依赖用户环境存在

文件构成

18 个文件 · 2694 行
Markdown 11 个文件 · 1766 行JavaScript 5 个文件 · 878 行JSON 2 个文件 · 50 行
需关注文件 · 3
index.js JavaScript · 405 行
外部脚本缺失导致功能不可用 · SKILL.md 声明命令与实际不符
test.js JavaScript · 156 行
test.js 对外部路径存在性检查
benchmark.js JavaScript · 88 行
benchmark.js 包含硬编码用户路径
其他文件 · AUTO-TRIGGER.md · AUTO-SAVE-GUIDE.md · INTEGRATION.md · README.md · config-loader.js · UPGRADE_PLAN.md +3

安全亮点

无恶意代码:无 base64 编码、eval、混淆或反向 shell
无凭证收割:未遍历环境变量匹配敏感关键字
无数据外泄:无 POST 请求或 C2 通信
无硬编码凭证或密钥
MIT 许可证声明清晰
benchmark.js 使用字符数估算 token(无外部 API 调用)
OpenClaw hook 行为仅为注入文本提醒,无危害操作