H4RURAKA/proxy-upgrade-firewall
GitHub: H4RURAKA/proxy-upgrade-firewall
用于可升级智能合约的安全对比分析工具,通过比对新旧实现代码自动标记存储布局、权限漂移、危险操作等风险变更。
Stars: 0 | Forks: 0
# 代理升级防火墙
Proxy Upgrade Firewall 通过对比可升级合约的实现代码,在部署或审批前标记具有风险的变更。
它支持:
- 基于 fixture 的对比
- Hardhat 和 Foundry 的编译器输出
- 通过 JSON-RPC 进行实时代理检查
- 当前的实时实现与本地的提议实现之间的对比
- 从链上的 `Upgraded(address)` 事件探索历史升级对
## 检查项
- 存储布局变更
- 权限与升级路径变更
- 实现层面的安全信号,例如 `delegatecall`、`selfdestruct` 以及初始值锁定
- ABI 接口变更
- 编译器与构建设置变更
## 快速开始
运行示例 fixture:
```
node src/index.js check --fixture fixtures/corpus/uups-admin-drift --format markdown
```
检查实时代理:
```
node src/index.js inspect \
--proxy 0xYourProxyAddress \
--rpc-url https://your-rpc.example
```
对比基于编译器的输入:
```
node src/index.js check \
--current-build-info fixtures/compiler-inputs/build-info/current.build-info.json \
--proposed-build-info fixtures/compiler-inputs/build-info/proposed.build-info.json \
--contract contracts/TreasuryVault.sol:TreasuryVault
```
将实时代理与本地的提议实现进行对比:
```
node src/index.js check \
--proxy 0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d \
--rpc-url https://ethereum-rpc.publicnode.com \
--proposed-build-info fixtures/real-world/governance-downgrade/build/proposed.build-info.json \
--contract GovernedVault
```
## 评估
运行回归测试:
```
node --test
```
针对已验证的实时实现重放故意设置的危险升级:
```
node scripts/replay-live-derived-dangerous-upgrades.mjs --limit 5
```
此脚本会从每个已验证的实时源代码包中推导出一个危险的提议实现,并检查工具是否会将其拦截。
探索实际的历史升级对:
```
node scripts/explore-historical-upgrades.mjs
```
此脚本会:
- 扫描具有升级历史的实时代理
- 解析已验证的实现代码对
- 对真实的历史升级运行分析器
- 将 CSV 和 JSON 输出写入 `reports/` 目录下
### 公开评估产物
已提交的评估快照位于 [docs/evaluation/README.md](docs/evaluation/README.md)。
- `2026-03-25` top100 快照:
- `16` 个就绪的实时代理
- 分析了 `27` 个历史实现代码对
- 经过启发式清理后仍有 `11` 个可疑代码对
- `2026-03-26` top300 快照:
- `56` 个就绪的实时代理
- 分析了 `50` 个历史实现代码对
- `19` 个可疑代码对
- 当样本范围从 `100` 扩大到 `300` 时,可疑代码对的比例保持在相同的范围内,这是一个有用的迹象,表明分析器并没有明显地对较小的样本产生过拟合。
- 目前更大的限制在于覆盖率而非排名:在 top300 样本中,大多数合约无法被重构到完整的工作流中,因为它们没有公开可恢复的实时实现路径,或者缺少已验证的实现代码包。
- 这些产物是分类审查的证据,并非已确认的漏洞报告。
- 人工审查亮点:[PLLD pair 2](/Users/h4ru/Downloads/codes/extra/docs/case-studies/plld-pair-2.md) 发现了多重签名确认中存在一个真实的 `isConfirmOwner(...)` 逻辑缺陷,目前被评估为逻辑/授权缺陷,而非已确认的严重外部攻击利用。
仓库文档:
- [docs/README.md](docs/README.md)
- [docs/evaluation/README.md](docs/evaluation/README.md)
- [docs/case-studies/README.md](docs/case-studies/README.md)
- [docs/project/ARCHITECTURE.md](docs/project/ARCHITECTURE.md)
## 仓库布局
```
.
├── .github/workflows/ci.yml
├── docs/
│ ├── case-studies/
│ ├── evaluation/
│ │ └── snapshots/
│ ├── project/
│ └── README.md
├── experiments/
├── fixtures/
├── reports/ # gitignored local outputs
├── scripts/
├── src/
│ ├── analyzers/
│ ├── cli/
│ ├── commands/
│ ├── core/
│ ├── report/
│ └── utils/
└── test/
```
## 备注
- `reports/` 已被 git 忽略。评估脚本会将本地输出写入该目录。
- `docs/evaluation/snapshots/` 包含已提交的评估摘要,可以从 GitHub 公开链接访问。
- 历史探索输出是一份审查候选名单,而不是已确认的漏洞列表。
标签:ABI变更检测, CISA项目, CMS安全, delegatecall安全, Foundry, Hardhat, JavaScript, JSON-RPC, MITM代理, Solidity, Web3安全, 代理合约, 代码比对, 以太坊开发, 区块链安全, 去中心化应用安全, 可升级合约, 存储布局检查, 数据可视化, 智能合约审计, 智能合约部署, 自定义脚本, 链上数据检查, 防火墙, 风险控制