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

时间:2024-09-20 编辑: 浏览:(463)

此次攻击事件的根本原因:在 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 MEMAG币有希望吗

    MEMAG币,是近年来崛起的一种数字货币,在区块链领域逐渐引起了人们的关注。然而,面对日益竞争激烈的数字货币市场,MEMAG币有希望吗?这是一个令人好奇的问题。首先,我们需要了解MEMAG币的基本情况。MEMAG币是一种基于区块链技术的数字货币,其特点是具有快速、低成本的交易特性。这意味着用户可以在短时间内完成交易,并且费用相对较低。这与传统金融体系中的银行转账相比,具有明显的优势。其次,MEMA

  • 2 MLR币有风险吗

    MLR币是一种新兴的数字货币,在近几年迅速崛起。与传统的货币不同,MLR币运行在区块链技术上,具有去中心化、匿名性等特点,吸引了众多投资者的关注。然而,像所有投资品一样,MLR币也存在一定的风险。首先,MLR币的价格波动性极高,这是数字货币通常共有的特点。由于市场供需关系、投资者情绪等因素的影响,MLR币的价格可能在短时间内大幅上涨或下跌。这种高风险对那些追求稳定收益的投资者来说是一个不容忽视的问

  • 3 MEPAD币值多少钱一枚

    MEMPAD(MEPAD)币是一个新兴的加密货币,其创立于2021年。它是一种基于区块链技术的数字货币,旨在为用户提供更安全和便捷的交易和投资方式。作为一种去中心化的数字资产,MEPAD币的价值取决于市场上的供求关系和交易所的行情。当前,MEPAD币的价值约为X美元一枚。然而,这个价值是日常波动的,可能会在短时间内发生变化。因此,如果你有兴趣投资或交易MEPAD币,你应该时刻关注市场的变化和最新的

  • 4 MSI币有风险吗

    近年来,随着加密货币的兴起,越来越多的人开始关注和参与其中。其中一种备受关注的加密货币是MSI币。然而,对于初次接触MSI币的人来说,他们可能会对其风险产生疑虑。本文将探讨MSI币是否存在风险,以帮助读者更好地了解这种加密货币。首先,需要明确的是,MSI币作为一种加密货币,其本身就存在一定的风险。与传统货币不同,加密货币的价值波动较大。投资者在购买MSI币时,需要承担价格下跌的风险。尤其是对于没有

  • 5 MDCX币有希望吗

    近年来,随着数字货币的兴起,越来越多的人开始投资加密货币。而其中一种备受关注的数字货币就是MDCX币。那么,MDCX币有希望吗?这是许多投资者都关心的问题。首先,让我们先了解一下MDCX币。MDCX币是一种基于区块链技术的数字货币,采用去中心化的系统,可进行快速、安全和匿名的交易。与其他数字货币相比,MDCX币有许多独特的特点,例如可扩展性、隐私保护和低交易费用等。其次,MDCX币的潜力在于其所属

  • 6 MEG币有风险吗

    MEG币作为一种加密货币,已经在全球范围内引起了巨大的关注。它的诞生是由于对传统金融体系的不满,以及对区块链技术的信任。然而,就像任何投资一样,投资MEG币也存在一定的风险。首先,MEG币市场非常波动。由于加密货币市场的高度不稳定性,MEG币价格的波动性也非常大。价格的波动不仅仅取决于市场的供求关系,还受到许多其他因素的影响,例如政府政策、贸易战等。这使得投资者很难预测价格的走势,也增加了投资风险

  • 7 MCRT币有希望吗

    MCRT币是近年来备受关注的一种加密货币,它的发展给人们带来了新的希望。但是,对于MCRT币是否有希望这个问题,人们的观点却各不相同。首先,支持者们坚信MCRT币的未来潜力巨大。他们认为MCRT币有着先进的技术支持和强大的团队,能够应对各种市场挑战。同时,MCRT币所依托的区块链技术能够保证其安全性和透明度,吸引更多的投资者。此外,MCRT币还具备可编程性的特点,使其在智能合约等领域有着广泛的应用

  • 8 MFG币有风险吗

    MFG币是一种数字货币,它的诞生和发展离不开区块链技术的支持。区块链作为一种去中心化的技术,被广泛应用于金融、供应链、游戏等各个领域。虽然MFG币作为一种加密货币具有一定的潜力和吸引力,但它也存在一定的风险。首先,MFG币市场的波动性是风险之一。数字货币市场的价格波动性较大,价格可以在很短的时间内发生较大的变化。这种价格波动对MFG币的持有者来说是一种风险,它们可能会面临投资损失的风险。其次,MF

  • 9 MGN币有风险吗

    随着加密货币市场的发展,越来越多的投资者开始关注起了数字资产的投资机会。MGN币(MGN coin)作为一种新的数字货币,也逐渐引起了人们的关注和兴趣。然而,就像任何其他投资品一样,MGN币也存在着一定的风险。首先,MGN币的价格是相对不稳定的。数字货币市场的波动性非常高,价格可能会在短时间内大幅度波动。由于MGN币是新兴的数字货币之一,市场对其认可度和流动性可能相对较低。投资者应意识到,短期内M

  • 10 MONGOOSE币值多少钱一枚

    MONGOOSE币是一种数字货币,也是一种加密货币,它的发行和管理基于区块链技术。区块链技术是一种分布式账本技术,能够实现安全、透明和去中心化的交易记录。加密货币的特点是匿名性和不可逆性,使得它成为一种独特而受欢迎的金融工具。MONGOOSE币在去年开始流通,并在短期内迅速走红。它的价值取决于市场供需关系和投资者的情绪。虽然MONGOOSE币的价格相对较低,但它的价值和潜力不容小觑。目前,MONG