OKLink:2023年7月安全事件盘点
DeFi借贷协议YEED遭受攻击,攻击者获利百万却被永久锁定
欧科云链链上天眼获悉,4月21日15时15分(HKT),BSC上近期刚上线ZEED生态系统的DeFi借贷协议YEED遭受攻击,其代币$YEED短时跌去99.99%,几近归零。
YEED在Pancake上有三个流动性池,分别是swapPair: YEED-USDT、swapPairHo: YEED-ho和swapPairZeed: YEED-ZEED。
据链上天眼初步分析,YEED在进行transfer时,如果to地址是流动性池地址(即卖币的时候),会把数额分成三部分,第一部分90%转给目标地址,第二部分5%按照2:1:1的比例分给三个流动性池,第三部分5%会燃烧掉。但是在如下奖励分发的代码中,虽然862-864行计算了分配比例,但是866、869和872行对各个流动性池的balance增加的仍然用的总的数值rewardFee,相当于每次多分发了两份奖励。
在此次攻击中,攻击者将闪电贷借来的资金直接tranfer给YEED-USDT流动性池,触发上述分配逻辑,然后调用流动性池的skim接口,将池子原有的$YEED一并提取出来。攻击者将skim出来的代币接收地址设置为流动性池地址,会自动再次触发transfer逻辑。攻击者用三个流动性池循环操作了三百多次,最终将获利的$YEED代币转移到恶意合约,并兑换成USDT。
比较乌龙的是,攻击者虽然获利100逾万美元,但在攻击成功后的15秒后直接调用了合约的自毁函数,且在此之前未将获利所得提走,该笔资金将永远锁定在其攻击合约里。
一、相关地址&交易列表
攻击交易:0x0507476234193a9a5c7ae2c47e4c4b833a7c3923cefc6fd7667b72f3ca3fa83a
攻击者地址:0xEc14207D56E10F72446576779d9b843e476e0fB0
恶意合约:0x05e55d051ac0a5fb744e71704a8fa4ee3b103374
YEED合约地址:0xe7748FCe1D1e2f2Fd2dDdB5074bD074745dDa8Ea
二、攻击过程
1)攻击合约闪电贷出662,417,317,593,720,006,023个$YEED代币
2)将获得的$YEED代币转账给YEED-USDT的pair合约地址
可以看到,转账数额是662,417,317,593,720,006,023 $YEED,第一步收到596,175,585,834,348,005,421 $YEED,然后reward时候又分发8,280,216,469,921,500,076 $YEED给YEED-USDT的pair合约地址。
3) 通过Pancake合约的skim接口,可以将转入pair的$YEED提取到to地址
执行了303次skim之后,368,560,011,835,864,090,713,282个$YEED转入恶意合约。
4)将$YEED在Pancake Swap卖成1,042,028 USDT
比较乌龙的是,虽然攻击者看似获利104万USDT,但他却永远无法动用该笔资金,原因是他调用了合约的自毁函数。
攻击交易发生的区块高度为17,132,515,在15秒之后,也就是区块高度17,132,520,攻击者调用了合约的自毁函数,但在此之前,TA并未将攻击所得的104万USDT提取走,也就是说这笔资金会永远锁定在这里。
三、总结
每次skim调用,tranfer出来$YEED的数量都与流动性池的balance数额相同,说明流动性池原有reserve数值为0,所以直接调用三个流动性池的skim接口可以将流动性池原有YEED进行提取。攻击者利用闪电贷,进行三百多次循环,触发奖励增发漏洞,可以获得更多的$YEED代币。最后攻击者在没有提取获利的情况下,触发攻击合约自毁逻辑,使获利永久锁定在销毁的攻击合约中。
链上天眼作为区块链安全领航者,将持续跟进链上安全事件,为链上安全保驾护航。