Skill Trust Decision

camscanner

CamScanner 官方文档处理 Skill,代码实现良好(含校验和、回滚),但存在远程升级 CDN 供应链单点风险和文档中 `curl|sh` 管道执行模式两个需要注意的安全考量。

Install decision first Source: ClawHub Scanned: Aug 21, 2026
Files 15
Artifacts 4
Violations 0
Findings 3

Why this conclusion was reached

1/4 dimensions flagged
Pass
Declared vs actual capability

Declared resources and inferred behavior are broadly aligned.

Block
Hidden execution and egress

1 high-risk artifacts or egress signals were extracted.

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

文档中的远程管道执行模式 +10

SKILL.md 注释和 setup.sh 注释均包含 `curl ... | sh` 模式,虽已正确实现为临时文件执行,但该模式本身属于高危指标

自我升级供应链依赖单一 CDN +10

upgrade.sh/upgrade.cjs 从 https://data.camscanner.com 下载 CLI 二进制和 Skill ZIP 并覆盖本地文件,若 CDN 被入侵可被恶意更新替换

校验和验证为可选降级 +-5

setup.sh/download 分支中校验和验证失败仅打印 [WARN] 而不中止,upgrade.sh 虽强制检查但下载失败时不阻止

无凭证收割/无隐蔽行为 +-5

未发现凭证窃取、敏感路径遍历、base64 混淆或数据外传

Most important evidence

Medium Supply Chain

远程升级依赖单一 CDN,存在供应链单点风险

upgrade.sh 和 upgrade.cjs 从 https://data.camscanner.com 下载 CLI 二进制和 Skill ZIP 包并直接覆盖本地文件系统。若 CDN 被入侵,攻击者可推送恶意二进制/SKILL.md/scripts 以合法签名分发更新。

scripts/upgrade.sh:131
考虑引入代码签名验证(而非仅校验 SHA256 哈希),或限制 AI Agent 在会话内执行升级操作的权限
Low Doc Mismatch

文档注释中包含危险管道执行模式 `curl | sh`

SKILL.md 和 setup.sh 注释均展示了 `curl -fsSL <CDN>/setup.sh | sh` 模式,这是典型的高危远程代码执行指标。虽实际代码使用安全的临时文件下载方式,但注释本身暴露了危险用法。

SKILL.md:36
从文档中移除该管道模式示例,统一使用 `bash scripts/setup.sh`
Low Supply Chain

setup.sh 下载校验和失败时仅告警不中止

当 checksums.txt 下载失败或缺少条目时,setup.sh 仅打印 [WARN] 继续执行,不中止安装过程,存在校验和验证可被绕过的风险。

scripts/setup.sh:96
建议在 CI/发布流程中强制生成 checksums.txt,并在下载失败时退出而非仅告警

Declared capability vs actual capability

Filesystem Pass
Declared WRITE
→
Inferred WRITE
SKILL.md:1 — 输出文件写入本地路径,setup.sh 安装 CLI 到 ~/.local/bin
Network Pass
Declared READ
→
Inferred READ+WRITE
SKILL.md:1 — 上传文件到 CamScanner 服务器处理(WRITE),下载 CLI 二进制(upgrade.sh:131-143)
Shell Pass
Declared ADMIN
→
Inferred ADMIN
setup.sh:88 — chmod +x 安装二进制;upgrade.sh:155 — mv/cp 替换正在运行的 CLI
Environment Pass
Declared NONE
→
Inferred READ
setup.sh:6 — 读取 CAMSCANNER_CLI_VERSION/CDN/DIR 等环境变量用于配置(符合工具合法用途)

Suspicious artifacts and egress

Critical Dangerous Command
curl -fsSL <CDN>/setup.sh | sh

scripts/setup.sh:7

Medium External URL
https://www.camscanner.com

SKILL.md:8

Medium External URL
https://data.camscanner.com/camscanner-cli/releases

scripts/setup.cjs:22

Medium External URL
https://data.camscanner.com/camscanner-cli

scripts/upgrade.cjs:24

Dependencies and supply chain

There are no structured dependency warnings.

File composition

15 files · 2827 lines
Markdown 9 files · 1017 linesJavaScript 2 files · 700 linesOther 2 files · 566 linesShell 2 files · 544 lines
Files of concern · 5
SKILL.md Markdown · 386 lines
文档注释中包含危险管道执行模式 `curl | sh` · https://www.camscanner.com
scripts/upgrade.cjs JavaScript · 499 lines
https://data.camscanner.com/camscanner-cli
scripts/upgrade.sh Shell · 366 lines
远程升级依赖单一 CDN,存在供应链单点风险
scripts/setup.cjs JavaScript · 201 lines
https://data.camscanner.com/camscanner-cli/releases
scripts/setup.sh Shell · 178 lines
setup.sh 下载校验和失败时仅告警不中止 · curl -fsSL <CDN>/setup.sh | sh
Other files · upgrade.ps1 · image-processing.md · setup.ps1 · tool-combos.md · pdf-processing.md · batch-convert.md +1

Security positives

代码质量良好:跨平台脚本(Shell/PowerShell/Node.js)均实现完整,包括临时文件隔离、trap 清理、PATH 管理
有校验和验证:SHA256 校验和下载和比对流程完整(setup.sh:79-103, upgrade.sh:157-179)
有回滚机制:upgrade.sh/upgrade.cjs 升级前备份旧版 CLI 和 Skill,失败时自动回滚
无凭证收割:未发现环境变量遍历、敏感路径(~/.ssh/.aws)访问或凭证外传行为
无混淆代码:所有脚本均为明文可读,未发现 base64 编码或 eval 模式
文件操作安全:所有写操作使用 mktemp/tmpdir 隔离,EXIT trap 确保清理
声明-行为一致性:SKILL.md 声明的 all 功能均有对应脚本实现,未发现阴影功能