揭秘以太坊 TIME 合约黑客攻击事件,如何利用 ERC2771 协议安全问题获利?
2023-12-11 04:05
2023年12月07日,据Beosin旗下Eagle Eye平台消息,以太坊的TIME 合约遭受黑客攻击,黑客获利约18.8万美元。通过追踪溯源发现,我们发现在 2023 年 12 月 4 日,thirdweb 就在博客和官方发布漏洞公告称“2023 年 11 月 20 日,我们意识到 web3 智能合约常用开源库特定模式的集成存在安全漏洞,该漏洞影响了 Thirdweb 的一些预构建智能合约,并联系了相关项目方进行缓解。”https://twitter.com/thirdweb/status/1731841493407576247https://blog.thirdweb.com/security-vulnerability/12 月 7 日,以太坊的 TIME 合约,成为第一个因该安全问题受害的第一项目。
今天让我们还原一下本次攻击事件真相。
协议背景简介
EIP 2771 协议为接收者合约定义了合约级协议,以通过可信转发器合约接受元交易。没有进行任何协议更改。通过附加额外的 calldata 向接收者合约发送有效的 msg.sender(称为 _msgSender())和 msg.data(称为 _msgData()),该协议设计的初衷在于让以太坊接受来自没有 ETH 来支付 Gas 费用的外部账户的调用。由于该设计的特殊性,其 msg.sender 正如其协议描述的那样是通过_msgSender() 函数获取的,该函数会会判断发起者是否为可信转发器,如果是,则将截取传入的 Calldata 的最后 20 个字节作为交易的发起者。
参考链接:https://eips.ethereum.org/EIPS/eip-2771https://etherscan.io/address/0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29#codeMuticall 是一个由 openzeppelin contacts 提供的单个外部调用中批量处理多个调用的功能库。从 Time 事件中我们可以看见其 Multicall() 函数中将循环调用 DelegateCall 函数处理 Calldata 并调用本合约的其他函数。https://github.com/OpenZeppelin/openzeppelin-contractshttps://etherscan.io/address/0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29#code
TIME 合约事件相关信息
0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b60xfde0d1575ed8e06fbf36256bcdfa1f359281455a0x6980a47bee930a4584b09ee79ebe46484fbdbdd00x4b0e9a7da8bab813efae92a6651019b8bd6c0a29
TIME 合约事件漏洞分析
本次攻击主要利用了转发器(Forwarder)合约调用了 TIME 代币的 multicall 函数,并由于 TIME 代币使用了 ERC2771 原生元交易的安全协议,从而恶意伪造_msg.sender 进而销毁了 pair 中的代币。最终由于 token 代币价格上涨兑换而获利。TIME 合约事件攻击流程
1.攻击者首先使用 5 个 WTH 兑换约 34.5 亿个 Time 代币作为准备资金。2.接着攻击者调用转发器的 execute 函数通过签名验证,并传入恶意的 calldata,如下3.此时 execute 函数会调用 req.to 地址(Time 代币地址),并将 req.data 和 req.from 地址打包并调用 Time 代币的 multicall 函数。那这里黑客是如何将 req.from 给舍弃的呢?原因在于黑客将 data[1]的长度(size)设置为了 0x38,那么 muticall 在解析 data 时 req.from 将被截断。
参考:https://docs.soliditylang.org/en/v0.8.12/abi-spec.html
4. muticall 函数以 pair 的调用者身份调用 burn 函数销毁 piar 中的 Time 代币。5. 最后攻击者调用 pair 中的 sync 函数同步 pair 中的储备量,使得 Time 代币价格上涨。最后黑客使用准备阶段获得的 TIME 代币在 pair 中兑换 ETH 从而获利 18.8 万美元。这次攻击事件再次提醒我们,智能合约的安全性至关重要,项目方必须加强对漏洞的识别和修复,以确保区块链生态系统的可持续发展和用户的资产安全。Beosin 作为一家全球领先的区块链安全公司,在全球 10 多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规 KYT/AML 等“一站式”区块链安全产品 + 服务,公司致力于 Web3 生态的安全发展,已为全球 3000 多个企业提供区块链安全技术服务,包括 HashKey Group、Amber Group、BNB Chain 等,已审计智能合约和公链主网超 3000 份,包括 PancakeSwap、Ronin Network、OKCSwap 等。欢迎点击公众号留言框,与我们联系。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。