安全决策报告

anzhuang-suanliang

技能代码本身无恶意行为,但 SKILL.md 未声明 filesystem/ network/ shell 权限且 ensure_base.sh 自动下载安装外部依赖构成供应链风险。

安装决策优先 来源: ClawHub 扫描时间: 15 天前
文件 16
IOC 2
越权项 3
发现 3
最直接的威胁证据

为什么得出这个结论

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

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

复核
隐藏执行与外联

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

通过
攻击链与高危发现

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

复核
依赖与供应链卫生

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

风险分是怎么被拉高的

权限声明缺失 +15

SKILL.md 声明 capability:NONE,但代码实际使用 filesystem:WRITE(输出xlsx/JSON)、shell:WRITE(subprocess 调用 ensure_base.sh)、network:READ(下载外部依赖)

供应链依赖风险 +15

ensure_base.sh 从 lisong2003-lgtm/cad-file-reader 下载依赖,虽有 SHA-256 校验但无版本 pinning,依赖外源第三方包

下载失败处理不完善 +10

依赖下载失败时仅退出而非优雅降级;SHA256SUMS 下载失败时整体退出(exit 3),降级路径依赖 SKILL_NO_BASE 环境变量而非自动 fallback

最关键的证据

中危 文档欺骗

权限声明与实际能力严重不符

SKILL.md 和 manifest.json 均未声明 filesystem/ shell/ network 权限,但代码通过 subprocess 调用 ensure_base.sh(shell:WRITE)和 cad_validate.sh,并执行 curl 下载外部依赖(network:READ),输出文件写磁盘(filesystem:WRITE)。

SKILL.md:1
在 SKILL.md 明确声明所需权限:filesystem:WRITE、shell:WRITE、network:READ,并说明用途
中危 供应链

显式依赖外部来源包,无版本 pinning

ensure_base.sh 默认从 GitHub releases 下载 cad-file-reader v0.28.5(可配置 CAD_FILE_READER_VERSION),虽然有 SHA-256 完整性校验,但无版本锁定,存在依赖版本漂移或发布包被篡改的潜在风险。

scripts/ensure_base.sh:60
在 manifest.json 或 SKILL.md 中明确锁定具体版本号(如 cad-file-reader==0.28.5),避免依赖升级引入兼容或安全问题
低危 供应链

下载失败处理逻辑不健壮

ensure_base.sh 中 SHA256SUMS 下载失败时直接 exit 3 终止,不给用户提示可降级使用 SKILL_NO_BASE=1;curl 下载有 timeout 但无重试机制。

scripts/ensure_base.sh:73
SHA256SUMS 下载失败时提示用户并建议设置 SKILL_NO_BASE=1 降级,而非直接退出

声明能力 vs 实际能力

文件系统 阻止
声明 NONE
→
推断 WRITE
mep_plan.py:1300 写 xlsx; mep_scan.py:277 写 JSON
命令执行 阻止
声明 NONE
→
推断 WRITE
mep_scan.py:27 subprocess.run ensure_base.sh; mep_plan.py:770 subprocess.run cad_validate.sh
网络访问 阻止
声明 NONE
→
推断 READ
ensure_base.sh:67 curl 下载 GitHub release; ensure_base.sh:73 下载 SHA256SUMS

可疑产物与外联

中危 外部 URL
https://clawhub.ai/user/lisong2003-lgtm

skill-card.md:9

中危 外部 URL
https://clawhub.ai/lisong2003-lgtm/skills/anzhuang-suanliang

skill-card.md:35

依赖与供应链

包名版本来源漏洞备注
cad-file-reader >=0.28.1 (默认安装0.28.5) GitHub releases (lisong2003-lgtm) 否 从外部 GitHub 下载安装,有SHA-256校验但无版本pinning
ezdwg/read_cad bundled in cad-file-reader vendor cad-file-reader vendor 否 通过 ensure_base.sh 补齐的底座依赖
openpyxl * pip (未在requirements.txt声明) 否 用于生成xlsx,代码中import但未在依赖文件声明

文件构成

16 个文件 · 2516 行
Python 3 个文件 · 1755 行Markdown 6 个文件 · 298 行JSON 4 个文件 · 291 行Shell 3 个文件 · 172 行
需关注文件 · 3
SKILL.md Markdown · 91 行
权限声明与实际能力严重不符
scripts/ensure_base.sh Shell · 110 行
显式依赖外部来源包,无版本 pinning · 下载失败处理逻辑不健壮
skill-card.md Markdown · 56 行
https://clawhub.ai/user/lisong2003-lgtm · https://clawhub.ai/lisong2003-lgtm/skills/anzhuang-suanliang
其他文件 · mep_plan.py · mep_scan.py · self_test.py · dual_caliber_rules.json · README.md · standard_rules.json +3

安全亮点

代码结构清晰,1301行 mep_plan.py 无混淆、无隐藏行为
依赖下载有 SHA-256 完整性校验,校验失败拒绝安装
manifest.json 有明确的 privacy 声明(DWG只在本机,输出由用户保管)
openpyxl 用于 xlsx 输出,声明在 manifest.json 中
无凭证收割、环境变量遍历、敏感路径访问等恶意指标
self_test.py 包含完整单元测试覆盖核心算法
支持 SKILL_NO_BASE=1 降级模式,可在离线环境禁用自动下载