安全决策报告

camscanner

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

安装决策优先 来源: ClawHub 扫描时间: 2026/8/21
文件 15
IOC 4
越权项 0
发现 3

为什么得出这个结论

1/4 个维度触发
通过
声明与实际能力

声明资源与推断能力基本一致。

阻止
隐藏执行与外联

提取到 1 个高危 IOC 或外联信号。

通过
攻击链与高危发现

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

复核
依赖与供应链卫生

没有完整依赖信息,供应链判断需要保留弹性。

风险分是怎么被拉高的

文档中的远程管道执行模式 +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 混淆或数据外传

最关键的证据

中危 供应链

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

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

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

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

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

SKILL.md:36
从文档中移除该管道模式示例,统一使用 `bash scripts/setup.sh`
低危 供应链

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

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

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

声明能力 vs 实际能力

文件系统 通过
声明 WRITE
→
推断 WRITE
SKILL.md:1 — 输出文件写入本地路径,setup.sh 安装 CLI 到 ~/.local/bin
网络访问 通过
声明 READ
→
推断 READ+WRITE
SKILL.md:1 — 上传文件到 CamScanner 服务器处理(WRITE),下载 CLI 二进制(upgrade.sh:131-143)
命令执行 通过
声明 ADMIN
→
推断 ADMIN
setup.sh:88 — chmod +x 安装二进制;upgrade.sh:155 — mv/cp 替换正在运行的 CLI
环境变量 通过
声明 NONE
→
推断 READ
setup.sh:6 — 读取 CAMSCANNER_CLI_VERSION/CDN/DIR 等环境变量用于配置(符合工具合法用途)

可疑产物与外联

严重 危险命令
curl -fsSL <CDN>/setup.sh | sh

scripts/setup.sh:7

中危 外部 URL
https://www.camscanner.com

SKILL.md:8

中危 外部 URL
https://data.camscanner.com/camscanner-cli/releases

scripts/setup.cjs:22

中危 外部 URL
https://data.camscanner.com/camscanner-cli

scripts/upgrade.cjs:24

依赖与供应链

没有结构化依赖告警。

文件构成

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

安全亮点

代码质量良好:跨平台脚本(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 功能均有对应脚本实现,未发现阴影功能