CryptoKupo/walletguard-audit
GitHub: CryptoKupo/walletguard-audit
一个 GitHub Action,利用多代理 AI 审计 Solidity 智能合约并在 PR 中反馈结果与 SARIF 报告。
Stars: 0 | Forks: 0
WalletGuard 审计
智能合约安全性:捕捉静态分析器遗漏的问题——直接在您的拉取请求中。
六个专业 AI 代理推理合约的逻辑、状态转换与跨函数交互。一个综合代理交叉引用发现结果、去重并校准严重性。结果以 PR 评论形式发布,包含修复建议。 | 代理 | 攻击面 | |-------|---------------| | 重入攻击 | 跨函数与跨合约重入、只读重入 | | 访问控制 | 权限提升、缺失修饰符、中心化风险 | | 经济安全 | 预言机操纵、闪电贷攻击、MEV 提取 | | 逻辑与验证 | 整数溢出、状态机缺陷、输入验证 | | 升级安全 | 存储冲突、初始化器误用、代理模式 | | 代码质量 | Gas 优化、ERC 合规性、标准遵循 | ## 目录 - [快速开始](#quick-start) - [工作原理](#how-it-works) - [生产环境测试](#tested-in-production) - [输入参数](#inputs) - [输出结果](#outputs) - [SARIF 与 GitHub 安全标签页](#sarif--github-security-tab) - [配置示例](#configuration-examples) - [定价](#pricing) - [安全性与隐私](#security--privacy) - [故障排查](#troubleshooting) - [更新日志](CHANGELOG.md) ## 快速开始 **1. 添加工作流** 到 `.github/workflows/walletguard.yml`: ``` name: WalletGuard Security Audit on: pull_request: paths: - '**/*.sol' permissions: contents: read pull-requests: write security-events: write # Required for SARIF upload jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: CryptoKupo/walletguard-audit@v1 id: audit with: api-key: ${{ secrets.WALLETGUARD_API_KEY }} - uses: github/codeql-action/upload-sarif@v3 if: always() && steps.audit.outputs.sarif-file != '' with: sarif_file: ${{ steps.audit.outputs.sarif-file }} ``` **2. 获取 API 密钥**:[walletguard.ai/settings](https://walletguard.ai/settings)(免费账户)。 **3. 添加密钥** 到您的仓库:设置 > 密钥与变量 > 操作 > `WALLETGUARD_API_KEY`。 打开一个更改 `.sol` 文件的拉取请求。WalletGuard 会处理其余流程。 ## 工作原理 1. 检测拉取请求差异中更改的 `.sol` 文件 2. 提交每个更改的合约到 WalletGuard 的 source-direct API 3. 六个专业代理并行分析;综合代理交叉引用并校准 4. 发现结果以 **PR 评论** 形式发布,包含严重性评级与修复建议 5. 在操作 UI 中渲染 **步骤摘要**,显示每个文件的严重性表格 6. 生成 **SARIF 文件** 用于上传到 GitHub 的 Code Scanning(代码扫描) 7. 当 `fail-on-findings` 为 `true` 时,审查使用 `REQUEST_CHANGES` —— 这会在启用了必需审查的仓库中阻止合并 发现详情**仅出现在 PR 评论中**(仓库范围),**绝不会出现在 CI 日志中**。SARIF 输出仅包含标题和报告链接 —— 不包含完整描述或代码片段 —— 以防止开源仓库在安全标签页中泄露漏洞细节。 ## 生产环境测试 针对真实合约进行端到端测试: | 测试用例 | 结果 | |-----------|--------| | 包含脆弱合约的 PR | **7 个发现**,评分 1.5/10,发布 `REQUEST_CHANGES` 审查 | | 包含干净合约的 PR | **0 个发现**,评分 10/10,发布 `COMMENT` 审查 | | 不含 `.sol` 文件的 PR | 工作流正确跳过 | 当 WalletGuard 发现问题时,审查界面如下所示: 干净合约会收到清晰信号: ## 输入参数 | 输入 | 是否必需 | 默认值 | 描述 | |-------|----------|---------|-------------| | `api-key` | 是 | -- | WalletGuard API 密钥(`wg_live_...`) | | `threshold` | 否 | `high` | 触发失败的最低严重性:`critical`、`high`、`medium`、`low`、`info` | | `fail-on-findings` | 否 | `true` | 是否在发现高于阈值的项时阻止检查通过 | | `sarif-file` | 否 | `walletguard-results.sarif` | 生成的 SARIF 文件路径 | | `api-url` | 否 | `https://walletguard.ai` | API 基础 URL(企业版/自建实例) | | `github-token` | 否 | `${{ github.token }}` | 用于 PR 文件检测与评论的 GitHub 令牌 | ## 输出结果 | 输出 | 描述 | |--------|-------------| | `findings-count` | 所有审计文件中的发现总数 | | `critical-count` | 严重性为关键的发现数量 | | `high-count` | 严重性为高的发现数量 | | `audit-ids` | 逗号分隔的审计报告 ID | | `sarif-file` | 生成的 SARIF 文件路径(用于上传到代码扫描) | ## SARIF 与 GitHub 安全标签页 WalletGuard 生成 [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) 输出以集成 GitHub Code Scanning。使用 `github/codeql-action/upload-sarif` 上传(在 [快速开始](#quick-start) 中可见),发现结果将显示在仓库的 **安全 > 代码扫描** 标签页中。 每个发现对应一个代码扫描警报,包含: - **规则 ID**(来自发现类别,如 `reentrancy`、`access_control`) - **严重性级别**(映射为 SARIF 级别:`critical`/`high` = error,`medium` = warning,`low`/`info` = note) - **文件位置**(包含行号,如可用) - **完整报告链接**(walletguard.ai 上) 该操作还会写入一个 **步骤摘要**,在操作运行 UI 中可见,显示每个发现的标题、严重性与受影响函数的文件级严重性表。 ## 配置示例 ### 仅当发现关键问题时失败 ``` - uses: CryptoKupo/walletguard-audit@v1 with: api-key: ${{ secrets.WALLETGUARD_API_KEY }} threshold: critical ``` ### 不阻止合并的审计 ``` - uses: CryptoKupo/walletguard-audit@v1 with: api-key: ${{ secrets.WALLETGUARD_API_KEY }} fail-on-findings: 'false' ``` ### 使用自定义路径的 SARIF 上传 ``` - uses: CryptoKupo/walletguard-audit@v1 id: audit with: api-key: ${{ secrets.WALLETGUARD_API_KEY }} sarif-file: security/walletguard.sarif - uses: github/codeql-action/upload-sarif@v3 if: always() && steps.audit.outputs.sarif-file != '' with: sarif_file: ${{ steps.audit.outputs.sarif-file }} ``` ### 在后续步骤中使用输出 ``` - uses: CryptoKupo/walletguard-audit@v1 id: audit with: api-key: ${{ secrets.WALLETGUARD_API_KEY }} - name: Check results if: steps.audit.outputs.critical-count != '0' run: echo "Critical vulnerabilities found!" ``` ## 定价 **1 次审计 = 1 个 Solidity 文件。** 一个更改 3 个 `.sol` 文件的 PR 使用 3 次审计。配额在 Web UI、API 和此 GitHub Action 之间共享。对之前已审计代码(相同源哈希)的缓存重新检查始终免费。 请参阅 [walletguard.ai/pricing](https://walletguard.ai/pricing) 了解当前套餐与限制。 ## 安全性与隐私 - 源代码仅通过 HTTPS 传输(由 Action 强制) - 您的 API 密钥在 CI 日志中通过 `core.setSecret` 隐藏,且仅发送至 walletguard.ai - 发现结果仅出现在 PR 评论中,绝不会出现在 CI 输出中 - 该 Action 源代码在本仓库中完全可审计 有关数据保留与隐私详情,请参见 [walletguard.ai](https://walletguard.ai)。如需报告漏洞,请参见 [SECURITY.md](SECURITY.md)。 ## 故障排查 **“认证失败”** —— 确认 `WALLETGUARD_API_KEY` 已设置在仓库密钥中且以 `wg_live_` 开头。检查密钥是否已被吊销。 **“审计配额已超出”** —— 已达到计划限制。配额在 Web、API 和此 Action 之间共享。可在 [walletguard.ai/pricing](https://walletguard.ai/pricing) 升级。 **“审计超时”** —— 大型合约可能超过 5 分钟窗口。审计会在服务器端继续;请使用审计 ID 在 walletguard.ai 上查看。 **未检测到 Solidity 文件** —— 仅审计 PR 差异中更改的 `.sol` 文件。如果未修改合约,则会跳过并显示信息性消息。 **调试日志** —— 设置 `ACTIONS_STEP_DEBUG` 为仓库秘密,值为 `true`,然后重新运行工作流。 ## 徽章 展示您的安全承诺。将以下内容添加到项目的 README 中: ``` [](https://walletguard.ai) ``` ## 许可证 [MIT](LICENSE)标签:AI 安全代理, API密钥检测, ERC 合规, Gas 优化, GitHub Action, GitHub 安全标签, MEV 提取, PR 评论修复, SARIF 上传, 代理模式安全, 代码质量优化, 初始化器误用, 区块链安全, 升级安全审计, 协议分析, 只读重入, 合约交互分析, 存储碰撞, 安全开发生命周期, 持续集成安全, 智能合约安全审计, 智能合约漏洞, 权限提升, 状态机校验, 经济攻击防御, 自动化攻击, 访问控制审计, 跨函数重入, 跨合约重入, 输入验证, 逻辑验证检查, 重入攻击检测, 钱包安全, 闪电贷攻击, 集中化风险, 静态分析增强, 预言机操纵