1. 引言
前序博客:
- Polygon zkEVM Hexens审计报告解读
- Polygon zkEVM Spearbit审计报告解读(2022年12月版本)
- Polygon zkEVM Spearbit审计报告解读(2023年1月版本)
主要见:
本轮审计历时5天,重点关注 Polygon zkEVM Spearbit审计报告解读(2022年12月版本) 和 Polygon zkEVM Spearbit审计报告解读(2023年1月版本) 中的修复确认。
- 完整changelog见:https://github.com/0xPolygonHermez/zkevm-rom/compare/audit.1…v0.7.0.0-rc.4
- 进一步changelog见:https://github.com/0xPolygonHermez/zkevm-rom/compare/v0.7.0.0-rc.4…v0.8.0.0-fork.2
共发现2个漏洞,其中致命漏洞1个,信息提示类一个。
在本审计报告中,风险分级为:
风险级别 | 影响:高 | 影响:中等 | 影响:低 |
---|---|---|---|
可能性:高 | 致命 | 高 | 中等 |
可能性:中等 | 高 | 中等 | 低 |
可能性:低 | 中等 | 低 | 低 |
其中:
- 1)影响:
- 高:会导致丢失协议中 > 10 % >10\% >10%资产,或对大多数用户有重大危害。
- 中等:丢失 < 10 % <10\% <10%资产,或仅丢失一部分用户的资产,但仍不可接受。
- 低:丢失很烦人但可接收。适用于可以很容易修复的网格攻击,甚至是gas不足。
- 2)概率:
- 高:几乎确定会发生,易于操作,或不易于操作但激励诱人。
- 中等:仅有可行性可能或动机,但相对有可能发生。
- 低:需要stars to align,或者几乎没有动机。
- 3)风险级别:
- 致命:(若已部署)必须尽快修复。
- 高:(若未部署),需在部署前修复。
- 中等:应该修复。
- 低:可修复。
2. 致命漏洞
上下文见:
; if offset + size is lower than calldata size => length
$ :LT,JMPC(opCALLDATACOPYX0, opCALLDATACOPYloop)
该代码本意是检查:offset + size < txCalldataLen。
但实际代码实现时:A中为txCalldataLen + size,B中为offset,因此其实际检查的是txCalldataLen + size < offset,并无意义。
建议:
- 给A分配offset + size,给B分配txCalldataLen。
修复PR见:
3. 信息类提示
上下文见:
在creation期间,PUSH opcode出现在bytecode末尾,其数据区域横跨至该bytecode末端,zkEVM将读取该truncated value。如,若该bytecode以 PUSH4 0x11结尾,则其实际放入stack中的为0x11,而不是0x11000000。
这不直接影响正确性,因下一指令降为STOP,因此推送到stack的实际值是不相关的。
建议:
- 可修复,至少应在源码中说明。
附录:Polygon Hermez 2.0 zkEVM系列博客
- ZK-Rollups工作原理
- Polygon zkEVM——Hermez 2.0简介
- Polygon zkEVM网络节点
- Polygon zkEVM 基本概念
- Polygon zkEVM Prover
- Polygon zkEVM工具——PIL和CIRCOM
- Polygon zkEVM节点代码解析
- Polygon zkEVM的pil-stark Fibonacci状态机初体验
- Polygon zkEVM的pil-stark Fibonacci状态机代码解析
- Polygon zkEVM PIL编译器——pilcom 代码解析
- Polygon zkEVM Arithmetic状态机
- Polygon zkEVM中的常量多项式
- Polygon zkEVM Binary状态机
- Polygon zkEVM Memory状态机
- Polygon zkEVM Memory Align状态机
- Polygon zkEVM zkASM编译器——zkasmcom
- Polygon zkEVM哈希状态机——Keccak-256和Poseidon
- Polygon zkEVM zkASM语法
- Polygon zkEVM可验证计算简单状态机示例
- Polygon zkEVM zkASM 与 以太坊虚拟机opcode 对应集合
- Polygon zkEVM zkROM代码解析(1)
- Polygon zkEVM zkASM中的函数集合
- Polygon zkEVM zkROM代码解析(2)
- Polygon zkEVM zkROM代码解析(3)
- Polygon zkEVM公式梳理
- Polygon zkEVM中的Merkle tree
- Polygon zkEVM中Goldilocks域元素circom约束
- Polygon zkEVM Merkle tree的circom约束
- Polygon zkEVM FFT和多项式evaluate计算的circom约束
- Polygon zkEVM R1CS与Plonk电路转换
- Polygon zkEVM中的子约束系统
- Polygon zkEVM交易解析
- Polygon zkEVM 审计及递归证明
- Polygon zkEVM发布公开测试网2.0
- Polygon zkEVM测试集——创建合约交易
- Polygon zkEVM中的Recursive STARKs
- Polygon zkEVM的gas定价
- Polygon zkEVM zkProver基本设计原则 以及 Storage状态机
- Polygon zkEVM bridge技术文档
- Polygon zkEVM Trustless L2 State Management 技术文档
- Polygon zkEVM中的自定义errors
- Polygon zkEVM RPC服务
- Polygon zkEVM Prover的 RPC功能
- Polygon zkEVM PIL技术文档
- Polygon zkEVM递归证明技术文档(1)【主要描述了相关工具 和 证明的组合、递归以及聚合】
- Polygon zkEVM递归证明技术文档(2)—— Polygon zkEVM架构设计
- Polygon zkEVM递归证明技术文档(3)——代码编译及运行
- Polygon zkEVM递归证明技术文档(4)—— C12 PIL Description
- Polygon zkEVM递归证明技术文档(5)——附录:借助SNARKjs和PIL-STARK实现proof composition
- eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(1)
- eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(2)
- eSTARK:Polygon zkEVM的扩展STARK协议——支持lookup、permutation、copy等arguments(3)
- Polygon zkEVM的Dragon Fruit和Inca Berry升级
- Polygon zkEVM协议治理、升级及其流程
- Polygon zkEVM 节点软件release日志
- Polygon zkEVM bridge服务 release日志
- Polygon zkEVM DataStreamer
- Polygon zkEVM Goldilocks域各项运算性能
- Polygon zkEVM Hexens审计报告解读
- Polygon zkEVM Spearbit审计报告解读(2022年12月版本)
- Polygon zkEVM Spearbit审计报告解读(2023年1月版本)