http://www.7klian.com

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

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()”的实现有一个回调机制。

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

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

“transferFrom()”操纵的“from”地点注册成为“implementer”,这个from参数其实是进攻者参数(好比该参数可以向Lendf.ME提供imBTC),第二个参数是一个常数,即“keccak256('ERC777TokensSender')”。在1056行的代码中,“implementer”中界说的“tokensToSend()”函数被挪用了,这使得进攻者可以通过填入其他恶意执行代码来黑进相应生意业务。

下图所示为Uniswap的恶意进攻,,内嵌的“tokenToEthSwapInput()”又被挪用了一次,这意味着进攻者又举办了一次将imBTC兑换成ETH的生意业务(当兑换比率被进攻者哄骗至对其有利的程度时)。

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

进攻者操作该裂痕耗尽了Uniswap活动性池中的ETH-imBTC(约有1278个ETH)。

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

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

Uniswap/Lendf.Me由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社区而言确实是一个冲击。在下面的图片中我们收集了在该事件中各项资产的损失额数据。

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

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。