Skill Trust Decision

anzhuang-suanliang

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

Install decision first Source: ClawHub Scanned: 15 days ago
Files 16
Artifacts 2
Violations 3
Findings 3
Most direct threat evidence

Why this conclusion was reached

1/4 dimensions flagged
Block
Declared vs actual capability

3 undeclared or violating capabilities were inferred.

Review
Hidden execution and egress

2 lower-risk artifacts were extracted and still need context.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Review
Dependencies and supply chain hygiene

2 dependency or supply-chain issues need attention.

What drove the risk score up

权限声明缺失 +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

Most important evidence

Medium Doc Mismatch

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

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,并说明用途
Medium Supply Chain

显式依赖外部来源包,无版本 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),避免依赖升级引入兼容或安全问题
Low Supply Chain

下载失败处理逻辑不健壮

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

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

Declared capability vs actual capability

Filesystem Block
Declared NONE
→
Inferred WRITE
mep_plan.py:1300 写 xlsx; mep_scan.py:277 写 JSON
Shell Block
Declared NONE
→
Inferred WRITE
mep_scan.py:27 subprocess.run ensure_base.sh; mep_plan.py:770 subprocess.run cad_validate.sh
Network Block
Declared NONE
→
Inferred READ
ensure_base.sh:67 curl 下载 GitHub release; ensure_base.sh:73 下载 SHA256SUMS

Suspicious artifacts and egress

Medium External URL
https://clawhub.ai/user/lisong2003-lgtm

skill-card.md:9

Medium External URL
https://clawhub.ai/lisong2003-lgtm/skills/anzhuang-suanliang

skill-card.md:35

Dependencies and supply chain

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

File composition

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

Security positives

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