SharkTeam:Multicall 任意地址欺骗漏洞原理分析

时间:2024-09-26 编辑: 浏览:(61)

此次攻击事件的根本原因:在 ERC-2771 中,[Forwarder]并不是专为 multicall 设计。攻击者将_msgSender() 函数中的相关参数添加到 multicall 的外部调用中,即本次事件的[Forwarder].execute 函数。

撰文:SharkTeam

2023 年 12 月 8 日,OpenZeppelin 官方向社区发布了一则重要的安全警报。警报指出,在项目集成中使用 ERC-2771 标准与类 Multicall 方式时,可能存在任意地址欺骗攻击的风险。

SharkTeam 对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

一、攻击交易分析

由于存在一系列与该漏洞相关的攻击交易,我们选择其中一笔攻击交易进行分析。

攻击者地址:

0xFDe0d1575Ed8E06FBf36256bcdfA1F359281455A

攻击交易:

0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

攻击流程:

1.首先。攻击者(0xFDe0d157)先利用 5 枚 WETH 兑换了约 3,455,399,346 枚 TIME。

2.随后,攻击者(0xFDe0d157)构建了恶意的 calldata 参数并调用了[Forwarder].execute 函数。

3.在调用[Forwarder].execute 函数时,恶意的 calldata 触发了 TIME 合约的 multicall 函数。随后,使用剩余的 calldata 触发执行 TIME 合约的 burn 函数,销毁池中的 TIME 代币。

二、漏洞分析

首先,此次攻击事件主要涉及几个方面:ERC2771、Multicall、经过精心构造的 calldata。我们可以从 TIME 代币合约中找到相关的继承:

1.ERC2771 提供了拥有虚拟的 msg.sender 的能力,允许用户委托第三方[Forwarder]执行交易,用来降低 gas 成本。提交交易时,msg.sender 地址会被添加到 calldata 中。

2.TIME 代币合约继承了 ERC2771Context。当[Forwarder]调用合约时,_msgSender() 会检查 calldata 数据,并将其右移,截断最后的 20 个字节作为预期的 msg.sender。

3.Multicall 是一种将单个函数调用转变为在同一个合约中按顺序调用多个函数的方法。它接受一个用户编码调用的数组并对其自身合约执行。这个函数遍历调用数组,并对每一个操作执行 delegatecall()。这允许用户组合自己的一系列操作,并在同一笔交易中顺序执行,而无需在协议中预先定义好某些操作组合。它主要目的也是为了节省 gas。

4.对于经过精心构造的 calldata,攻击者调用了 [Forwarder].execute 函数,并传入相关参数。

我们对 data 值进行相应的可读格式化后得出:

攻击者(0xFDe0d157)通过对当前 calldata 的偏移操作获得新的 data 值,并将该值传递给 multicall(bytes[]) 函数。新 data 的前 4 个字节是 burn(uint256) 函数的选择器,amount 参数为 62227259510000000000000000000。

5.在 multicall(bytes[]) 函数中,通过 delegatecall 调用 burn(uint256) 函数。在 0x20 这一行,0x760dc1e043d99394a10605b2fa08f123d60faf84 地址是在构造 calldata 时一开始添加在末尾的。该地址对应 Uniswapv2 上的 TIME-ETH 流动性池,即前文提到的预期的 msg.sender。

6.刚才提到的 msg.sender 为何变成 TIME-ETH 流动性池地址?原因是一开始 msg.sender 是[Forwarder]合约地址。为了判断是否是可信的[Forwarder],如果是可信的[Forwarder],则将 msg.sender 设置为 calldata 的最后 20 个字节。

三、安全建议

此次攻击事件的根本原因:在 ERC-2771 中,[Forwarder]并不是专为 multicall 设计。攻击者将_msgSender() 函数中的相关参数添加到 multicall 的外部调用中,即本次事件的[Forwarder].execute 函数。在 multicall 函数中,一些函数也会附加_msgSender() 中的相关参数,从而允许攻击者欺骗_msgSender()。因此,攻击者通过使用 multicall 调用相关函数,可以模仿任意地址的调用。最终,通过授权销毁池子里的 TIME 代币。

针对此事件,可采取以下缓解和防范措施:

1.使用修复 bug 后的新版本,OpenZeppelin 新版本的 Multicall 带有 ERC2771context 数据的 context 后缀长度,用于标识 ERC-2771 预期的 context 后缀长度。因此,来自可信任[Forwarder]的任何 call 都将被识别并适应每个子函数 call。

以下是 bug 版本和已更新版本的对比图:

