Polygon zkEVM ROM Spearbit审计报告解读(2023年6月Dragon Fruit升级版本)

news2024/11/25 13:48:59

1. 引言

前序博客有:

  • Polygon zkEVM Hexens审计报告解读
  • Polygon zkEVM Spearbit审计报告解读(2022年12月版本)
  • Polygon zkEVM Spearbit审计报告解读(2023年1月版本)
  • Polygon zkEVM Spearbit审计报告解读(2023年3月版本)
  • Polygon zkEVM的Dragon Fruit和Inca Berry升级

Dragon Fruit升级点有:

  • 改进了网络
  • 支持了最新的以太坊opcode——PUSH0

Dragon Fruit,又名ForkID5,包含了2个新特性:

  • 1)PUSH0:最新的以太坊opcode,PUSH0已包含在以太坊Shanghai硬分叉中。一旦Dragon Fruit升级完成,Polygon zkEVM Mainnet Beta与最新版本的Solidity一致,以维护rollup的EVM等价性。更多PUSH0知识,见EIP-3855。
  • 2)RLP解析:修复了交易解析的一个非致命错误。

主要见:

  • Polygon zkEVM Security Review: zkEVM ROM June Upgrade features review

本轮审计重点关注zkevm-rom的fix-RLP-push0 feature:

  • https://github.com/0xPolygonHermez/zkevm-rom/tree/feature/fix-RLP-push0

本轮审计历时16天。共发现8个漏洞,其中高危漏洞2个,低危漏洞1个,信息提示类5个。
在这里插入图片描述
在本审计报告中,风险分级为:

风险级别影响:高影响:中等影响:低
可能性:高致命中等
可能性:中等中等
可能性:低中等

其中:

  • 1)影响:
    • 高:会导致丢失协议中 > 10 % >10\% >10%资产,或对大多数用户有重大危害。
    • 中等:丢失 < 10 % <10\% <10%资产,或仅丢失一部分用户的资产,但仍不可接受。
    • 低:丢失很烦人但可接收。适用于可以很容易修复的网格攻击,甚至是gas不足。
  • 2)概率:
    • 高:几乎确定会发生,易于操作,或不易于操作但激励诱人。
    • 中等:仅有可行性可能或动机,但相对有可能发生。
    • 低:需要stars to align,或者几乎没有动机。
  • 3)风险级别:
    • 致命:(若已部署)必须尽快修复。
    • 高:(若未部署),需在部署前修复。
    • 中等:应该修复。
    • 低:可修复。

2. 高危漏洞

2.1 高危漏洞1:PUSH0中缺少ZK counters检查

上下文见:

  • zkevm-rom:stack-operations.zkasm#L11

PUSH0中未更新ZK couners。
建议:

  • 像其它PUSH指令一样,检查out of counters。

修复PR见:

  • Effective gas implementation #290

2.2 高危漏洞2:对有效gas计算,缺少arith ZK counters检查

上下文见:

  • zkevm-rom: process-tx.zkasm#L88

_effGasPriceShifted会占用arith ZK counters,因其2次使用了ARITH。

建议:

  • 添加arith counters检查。

修复PR见:

  • Effective gas implementation #290

3. 低危漏洞

3.1 低危漏洞1:对PUSH0缺少文档注释

上下文见:

  • zkevm-rom: stack-operations.zkasm#L1-L9

opPUSH0上的注释,仅适于opPUSH1及其它。

建议:

  • 将opPUSH0实现移至现有注释之上,并添加PUSH0注释。

修复PR见:

  • Effective gas implementation #290

4. 信息类提示

4.1 信息类提示1:关于RLP逻辑修复缺少文档说明

上下文件:

  • zkevm-rom: utils.zkasm#L931

缺少文档说明,为何RLP解析中的RLP错误处理不同于其它。
建议:

  • 添加解释注释。

修复PR见:

  • Effective gas implementation #290

4.2 信息类提示2:关于RLP修复方法的通用反馈

上下文见:

  • zkevm-rom: vars.zkasm#L51

似乎是为了解决不同上下文,ZK coutners表现不同,而引入了新的全局变量isLoadingRLP。这回增加复杂性、前缀的按时交互依赖,以及增加代码理解难度。

