Polygon zkEVM ROM Spearbit审计报告解读(2023年8月calldata bug修复)

1. 引言

前序博客有:

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

主要内容见:

  • Polygon zkEVM Security Review: Calldata bugfix review

审计内容见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

本轮审计历时2天,共发现6个问题,其中低危漏洞1个,信息提示类5个。
在这里插入图片描述

在本审计报告中,风险分级为:

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

其中:

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

2. 低危漏洞

2.1 低危漏洞1:CREATE2在存储calldata指针之后设置txCalldataLen

上下文见:

  • zkevm-rom: create-terminate-context.zkasm#L746-L748

CALL* 系列opcodes和CREATE具有共同的模式:

  • 先设置txCalldataLen为argsLengthCall参数
  • 然后调用saveCalldataPointer。

而CREATE2中的这2个动作是相反的,其不会影响helper输出,但基于一致性考虑,应与其他opcodes保持相同的顺序。
建议:

  • 先设置txCalldataLen,再调用saveCalldataPointer。

修复PR见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

3. 信息类提示

3.1 信息类提示1:常量命名混乱

上下文见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/constants.zkasm#L13

%CALLDATA_CTX常量名混乱,因同时还有calldataCTX变量。
建议:

  • 将%CALLDATA_CTX常量,重命名为%CALLDATA_RESERVED_CTX。

修复PR见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

3.2 信息类提示2:

上下文见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/calldata-returndata-code.zkasm#L27
  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/calldata-returndata-code.zkasm#L134
  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/calldata-returndata-code.zkasm#L161

注释中声称readFromCalldataOffset helper的输出变量为readFromCalldataOffset,但实际为readXFromCalldataResult。

A :MSTORE(readXFromCalldataOffset), CALL(readFromCalldataOffset); in: [readXFromCalldataOffset: offset value, readXFromCalldataLength: length value], out: [readXFromCalldataOffset: result value]

建议:

  • 修改注释中的输出为readXFromCalldataResult。

修复PR见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

3.3 信息类提示3:无需在readFromCalldataOffset helper中保存D寄存器

上下文见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/utils.zkasm#L1540

readFromCalldataOffset helper中未修改D寄存器,因此无需存储其之前值,并在结束时恢复原值。
建议:

  • 移除tmpVarDReadXFromOffset变量,以及对D寄存器的存储和恢复代码。

修复PR见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

3.4 信息类提示4:注释过期

上下文见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L388
  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L625
  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L744
  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L830

CALL和CREATE opcodes中的注释,所描述的上下文与修复后的实现不匹配。

; copy calldata from origin CTX to current CTX

建议:

  • 重写这些注释,以反映新方法实现。

修复PR见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

3.5 信息类提示5:不需要的标签

上下文见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/utils.zkasm#L1142

由本PR添加的addBatchHashByteByByteEnd标签,实际未被使用且与本修复无关。

建议:

  • 移除该标签。

修复PR见:

  • https://github.com/0xPolygonHermez/zkevm-rom-internal/pull/23

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文初识Linux进程(超详细!)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

2024年最火爆的前端技术:虚拟DOM让页面性能飞升!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 前言 正文 &#x1f4d8; 一、什么是虚拟D…

红队攻防实战之DC2

吾愿效法古圣先贤&#xff0c;使成千上万的巧儿都能在21世纪的中华盛世里&#xff0c;丰衣足食&#xff0c;怡然自得 0x01 信息收集: 1.1 端口探测 使用nmap工具 可以发现开放了80端口&#xff0c;网页服务器但是可以看出做了域名解析&#xff0c;所以需要在本地完成本地域名…

LiveGBS流媒体平台GB/T28181功能-国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选

LiveGBS功能国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选 1、国标级联2、只看已选3、只看未选4、搭建GB28181视频直播平台 1、国标级联 LiveGBS可以作为下级平台&#xff0c;级联到第三方国标平台&#xff0c;详见&#xff1a; LiveGBS国标GB/T28181流…

Java智慧校园源码,SaaS云平台,私有云部署,移动端小程序使用小程序原生语言开发

系统概述&#xff1a; 电子班牌系统又称之为智慧班牌&#xff0c;是当前校园数字化信息化建设、文化建设的主流&#xff0c;是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流的重要应用载体。智慧班牌系统在传统信息发布和校园文化展示功能基础上&#xff0c;融…

白话机器学习的数学-2-分类

