LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > Uniswap/Lendf.Me由imBTC引起的攻击事件

Uniswap/Lendf.Me由imBTC引起的攻击事件

2021-01-08 Tokenview区块链浏览 来源:区块链网络

Uniswap/Lendf.Me 攻击事件是由于imBTC采用ERC777标准,ERC777标准中原生地支持hook(钩子)机制的运行,而在imBTC实现过程中,并未在相应函数间加入互斥锁,从而出现了重入攻击漏洞。黑客正是利用该漏洞对Uniswap与Lendf.Me发起攻击,以几乎接近于0的成本获得了巨额的数字资产。

UTC时间2020年4月18日上午12:58:19发生了一起针对Uniswap imBTC流动池的重入漏洞攻击。大约24小时后,UTC时间2020年4月19日上午12:58:43 Lendf.Me上也发生了类似的黑客攻击事件。

从技术上讲,这两起事件背后的主要逻辑是,兼容ERC777的“transferFrom()”的实现有一个回调机制。

“transferFrom()”操作的“from”地址注册成为“implementer”,这个from参数其实是攻击者参数(比如该参数可以向Lendf.ME提供imBTC),第二个参数是一个常数,即“keccak256('ERC777TokensSender')”。在1056行的代码中,“implementer”中定义的“tokensToSend()”函数被调用了,这使得攻击者可以通过填入其他恶意执行代码来黑进相应交易。

下图所示为Uniswap的恶意攻击,内嵌的“tokenToEthSwapInput()”又被调用了一次,这意味着攻击者又进行了一次将imBTC兑换成ETH的交易(当兑换比率被攻击者操纵至对其有利的水平时)。

攻击者利用该漏洞耗尽了Uniswap流动性池中的ETH-imBTC(约有1278个ETH)。

下图为Lendf.Me的恶意攻击,由于在存入函数中,Lendf.Me中的“supply()”函数被嵌入一个额外的提现(withdraw())函数钩子(hook),这导致攻击者可以在不实际存入资产的情况下,伪造其imBTC抵押品余额的内部记录。

攻击者首先向Lendf.Me提供了确定数量的imBTC(即289.999999999 imBTC)。然而在第二个“supply()”中,攻击者仅实际提供了0.000000001个imBTC,并且其后来通过“withdraw()”的钩子又取出了290 imBTC(攻击者黑入了“dotransferIn()”中“imBTC:transferFrom()”的调用——1583行)。从而使得290imBTC在钩子函数“withdraw()”中从攻击者的余额中成功扣除。然而,当代码又回执至“supply”时,余额又被重置为290imBTC(1599行)。这就是攻击者如何在lendf.Me中操纵imBTC抵押品余额数量的内在逻辑。通过多次上述操作,攻击者将其在Lendf.Me中的imBTC内部记录刷到了足够从多个流动池(总资产价值为25,236,849.44美元)中借出可用的10多种资产。

Lendf.Me黑客事件对于当前的DeFi社区而言确实是一个打击。在下面的图片中我们收集了在该事件中各项资产的损失额数据。

—-

编译者/作者:Tokenview区块链浏览

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...