安全决策报告

deferred-tax-check-free

SKILL.md 声称"完全本地运行、不需要联网、不发送材料",但 run.mjs 在每次运行结束后会向外部服务器 https://www.tokendidi.cn/api/free-hint 发送网络请求,传输 hostname|username 的 SHA1 哈希作为匿名安装标识。这是典型的文档-行为差异(Shadow Functionality),属于影子功能风险。

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

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

通过
攻击链与高危发现

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

通过
依赖与供应链卫生

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

风险分是怎么被拉高的

文档欺骗/影子功能 +20

SKILL.md 声称"完全本地运行、不需要联网、不发送材料",但代码在 hintAfterRun() 中实际向外部服务器发送请求

敏感环境信息外传 +10

收集 os.hostname() 和 os.userInfo().username 的组合哈希 sid 并发送至外部服务器,存在用户指纹识别风险

外部URL通信 +5

向 https://www.tokendidi.cn/api/free-hint 发送请求,虽声称匿名但仍涉及网络出站

最关键的证据

中危 文档欺骗

文档与代码行为不一致 - 影子功能

SKILL.md 明确声明"完全本地运行"、"不需要联网"、"不发送材料",但 run.mjs 第 219-236 行的 hintAfterRun() 函数在每次运行后向 https://www.tokendidi.cn/api/free-hint 发送网络请求。这是典型的文档欺骗型影子功能(Code Does More Than Docs Claim)。

scripts/run.mjs:219
在 SKILL.md 的"使用次数与完整档"章节中明确说明存在匿名次数统计网络请求,或在 allowed-tools 中声明网络访问能力。
中危 敏感访问

收集系统标识符用于外部传输

run.mjs 第 229-230 行收集 os.hostname() 和 os.userInfo().username,组合后取 SHA1 哈希前 16 位作为 sid 发送至外部服务器。虽然声称"不读环境变量",但仍收集了可识别用户身份的信息,存在用户指纹识别和追踪风险。

scripts/run.mjs:229
考虑使用完全随机的匿名标识符(如 crypto.randomUUID)替代 hostname|username 组合,或在文档中明确说明此类信息收集。
低危 文档欺骗

权限声明宽泛

allowed-tools 声明了 Bash 权限,但代码中实际未使用 shell 执行功能,属于权限过度声明。

SKILL.md:17
移除未使用的 Bash 权限声明,保持最小权限原则。

声明能力 vs 实际能力

文件系统 通过
声明 READ
→
推断 READ
SKILL.md:allowed-tools:Read; 仅在 loadInput() 中读取入参文件
命令执行 通过
声明 WRITE
→
推断 NONE
SKILL.md:allowed-tools:Bash 声明但代码未使用 subprocess/bash 执行
网络访问 阻止
声明 NONE
→
推断 WRITE
scripts/run.mjs:222 HINT_URL 外部请求

可疑产物与外联

中危 外部 URL
https://www.tokendidi.cn/api/free-hint

scripts/run.mjs:222

依赖与供应链

包名版本来源漏洞备注
纯Node标准库 N/A 内置 否 deferred-tax-check.js 仅使用 Node.js 内置模块(crypto, os, fs, path 等),无外部依赖

文件构成

4 个文件 · 843 行
JavaScript 2 个文件 · 731 行Markdown 1 个文件 · 109 行JSON 1 个文件 · 3 行
需关注文件 · 2
scripts/run.mjs JavaScript · 258 行
文档与代码行为不一致 - 影子功能 · 收集系统标识符用于外部传输 · https://www.tokendidi.cn/api/free-hint
SKILL.md Markdown · 109 行
权限声明宽泛
其他文件 · deferred-tax-check.js · sample.json

安全亮点

核心检查逻辑(deferred-tax-check.js)完全本地执行,使用纯 Node.js 标准库,无第三方依赖
代码结构清晰,CHECKS_GIVEN/CHECKS_WITHHELD 明确区分免费版和完整版功能
材料不足时明确不给结论(退出码 3),不输出"未发现问题"的误导性结果
支持 --no-stats 参数允许用户禁用网络请求
网络请求使用 AbortController 设置 2500ms 超时,失败不影响核对结果
无恶意行为证据:代码用于正当的递延所得税核算,无凭证收割、RCE 或数据外泄的主动行为