建议:

  • 理论上,最好将其依赖明确,如具有额外的flag参数来表示来自RLP处理的调用,且应采用不同的方式处理counter errors。
  • 可以理解这可能不切实际,若这些调用源自很多不同地方。
  • 另一个不那么激进的建议是:只在所需的utils中,而不是在较低级别的handleBatchError中,基于全局isLoadingRLP进行分支。相比于现有的会影响每个batch error处理,这种修复方式,只会影响一些有限的功能范围。同时会更明确哪些utils依赖于该全局状态。。
    (这种方法的缺点可能是,如果RLP处理更改为使用一些新的utils,则必须记住在每个utils中检查isLoadingRLP。)

Polygon zkEVM回复:

  • 决定使用isLoadingRLP方法,因为它在向RLP解析添加新代码时提供了更好的安全性,因为它是全局处理的,并且不是特定于函数的。此外,刚刚删除的RLP错误和所有zk-counters都通过handleBatchError处理。

4.3 信息类提示3:重复注释

上下文见:

  • zkevm-rom: process-tx.zkasm#L74

第74行的注释,与第83行的注释重复。

建议:

  • 移除第74行的注释。

修复PR见:

  • Effective gas implementation #290

4.4 信息类提示4:注释中的标记混乱

上下文见:

  • zkevm-rom: process-tx.zkasm#L76
  • zkevm-rom: process-tx.zkasm#L78

注释中的=>标记混乱,其与zkasm语法含义相反。
建议:

  • 使用=,如A = gasPrice,或左右互换,如gasPrice => A

修复PR见:

  • Effective gas implementation #290

4.5 信息类提示5:注释不一致

上下文见:

  • zkevm-rom: process-tx.zkasm#L79

在运算之前,注释表示B值在[0, 255]范围内,而在其它地方的注释,解释了该运算的效果。
建议:

  • 替换为[1, 256]

修复PR见:

  • Effective gas implementation #290

附录: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月版本)
  • Polygon zkEVM Spearbit审计报告解读(2023年3月版本)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1350079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计网自顶向下(多线程Web代理服务器)

目录 &#x1f33c;前言 &#x1f33c;多线程Web代理服务器 &#x1f392;过程 &#x1f3c0;解释 &#x1f333;代码 &#x1f33c;前言 前置知识 &#xff08;1&#xff09;进程 与 线程 进程与线程的一个简单解释 - 阮一峰的网络日志 (ruanyifeng.com) &#xff08;…

计算机组成原理 数据的表示与运算

文章目录 数据的表示与运算数据表示定点数的表示与运算定点数的表示无符号数有符号数定点整数定点小数四码反码补码移码 总结 定点数的运算算术移位原码反码补码总结 逻辑位移循环位移总结 加减运算原码加减法补码加减法 溢出判断采用一位符号位 浮点数的表示与运算表示IEEE 75…

【排序算法】【二叉树】【滑动窗口】LeetCode220: 存在重复元素 III

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDi…

2024校招测试工程师笔试——经典错题记录和解析

大家好&#xff0c;这篇文章记录几个测开方向经典的例题&#xff0c;并给出相应解析&#xff0c;欢迎给出你的看法 下列关于软件性能测试的说法中&#xff0c;正确的是&#xff1a;&#xff08; &#xff09; A 性能测试的目的不是为了发现软件缺陷 B 压力测试与负载测试的目的…

Ansible自动化运维(一)简介及部署、清单

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

腾讯云轻量应用服务器“镜像”如何选择比较好?

腾讯云轻量应用服务器镜像怎么选择&#xff1f;镜像是指轻量服务器的操作系统&#xff0c;可以选择宝塔Linux面板8.0.4腾讯云专享版&#xff0c;如果需要Win系统建议选择Windows Server 2012 R2 中文版&#xff0c;腾讯云服务器网txyfwq.com分享腾讯云轻量应用服务器镜像操作系…

如何使用Pyxamstore快速解析Xamarin AssemblyStore文件

关于Pyxamstore Pyxamstore是一款针对Xamarin AssemblyStore文件&#xff08;assemblies.blob&#xff09;的强大解析工具&#xff0c;该工具基于纯Python 2.7开发&#xff0c;支持从一个APK文件中解包并重封装assemblies.blob和assemblies.manifest Xamarin文件。 什么是ass…

谷歌Gemini Pro模型 Api 调用

写在前面 本篇博客主要介绍如下内容 Gemini Pro模型 ApiKey的申请 Gemini Pro模型 Api调用的方法 几个模型Api调用的demo程序 调用Gemini Pro模型中可能遇到的问题及解决方案 模型 ApiKey的申请 注册好Google账号&#xff0c;并在浏览器完成登录访问 : https://makersuite.g…

