安全决策报告
asset-impairment-check-free
技能核心功能(资产减值检查)代码干净,但存在影子网络行为:向外部服务器发送由主机名+用户名生成的安装标识,自称「匿名」但实际可追踪特定用户/机器。声明的 Bash 权限与实际行为不符。
最直接的威胁证据
为什么得出这个结论
1/4 个维度触发 阻止
声明与实际能力
发现 3 项声明之外的能力或越权行为。
复核
隐藏执行与外联
提取到 1 个一般风险产物,需要结合上下文判断。
通过
攻击链与高危发现
没有形成明确的恶意路径。
复核
依赖与供应链卫生
没有完整依赖信息,供应链判断需要保留弹性。
风险分是怎么被拉高的
影子网络行为 - 可识别的 sid 生成 +20
run.mjs:217-219 使用 hostname()+username 生成 SHA1 哈希发送外部服务器,自称匿名但可追踪特定机器+用户
文档欺骗 - 匿名声明与实际不符 +15
SKILL.md 声称 sid 为匿名安装标识,但 hostname+username 组合可唯一识别用户环境
未声明的外部网络通信 +10
向 www.tokendidi.cn/api/free-hint 发请求,SKILL.md 仅模糊提及「匿名次数统计」
能力声明不符 - 声明 Bash 但未使用 +5
allowed-tools 声明 Bash,实际代码无任何 shell 执行,纯属多余声明
第三方域名无信任链披露 +5
向中国企业域名发送可识别信息,无隐私政策或数据处理说明
最关键的证据
中危 文档欺骗
匿名标识声明与实际不符
SKILL.md 声称发送「不含任何材料的匿名安装标识(由主机名与用户名做短哈希得到)」,但 SHA1(hostname+username) 可唯一识别用户机器和身份,非真正匿名。
scripts/run.mjs:217 使用随机 UUID 或删除遥测;如需统计使用量,使用完全独立的随机安装 ID,不与机器/用户信息关联
中危 数据外泄
未充分披露的外部网络通信
技能在每次执行后向 www.tokendidi.cn 发送 `id` 和 `sid` 参数,收集使用频率和用户环境信息,作为「次数统计」功能。无隐私政策说明数据保留期限和用途。
scripts/run.mjs:227 在 SKILL.md 中明确披露第三方服务商、数据字段含义、用途和保留策略;考虑使用可信的统计服务或本地离线计数
低危 权限提升
能力声明超出实际需要
allowed-tools 声明 Bash 但代码未使用任何 shell 执行,纯属多余声明。
SKILL.md:13 移除 Bash 声明,仅保留 Read
声明能力 vs 实际能力
文件系统 通过
声明 READ
→ 推断 READ
run.mjs:73 仅读取入参 JSON 文件 命令执行 阻止
声明 WRITE
→ 推断 NONE
allowed-tools:Bash 但代码无 child_process 调用 网络访问 阻止
声明 NONE
→ 推断 WRITE
run.mjs:227-229 向外部服务器发送 sid 数据 环境变量 阻止
声明 NONE
→ 推断 READ
run.mjs:218 读取 os.hostname() 和 os.userInfo().username 可疑产物与外联
中危 外部 URL
https://www.tokendidi.cn/api/free-hint scripts/run.mjs:215
依赖与供应链
没有结构化依赖告警。
文件构成
4 个文件 · 685 行
JavaScript 2 个文件 · 604 行Markdown 1 个文件 · 78 行JSON 1 个文件 · 3 行
需关注文件 · 2
scripts/run.mjs 匿名标识声明与实际不符 · 未充分披露的外部网络通信 · https://www.tokendidi.cn/api/free-hint
SKILL.md 能力声明超出实际需要
其他文件 · asset-impairment-check.js · sample.json
安全亮点
核心引擎(asset-impairment-check.js)使用纯 Node 标准库,无外部依赖,无网络调用
材料不出本机(财务数据不外传),声明准确
检查逻辑透明,结果可第三方复算
错误处理完善,材料不足时不给虚假结论
无代码混淆或恶意 payload