安全决策报告

token-sop

TOKEN SOP技能存在多处文档-行为不一致:文件系统写操作未声明、默认启用云端贡献且SKILL.md声称「本地存储不传敏感数据」与实际行为矛盾、session数据自动外传至外部API,虽有PII清理但整体透明度不足。

安装决策优先 来源: 手动上传 扫描时间: 2026/4/5
文件 32
IOC 2
越权项 1
发现 5
最直接的威胁证据
高危 文档欺骗
SKILL.md 声称「本地存储不传敏感数据」但默认自动云端上传

SKILL.md 营销文案明确声明「隐私安全:工作流保存在本地,不上传敏感数据」,但 skill.json 中 auto_contribute 默认为 true,onSessionComplete 会将完整 session action trace、intent、URL、node_id POST 到 https://api.ainclaw.com/v1/lobsters/contribute。PII虽经sanitizer清理但URL、行为序列等元数据仍外传。

SKILL.md:73

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

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

风险分是怎么被拉高的

文件系统WRITE操作未声明 +15

local-store.ts 对 ~/.openclaw/workflows/ 执行 fs.writeFileSync/fs.readFileSync/fs.mkdirSync,skill.json permissions 和 SKILL.md 均未声明 filesystem 权限

文档-行为不一致(阴影功能) +15

SKILL.md 声称「不上传敏感数据到云端」且「断网也能用」,但 auto_contribute 默认 true,session数据自动 POST 到外部API

session数据自动外传至第三方端点 +10

onSessionComplete 将完整 action trace、URL、session_id、node_id 上传到 https://api.ainclaw.com,虽有PII清理但仍有信息泄露风险

undici 依赖无版本锁定 +5

package.json 中 undici 版本为 ^7.2.0,major版本浮动存在供应链风险

最关键的证据

高危 文档欺骗

SKILL.md 声称「本地存储不传敏感数据」但默认自动云端上传

SKILL.md 营销文案明确声明「隐私安全:工作流保存在本地,不上传敏感数据」,但 skill.json 中 auto_contribute 默认为 true,onSessionComplete 会将完整 session action trace、intent、URL、node_id POST 到 https://api.ainclaw.com/v1/lobsters/contribute。PII虽经sanitizer清理但URL、行为序列等元数据仍外传。

SKILL.md:73
将 auto_contribute 默认值改为 false;在 SKILL.md 中明确告知用户云端数据流,包含具体上传字段列表;提供明确的用户知情同意机制。
高危 权限提升

文件系统 WRITE 权限未在 permissions 中声明

local-store.ts 对 ~/.openclaw/workflows/ 执行完整的文件系统操作(fs.writeFileSync、fs.readFileSync、fs.mkdirSync、fs.unlinkSync),但 skill.json 的 permissions 数组中无 filesystem 声明,SKILL.md 中也无文件系统相关描述。

src/local-store.ts:61
在 skill.json permissions 中添加 filesystem 声明,并说明存储目录和用途。
中危 数据外泄

session action trace 数据自动发送至外部端点

每次 session 成功后,onSessionComplete 将包含完整 action traces、intent、URL、dom_skeleton_hash、node_id、session_id 的数据 POST 到 api.ainclaw.com。虽然 PII 经 sanitizer 清理,但浏览器历史行为模式、URL 访问模式、node_id 等均为敏感元数据,且用户无明确感知。

src/cloud-client.ts:47
明确告知用户数据外传范围;在 SKILL.md 配置章节详细列出上传字段;提供 opt-in 机制而非默认开启。
中危 文档欺骗

SKILL.md 功能描述模糊,未披露核心数据处理逻辑

SKILL.md 使用大量营销语言(省钱、快速、智能)而非技术描述,缺少对关键机制的技术说明:1) 拦截 intent 的实际行为;2) 本地缓存命中后的执行逻辑;3) 云端贡献的完整数据流。用户无法基于真实信息做安全决策。

SKILL.md:1
重写 SKILL.md,移除营销语言,补充技术架构说明:数据流图、权限需求、存储位置、上传字段清单。
低危 供应链

undici 依赖使用 ^ 浮动版本

package.json 中 undici 版本为 ^7.2.0,major 版本浮动可能在后续引入不兼容变更或已知漏洞。

package.json:10
锁定为精确版本(如 7.2.0)或使用 ~7.2.0 允许 patch 更新。

声明能力 vs 实际能力

网络访问 通过
声明 READ
推断 WRITE
skill.json:9 cloud POST/GET 请求为合法功能,但 endpoint 未在 SKILL.md 中声明
文件系统 阻止
声明 NONE
推断 WRITE
src/local-store.ts:60-65 fs.writeFileSync 写入 ~/.openclaw/workflows/ 目录,permissions 中无 filesystem 声明
浏览器 通过
声明 READ/WRITE
推断 READ/WRITE
skill.json:9 声明 browser,代码中合法使用 getCurrentUrl/getDomSkeletonHash/execute
lobster 通过
声明 READ/WRITE
推断 READ/WRITE
skill.json:9 声明 lobster,代码中合法使用 validate/execute
sessions_history 通过
声明 READ
推断 READ
skill.json:9 声明 sessions_history,代码中仅读取 sessionHistory

可疑产物与外联

中危 外部 URL
https://api.ainclaw.com

SKILL.md:97

中危 外部 URL
https://clawhub.dev/skills/token-sop

skill.json:7

依赖与供应链

包名版本来源漏洞备注
undici ^7.2.0 npm 无版本锁定,major 浮动
typescript ^5.7.0 npm-dev 仅开发依赖
@types/node ^22.0.0 npm-dev 仅开发依赖

文件构成

32 个文件 · 2558 行
TypeScript 17 个文件 · 1405 行JavaScript 9 个文件 · 883 行JSON 4 个文件 · 143 行Markdown 2 个文件 · 127 行
需关注文件 · 1
src/local-store.ts TypeScript · 229 行
文件系统 WRITE 权限未在 permissions 中声明
其他文件 · interceptor.js · interceptor.ts · local-store.js · sanitizer.js · sanitizer.ts · trace-compiler.js +5

安全亮点

PII sanitizer 实现完善,对 email、phone、card、ssn、password、api_key 等敏感信息有系统化正则清理
Lobster 工作流执行前有 validate 校验,防止恶意 workflow 注入
云端贡献默认有过滤逻辑(至少2步、status=success),避免无价值数据污染
代码结构清晰,模块化良好,无明显恶意代码模式(无 base64 执行、无 eval、无隐蔽网络通道)
云端请求为标准 HTTPS,非硬编码 IP,数据流向可追溯
onSessionComplete 的 cloud contribute 有 try-catch,失败时静默降级不影响主流程