1、设置问题 图片分类&#xff1a;只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开&#xff1a; 这次分类的目的就是找到这条线。 2、内积 找到一条线&#xff0c;这是否意味着我们要像学习回归时那样&#xff0c;求出一次函数的斜率…

uni-app 前后端调用实例 基于Springboot 数据列表显示实现

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

人工智能_机器学习085_DBSCAN算法介绍_具有噪声基于密度的聚类_基于密度的空间聚类方法---人工智能工作笔记0125

然后我们再来看一种聚类算法,叫做DBSCAN算法 可以看到,他和KMeans的原理完全不一样, 这个是基于密度的聚类方法,就是在一堆数据中,把密度最大的数据,归为一类 这里的划分为簇,其实就是 划分类别的意思 这个簇,就跟鱼群一样,一个鱼群中肯定是同一种鱼类. 然后我们再来看,DBSC…

LeetCode刷题--- 第 N 个泰波那契数

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

从马尔可夫奖励过程到马尔可夫决策到强化学习【01/2】

一、说明 关于马尔可夫过程&#xff0c;如何将马尔可夫决策转化成决策依据&#xff0c;这里介绍的基本的思想路径&#xff0c;为读者将来设计和应用决策模型提供理论上的参考。 这是了解强化学习的一系列基础文章的后续文章。如果您有兴趣了解强化学习&#xff0c;请查看此处。…

设计模式之工厂设计模式【创造者模式】

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

苹果手机录音误删怎么恢复?记住这3个正确操作方法!

苹果语音备忘录被广泛应用于生活、工作和学习等各个方面。通过语音备忘录&#xff0c;我们可以记录重要的会议、对话、音乐或声音。 但如果不小心删除了这些珍贵的录音文件&#xff0c;该怎么办呢&#xff1f;苹果手机录音误删怎么恢复&#xff1f;本文将为你提供三个常用的解…

【计算机毕业设计】SSM汽车维修预约平台

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色&#xff1a; 管理员登录,新增管理员信息,查看管理员信息,查询管理员信息,查看用户信息列表,查询用户信息,新增新闻公告,查看新闻公告,查询新闻公告,新增配件类…

分布式系统架构设计之分布式数据存储的安全隐私和性能优化

五、安全性和隐私 在前面分布式系统部分&#xff0c;有对安全性做过介绍&#xff0c;如前面所述&#xff0c;在分布式系统中&#xff0c;确保系统的安全性和隐私是至关重要的。安全性关注系统的防护措施&#xff0c;而隐私是关注用户的个人信息保护。 安全性 身份认证&#…

【后端已完成,前端更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;一&#xff09;技术可行性&#xff1a; &#xff08;二&#xff09;经济可行性&#xff1a; &#xff08;三&#xff09;社会可行性&#xff1a; &#xff08;2&#xff09;需求描述 功能模块图 用例图&#…

航芯ACM32G103开发板评测 03 RT-Thread Nano移植 线程管理测试

航芯ACM32G103开发板评测 07 RT-Thread Nano移植 线程管理测试 1. 软硬件平台 ACM32G103 Board开发板MDK-ARM KeilRT-Thread Nano 源码 2. 物联网RTOS—RT-Thread ​ RT-Thread诞生于2006年&#xff0c;是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主…

我的2023年度总结:从大学生到程序员的转变

在过去的一年里&#xff0c;我从一名大学生转变为一名计算机专业人士&#xff0c;经历了许多实战经历&#xff0c;其中最让我印象深刻的是我参与的一个校园App项目。在这个项目中&#xff0c;我负责后端开发和数据库设计&#xff0c;成功地将App上线并得到了师生的好评。 在技术…

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

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

电子书推荐|VMware 替代与升级攻略:技术路线、产品对比与用户实践

在进行 VMware 国产化替代时&#xff0c;您是否会遇到以下问题&#xff1a; 如何实现 VMware 整体架构/部分组件替换&#xff1f;是否可以不仅“为替换而替换”&#xff0c;而是同时实现架构的升级&#xff0c;带来更多业务价值&#xff1f;哪些国产方案具备 VMware 同等能力&…

自动化测试报告生成【Allure】

之前尝试使用过testNG自带的测试报告、优化过reportNG的测试报告&#xff0c;对这两个报告都不能满意。后经查找资料&#xff0c;发现有个神器&#xff1a; Allure&#xff08;已经有allure2了&#xff0c;笔者使用的就是allure2&#xff09;&#xff0c;生成的测试报告与上述…