2023 年 12 月 7 日,据 Beosin EagleEye 报道,以太坊上的 TIME 合约遭受黑客攻击,导致攻击者获利约 188,000 美元。

这不是普通的攻击。

追根溯源发现,2023年12月4日,thirdweb在博客和官方渠道发布漏洞通报称:“2023年11月20日,我们发现公共开放平台集成中存在安全漏洞。 -web3 智能合约的源库模式。该漏洞影响了 Thirdweb 的一些预建智能合约,我们已联系相关项目团队进行缓解。”

12 月 7 日,以太坊上的 TIME 合约成为第一个成为该安全问题受害者的项目。今天,我们就来揭开这次袭击背后的真相。

协议背景概述

ERC2771 原生元交易安全协议:

EIP 2771 协议为接收方合约定义了合约级协议,以通过可信中继合约接受元交易。没有进行任何协议更改。该协议旨在允许以太坊接受来自没有 ETH 支付 Gas 费的外部账户的调用。该协议通过附加额外的调用数据将有效的 msg.sender (称为 msgSender())和 msg.data (称为 msgData())发送到接收者合约。目的是让以太坊接受来自外部账户的调用,无需使用 ETH 来支付 Gas 费用。

由于具体的设计,协议中描述的msg.sender是通过_msgSender()函数获取的。该函数检查发起者是否是可信中继,如果是,则拦截传入呼叫数据的最后 20 个字节作为事务的发起者。

https://eips.ethereum.org/EIPS/eip-2771

Muticall Batch Processing Library:
Muticall is a feature library provided by OpenZeppelin Contracts for processing multiple calls in a single external call.

从Time事件中,我们可以看到其代码库中的Multicall()函数循环访问DelegateCall函数来处理Calldata并调用该合约中的其他函数。

https://github.com/OpenZeppelin/openzeppelin-contracts

TIME合约活动信息

● 攻击交易

0xecdd111a60debfadc6533de30fb7f55dc5ceed01dfadd30e4a7ebdb416d2f6b6

● 攻击者地址

0xfde0d1575ed8e06fbf36256bcdfa1f359281455a

● 攻击合约

0x6980a47bee930a4584b09ee79ebe46484fbdbdd0

● 被攻击的合约

0x4b0e9a7da8bab813efae92a6651019b8bd6c0a29

TIME合约事件漏洞分析

这次攻击主要利用了一个转发器合约,该合约调用了 TIME 代币的多重调用功能。由于TIME代币使用了ERC2771原生元交易安全协议,攻击者恶意伪造_msg.sender,导致该对中的代币遭到破坏。最终,攻击者通过交易所从代币价格上涨中获利。

TIME 合约事件攻击流程

1、攻击者最初使用 5 WTH 兑换约 34.5 亿个 Time 代币作为准备资金。

2、随后,攻击者通过签名验证调用Forwarder的execute函数,传入恶意calldata如下:

3. 此时execute函数会调用req.to地址(Time token地址),打包req.data和req.from地址,并调用Time token的multicall函数。黑客是如何丢弃req.from的?黑客将data[1]的长度(大小)设置为0x38,导致multicall在解析数据时截断req.from。

4. 多重调用函数调用burn函数,作为调用者销毁该对中的时间令牌。

5. 最后,攻击者调用该对中的sync函数来同步储备,导致Time代币的价格上涨。

最终,黑客将准备阶段获得的 TIME 代币兑换成该货币对中的 ETH,获利 188,000 美元。这次攻击事件再次提醒我们智能合约安全的至关重要。项目团队必须加强漏洞识别和修复工作,确保区块链生态的可持续发展和用户的安全。

接触

如果您需要任何区块链安全服务,欢迎联系我们:

官方网站 Beosin EagleEye Twitter Telegram Linkedin