2.禁止任何合约调用 multicall 来防止[Forwarder]使用它,以 ThirdWeb 为例,该方法与 OpenZeppelin 的解决方案相比,OpenZeppelin 仍然允许通过合约进行 multicall。以下是 ThirdWeb 的相关 bug 版本和已更新版本的对比图。

最新 更多 >
  • 1 智通全球财经日志|9月12日

    今日财经新闻主要包括以下内容:美国中央银行宣布维持利率不变,但表示将继续逐步缩减购债计划;中国国家统计局发布数据显示,8月份中国社会消费品零售总额同比增长8.5%;全球投资者对通货膨胀担忧,黄金价格一度飙升至每盎司1,800美元以上。此外,全球股市普遍下跌,受到宏观经济不确定性以及地缘政治冲突的影响。

  • 2 信达证券:8月表外融资崛起 对股市是积极信号?

    信达证券表示,8月份表外融资规模有所增长,这对股市是一个积极的信号。表外融资的增加意味着市场参与者对股市的信心增强,可能会带动股市的上涨。此举也有助于增加市场流动性,促进股市的健康发展。Overall, 8月份表外融资的崛起对股市来说是一个积极信号。

  • 3 行业基本面即将迎拐点 Loop首予美光(MU.US)“买入”评级

    分析师认为,美光的行业基本面即将迎来拐点,因此给予美光“买入”评级。这意味着投资者应该考虑购买美光的股票,因为公司有望在未来取得更好的表现。

  • 4 大和:维持阿里巴巴-SW(09988)“买入”评级 目标价降至130港元

    摘要:大和证券最新发布报告维持对阿里巴巴-SW(09988)的“买入”评级,但将目标价从150港元降至130港元。分析师认为,阿里巴巴的股价已经反映了中美关系紧张、监管风险和竞争压力等因素,未来有望在市场竞争和政策环境好转的情况下实现股价回升。投资者应保持乐观,并留意该股发展趋势。

  • 5 美股科技巨头颓势将继续?Wedbush:Q3财报季是关键

    2021年是美股科技股的重要一年,受到新冠疫情的冲击和全球经济形势的影响,科技股整体表现强劲。在这一年中,大型科技公司如苹果、亚马逊、谷歌等继续实现增长,创新技术和产品持续推出。与此同时,小型科技公司也表现出色,特别是在云计算、人工智能、电子商务等领域取得了重大突破。整体而言,2021年美股科技股市场呈现出多样化和创新性的特点,为投资者带来了丰厚的回报。

  • 6 中信建投:维持爱玛科技(603529.SH)“买入”评级 22年之后公司将步入业绩高增期

    中信建投对爱玛科技维持了“买入”评级,认为公司22年之后将步入业绩高增长期。愿景云PV技术有望带动公司业绩增长,推动股价表现。建议投资者关注该股。

  • 7 致远互联(688369.SH)1781万股限售股将于10月31日上市流通

    致远互联股票发行价是指公司首次公开发行股票时确定的价格,是公司向投资者出售股票的价格。发行价的确定涉及到公司的估值、市场需求、竞争对手情况等多个因素。通常公司会通过发行价来确定募集资金的规模和公司的估值,同时也会考虑投资者对公司股票的需求和市场环境的变化。发行价对公司的股价表现和投资者的回报有着重要影响,因此在确定发行价时需要进行充分的市场分析和综合考虑。

  • 8 实现产业规模化和集聚效应 华大基因(300676.SZ)携手华大智造等竞得盐田区一宗地

    华大基因携手华大智造竞得盐田区一宗地,实现产业规模化和集聚效应。这一举措将为华大基因打造更大的研发生产基地,进一步提升公司在生物科技领域的影响力和竞争力。同时,通过与华大智造的合作,将促进产业链的整合和优化,推动区域内生物科技产业的发展,为当地经济增长和创新发展注入新的动力。

  • 9 瑞信:上调香港宽频(01310)评级至“跑赢大市”目标价降至6.8港元

    香港宽频股票是指在香港证券市场上交易的宽频通讯相关企业股票。宽频通信是指能够提供高速互联网接入服务的通信技术。随着互联网的普及和数字化时代的到来,宽频通讯业务已经成为一种重要的服务,在投资市场上备受关注。投资者可以通过购买香港宽频股票来分享这一行业的发展机会,从而获取潜在的投资回报。当然,投资股票存在风险,投资者需要根据自己的风险偏好和投资目标进行谨慎选择。

  • 10 因购股权获行使 美团-W(03690)合计发行116.77万股

    美团-W(03690)发行116.77万股股权,这些股权是因购买股权而获得行使的。