Skill Trust Decision

expert-audit-pub

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

Install decision first Source: ClawHub Scanned: 21 days ago
Files 16
Artifacts 0
Violations 2
Findings 4
Most direct threat evidence

Why this conclusion was reached

1/4 dimensions flagged
Block
Declared vs actual capability

2 undeclared or violating capabilities were inferred.

Pass
Hidden execution and egress

No obvious high-risk egress or execution signals were found.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Review
Dependencies and supply chain hygiene

Dependency information is incomplete, so supply-chain confidence stays limited.

What drove the risk score up

文档-行为不符(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 访问

Most important evidence

Medium Doc Mismatch

文档声称本地运行,实际包含远程 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 次免费、后续需订阅
Medium Priv Escalation

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

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

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

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')或从环境变量读取
Low Sensitive Access

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

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

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

Declared capability vs actual capability

Filesystem Pass
Declared READ
→
Inferred READ
scripts/run.mjs:143 仅读取用户提供的 --input 文件和 ~.audit-expert/ 中的本地凭证
Network Block
Declared NONE
→
Inferred READ
scripts/run.mjs:164 将 {text, subSkill} 通过 fetch POST 到外部核对接口,但 SKILL.md 未声明
Shell Block
Declared WRITE
→
Inferred NONE
SKILL.md allowed-tools 声明 Bash,但整个代码库无任何 subprocess/spawn/exec 调用

Suspicious artifacts and egress

No obvious IOC was extracted.

Dependencies and supply chain

There are no structured dependency warnings.

File composition

16 files · 7856 lines
JavaScript 13 files · 7746 linesMarkdown 1 files · 61 linesJSON 2 files · 49 lines
Other files · 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

Security positives

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