安全决策报告

expert-audit-pub

代码本身无恶意行为,但 SKILL.md 声明与实际行为存在重大不符:文档称「本机运行、无需注册」,代码却将材料 POST 到外部核对接口;此外 allowed-tools 声明了 Bash 但代码从未使用,存在越权声明。

安装决策优先 来源: ClawHub 扫描时间: 2026/9/22
文件 16
IOC 0
越权项 2
发现 4
最直接的威胁证据

为什么得出这个结论

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

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

通过
隐藏执行与外联

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

通过
攻击链与高危发现

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

复核
依赖与供应链卫生

没有完整依赖信息,供应链判断需要保留弹性。

风险分是怎么被拉高的

文档-行为不符(doc_deception + shadow) +18

SKILL.md 声称「本机运行、无需注册、无需配置 API Key」,但 run.mjs 将用户材料 POST 到 ${BASE}/api/v1/expert/audit,行为与文档不一致

越权声明 allowed-tools +8

SKILL.md 声明 Bash 但代码从未调用 subprocess/spawn/exec,无任何 shell 执行行为

BASE 变量未定义(功能缺陷) +5

run.mjs 第 115、164 行引用 ${BASE} 但从未赋值,所有远程 API 调用均抛出 ReferenceError

凭证本地存储 +4

subscription token 和 license token 存入 ~/.audit-expert/,虽 mode 0o600 合规但应向用户披露

本地引擎纯正 +-5

所有 engine/parts/*.js 文件仅含算术/字符串运算,无 fetch/child_process/process 访问

最关键的证据

中危 文档欺骗

文档声称本地运行,实际包含远程 API 调用

SKILL.md 明确声明「本机运行、无需注册、无需配置 API Key」,但 run.mjs 会将用户材料通过 fetch POST 到 ${BASE}/api/v1/expert/audit。此外 `x-expert-install`(安装标识 UUID)、`x-subscription`(订阅 token)、`x-license`(许可证 token)会被发送至外部服务器。

scripts/run.mjs:164
SKILL.md 应声明网络行为:与远程核对接口通信、前 5 次免费、后续需订阅
中危 权限提升

越权声明 allowed-tools:Bash 未使用

SKILL.md allowed-tools 声明 Bash(→ shell:WRITE),但代码库中没有任何 subprocess/spawn/exec/execSync 调用。声明超出实际使用的权限。

SKILL.md:14
将 Bash 从 allowed-tools 移除,或在代码中补充实际的 shell 执行逻辑
中危 供应链

BASE 变量未定义,远程 API 功能完全不可用

run.mjs 在 3 处引用未定义的 BASE 变量(行 101 HELP 文本,行 115 activate,行 164 dispatch),所有需要联网的功能(激活订阅、发送材料、付费处理)均抛出 ReferenceError: BASE is not defined。

scripts/run.mjs:115
定义 BASE 常量(如 const BASE = 'https://api.workbuddy.cn')或从环境变量读取
低危 敏感访问

凭证写入用户主目录应向用户披露

run.mjs 在 ~/.audit-expert/ 下创建 install-id、subscription.json、license.json,mode 0o600 合规但 SKILL.md 未告知用户数据落盘行为。

scripts/run.mjs:60
在 SKILL.md 中增加隐私说明:安装标识和订阅凭证存储位置及保护方式

声明能力 vs 实际能力

文件系统 通过
声明 READ
→
推断 READ
scripts/run.mjs:143 仅读取用户提供的 --input 文件和 ~.audit-expert/ 中的本地凭证
网络访问 阻止
声明 NONE
→
推断 READ
scripts/run.mjs:164 将 {text, subSkill} 通过 fetch POST 到外部核对接口,但 SKILL.md 未声明
命令执行 阻止
声明 WRITE
→
推断 NONE
SKILL.md allowed-tools 声明 Bash,但整个代码库无任何 subprocess/spawn/exec 调用

可疑产物与外联

没有提取到明显 IOC。

依赖与供应链

没有结构化依赖告警。

文件构成

16 个文件 · 7856 行
JavaScript 13 个文件 · 7746 行Markdown 1 个文件 · 61 行JSON 2 个文件 · 49 行
其他文件 · industry-vertical-pack-full.js · industry-vertical-pack.js · procurement-payable-pack-full.js · procurement-payable-pack.js · audit-adjustment-pack-full.js · audit-adjustment-pack.js +6

安全亮点

所有 engine/parts/*.js 文件为纯本地算术/字符串运算,无任何网络、shell、凭证访问
本地凭证目录 mode 0o700 安装标识 mode 0o600,符合最小权限原则
代码无 Base64/eval/child_process 等高危指标
不存在数据外泄、凭证收割、隐蔽信道等恶意行为
本地执行模式(data.run_local)完全隔离于网络,不依赖远程 API