低成本TB级数据库技术选型之思考两三点

一、背景 前段时间在搞毕业论文的选题&#xff0c;最头疼的就是大量的文献检索和阅读&#xff0c;从研究的角度上我们可以将文献分为四类&#xff1a; 理论文献&#xff1a;为研究提供理论的框架和基础的文献。这些文献可能并不会和所做的研究直接相关&#xff0c;甚至由于理…

梦里河山:自在正定,跨年寄语

‍ ‍雏鹰高飞&#xff0c;我们也渐渐失去了新年第一天去香炉峰顶祈福的动力。向往着梦里河山&#xff0c;于是启动了这次的跨年之旅。 雾途 放假的第一天&#xff0c;早早起床&#xff0c;7点钟开车驱往赵子龙的故乡——正定。万万没有想到&#xff0c;出了五环&#xff0c;晨…

老品牌新玩法?经济内循环下逆势开出100多家门店,他被央视青睐!

2023年12月26日&#xff0c;CCTV-2整点财经栏目以“抢抓复苏机遇&#xff0c;连锁品牌主打新活力”为主题&#xff0c;播报我国老品牌发展现状&#xff0c;新消费时代以来&#xff0c;消费者的选择多样化、分众化、小众化、个性化&#xff0c;给“老品牌”发展带来前所未有的挑…

计算机毕业设计——SpringBoot社区物业管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 近几年来&#xff0c;随着物业相关的各种信息越来越多&#xff0c;比如报修维修、缴费、车位、访客等信息&#xff0c;对物业管理方面的需求越来越高&#xff0c;我们在工作中越来越多方面需要利用网页端管理系统来进行管理&#xff0c;我们…

Java商城 免 费 搭 建:鸿鹄云商实现多种商业模式,VR全景到SAAS,应有尽有

鸿鹄云商 b2b2c产品概述 【b2b2c平台】&#xff0c;以传统电商行业为基石&#xff0c;鸿鹄云商支持“商家入驻平台自营”多运营模式&#xff0c;积极打造“全新市场&#xff0c;全新 模式”企业级b2b2c电商平台&#xff0c;致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

Vue-响应式数据

一、ref创建基本类型的响应式数据 vue3可以使用ref、reactive去定义响应式数数据。 知识点汇总 使用ref需要先引入ref&#xff0c;import {ref} from vue在模板 template 中使用了添加ref 的响应式数据&#xff0c;变量的后面不用添加.value所有js代码里面&#xff0c;去操作r…

Python进行批量字符替换的3种方法

一、问题的提出 之前&#xff0c;我写过一篇如何在word中计算数学算式&#xff1a; 如何用Python批量计算Word中的算式-CSDN博客 为了计算算式&#xff0c;就需要对算式进行格式化&#xff0c;把不规则的算式转换成规则的算式&#xff0c;这时就会涉及到一些字符的批量替换。…

Spring见解 1

1.Spring概述 1.1.Spring介绍 ​ Spring是轻量级Java EE应用开源框架&#xff08;官网&#xff1a; http://spring.io/ &#xff09;&#xff0c;它由Rod Johnson创为了解决企业级编程开发的复杂性而创建 1.2.简化应用开发体现在哪些方面&#xff1f; IOC 解决传统Web开发中…

uni-app App.vue生命周期全局样式全局存储globalData

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

小企业是否应该采用SD-WAN组网?

在当今数字化时代&#xff0c;企业成功的关键之一是建立稳定高效的网络连接。无论企业规模大小如何&#xff0c;网络都是实现高效运营和达成业务目标的重要组成部分。对于小企业而言&#xff0c;考虑成本效益和资源管理显得尤为重要。那么&#xff0c;对于小企业来说&#xff0…

Rust赋值语句和数字类型

赋值语句 在Rust中&#xff0c;使用let关键字定义变量。格式是let 变量名:变量类型 变量值;&#xff0c;下边是个例子&#xff1a; let age:i32 18;这就是定义一个有符号32位的数字变量age&#xff0c;而其中的值是18。 而在C语言定义变量的语句格式是类型 变量名 变量值。…

2023年“中银杯”安徽省网络安全B模块(部分解析)

前言 以下是2023年中银杯安徽省网络安全B模块题目&#xff0c;镜像可以私聊我 B模块安全事件响应/网络安全数据取证/应用安全&#xff08;400 分&#xff09; B-1&#xff1a;CMS网站渗透测试 任务环境说明&#xff1a; √服务器场景&#xff1a;Server2206&#xff08;关…