SuperAPI AI 工具集

scan-repo

安全与审计

查看项目

更新于 10-16 06:57

技能介绍

用途

Scan Repo 用于在安装或采用某个 GitHub 开源专案之前,对其安全性、可信度与健康状况进行评估。触发场景包括:使用者贴出 GitHub URL、询问某个套件或专案是否安全可信、想在安装前评估风险,或提到「帮我看一下这个 repo」「这个专案安不安全」「我想用这个开源套件」「这个工具可以信任吗」等。

使用方式

/scan-repo https://github.com/owner/repo

GitHub repo URL 为必要参数。若使用者未提供,直接询问,不猜测。URL 会自动清理追踪参数(如 ?fbclid=、?ref=),保留 https://github.com/owner/repo 格式。前置检查通过后才开始扫描流程;扫描完成后无论是否成功,都必须删除 clone 的 repo。

前置检查

git --version 确认 git 是否可用,不可用则停止并提示安装。 gh auth status 确认 gh 是否可用且已登入;不可用或未登入时给出警告,跳过 Phase 5(Issues 扫描),其余照跑。

扫描流程

Phase 1 专案概览:依作业系统决定 clone 路径(Linux/macOS 为 /tmp/scan-repo-{repo_name},Windows 为 %TEMP%\scan-repo-{repo_name}),使用 git clone --depth 50 克隆,整理专案名称、用途说明、主要语言、关键档案、执行方式、Stars/Forks、License、最后 commit 等资讯。

Phase 2 依赖分析:扫描 package.json、requirements.txt、go.mod、Cargo.toml、Gemfile、pom.xml、build.gradle、composer.json 等,检查是否有已知高风险套件、依赖数量是否合理、是否有 postinstall/preinstall hook、是否锁定版本、依赖是否仍在维护、是否有 native binary 依赖。

Phase 3 静态弱点扫描:优先扫描 src/、lib/、bin/、scripts/ 及根目录的 .js/.py/.sh/.ts 档案,排除 node_modules/、.git/、dist/、build/、vendor/、pycache/ 及大于 1MB 的档案。检查类别包括命令注入、路径穿越、硬编码机密、不安全的反序列化、XSS/注入、不安全的加密、不安全的网路行为、档案系统风险、资讯泄露。

Phase 4 安装脚本与供应链风险:审查 install.sh、setup.sh、bootstrap.sh、Makefile 的 install target、Dockerfile、docker-compose.yml、GitHub Actions workflow、package.json 的 scripts 栏位,检查是否有 curl | bash 模式、下载并执行外部脚本、修改系统层级设定、请求不必要权限、obfuscated code、可疑 outbound 连线、覆盖现有档案等问题。GitHub Actions 额外检查 unpinned action、pull_request_target 搭配 checkout、secrets 输出到 log、第三方 action 未锁定 commit SHA。

Phase 5 Issues 安全回报扫描:需要 gh CLI,使用关键字筛选安全相关 issues(含 open + closed),分析是否有未修复的安全漏洞、已修复漏洞的严重程度、维护者的回应速度、是否有 SECURITY.md。无法使用 gh 时跳过此阶段并注明。

Phase 6 维护者与专案健康度:检查最后 commit 距今时间、Contributors 数量、是否有 CI/CD、是否有测试、是否有 code review 文化、License 是否明确。

输出格式

扫描完成后输出报告,包含专案概览、依赖分析、静态弱点(每个弱点附类别、档案:行号、严重程度、说明、利用场景、建议)、供应链风险、Issues 安全回报、专案健康度、风险总结表(程式码安全、依赖风险、供应链风险、已知漏洞、维护状态五个维度)与结论(是否建议安装、已知风险摘要、注意事项)。严重程度定义为:🔴 High 可直接利用导致 RCE、资料外泄、权限提升;🟡 Medium 需特定条件才能利用但影响范围大;🟢 Low 防御纵深问题或影响范围小。

限制与注意事项

只报告有实际风险的发现,不报理论性问题;信心不足 70% 的发现不列入报告;每个发现都需附具体档案和行号;报告以繁体中文输出。扫描完成后删除 clone(Linux/macOS: /tmp/scan-repo-{repo_name},Windows: %TEMP%\scan-repo-{repo_name}),无论扫描是否成功都要清理。此工具为静态分析,不执行任何程式码。