Cointime

扫码下载App
iOS & Android

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

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版本和已更新版本的对比图。

SharkTeam的愿景是保护Web3世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约底层理论。提供包括链上大数据分析、链上风险预警、智能合约审计、加密资产追讨等服务,并打造了链上大数据分析和风险预警平台ChainAegis,平台支持无限层级的深度图分析,能有效对抗Web3世界的高级持续性威胁(Advanced Persistent Threat,APT)。已与Web3生态各领域的关键参与者,如Polkadot、Moonbeam、polygon、Sui、OKX、imToken、ChainIDE等建立长期合作关系。

官网:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

评论

所有评论

推荐阅读

  • 5月16日晚间要闻速递

    1. ETH跌破3,000.00美元

  • 游戏平台Param Labs完成700万美元融资,Animoca Brands领投

    游戏平台Param Labs完成700万美元融资,Animoca Brands领投,Delphi Ventures和Cypher Capital参投。Param Labs的目标是建立一个由其原生PARAM代币管理的游戏生态系统,该代币即将推出。该公司的第一款游戏“Kiraverse”是一款边玩边赚钱的多人射击游戏。

  • 区块链SaaS解决方案AfriDex完成500万美元Pre-Seed轮融资,Endeavor Ventures领投

    总部位于英国伦敦的区块链软件即服务解决方案 AfriDex 宣布完成 500 万美元 Pre-Seed 轮融资,Endeavor Ventures 领投,African Crops Limited、Oldenburg Vineyards 和 Hank Oberoi 参投。AfriDex 目前主要专注于农业市场,通过全面的链上解决方案为供应链参与者提供支持和保护,利用区块链技术实现可追溯性、无摩擦支付、防欺诈交易、经过验证的认证、简化税收和补贴管理。(finsmes)

  • 以太坊上假冒NOT代币发生Rugpull

    据PeckShield监测,以太坊上假冒Notcoin NOT下跌100%。0xE0eB开头地址抛售了 1,645,040,633,338,481.95枚NOT并兑换为93.5枚WETH(价值28.13万美元)。 注:Rugpull代币与合法代币名称相同。

  • 瑞士联邦委员会计划实施加密资产报告框架以提高税收透明度

    瑞士联邦委员会(由七名成员组成,共同领导瑞士政府)打算实施加密资产报告框架(CARF),以提高税收透明度。15 日,联邦委员会发布了一份咨询文件,以调查加入国际税务机关合作打击偷税漏税的自动信息交换(AEOI)的民意。目前,瑞士加入 AEOI 的时间定于 2026 年 1 月 1 日。据悉,经合组织(OECD)为 20 国集团(G20)国家建立了 AEOI 和其他倡议,后来扩大到包括其他国家。瑞士此前在 2014 年采用了经合组织的共同报告标准(CRS),但未纳入监管加密资产及其提供商处理的 CARF。(Cointelegraph)

  • 埃及RWA金融科技初创公司Mnzl完成350万美元种子轮融资,P1 Ventures等领投

    金色财经报道,埃及RWA金融科技初创公司Mnzl宣布完成350万美元种子轮融资,P1 Ventures、Localglobe 和 Ingressive Capital领投,500 Global、Flat6Labs、First Circle Capital、Enza Capital、Beenok和一批未透露姓名的天使投资人参投。Mnzl 允许用户将汽车和房地产等非流动资产转换为流动资产,并将资产上传到数字钱包进行管理。

  • 4月加密项目融资额增环比增长3.8%至13.6亿美元

    Messari 发布 2024 年 4 月融资报告。2024 年 4 月,加密货币项目融资交易额环比增长 3.8%,达到 13.6 亿美元,自 2023 年 8 月低点(3.72 亿美元)以来持续 8 个月的增长趋势;但融资交易数量下降 16.7%,仅 259 笔。4 月网络领域的投资额占总投资额的 37.7%,大额融资项目包括 Monad(融资 2.25 亿美元)等。值得注意的是,4 月比特币 Layer2 项目激增,多个项目从隐身模式中脱颖而出。金融和基础设施领域也出现显著的融资活动,与前几个月相比,资本在各个类别中的分布更加均衡。

  • 摩根士丹利披露其对灰度GBTC投资近2.7亿美元,成为最大持有者之一

    5月16日消息,摩根士丹利(Morgan Stanley)在Q1提交给SEC的13F文件中披露,其通过灰度GBTC向现货比特币ETF投资了2.699亿美元。根据Fintel的数据,这笔投资使其成为继Susquehanna International Group(投资10亿美元)之后,GBTC的最大持有者之一。 摩根士丹利也是众多披露了对现货比特币ETF投资的全球系统重要性银行(G-SIB)之一,其他银行包括加拿大皇家银行、摩根大通、富国银行、法国巴黎银行和瑞银集团。

  • Coinbase计划为澳大利亚自助养老金部门提供服务

    Coinbase计划为澳大利亚的自助养老金部门提供服务。交易所亚太区总经理John O’Loghlen告诉彭博社:“我们不认为这会损害ETF玩家的利益。”Coinbase正在开发一项专门针对澳大利亚自助养老金部门的服务。自2019年3月以来,澳大利亚的自助基金越来越多地持有加密货币。根据澳大利亚税务局的最新数据,近10亿澳元(6.64亿美元)用于加密货币。成千上万的澳大利亚人使用自助养老金基金押注加密货币,甚至在2023年3月据路透社报道,有人损失了数百万美元。

  • CyberConnect 转型社交再质押模块化 L2「Cyber」,有何玩法?如何运行?

    CyberConnect 重塑为 Cyber,旨在将向社交再质押模块化以太坊 L2 转型,速读 Cyber L2 的参与方式和未来发展之路。