DeFi协议MIM_Spell遭黑客“偷袭” 损失超600万美元
来源:Beosin
北京时间2024年1月30日,据Beosin旗下EagleEye安全风险监控、预警与阻断平台监测显示, DeFi协议MIM_Spell遭黑客闪电贷攻击,导致了超600万美元的损失。 目前攻击者将被盗资金兑换为ETH,并转移到两个攻击者地址上,Beosin KYT将对资金进行持续监控,同时我们对本次漏洞进行了分析。
漏洞分析
该事件发生的主要原因是 攻击者利用了项目方合约使用了向上取整的算法,并且控制了参数为1,将向上取整的误差控制的最大,从而导致账本失衡。
合约存在两个函数,分别是borrow和repay,一个是向合约借钱,一个是还钱给合约。
Borrow函数将指定借款数额,并且通过比例转换计算出债务值,更新到调用者的总债务值。如下图,这里合约的add算法采用了向上取整。
Borrow函数将指定还款债务值,并且通过比例转换计算出还款数额,将还款数额转移到本合约。如下图,这里合约的sub算法依然采用了向上取整。
了解了借款和还款的过程,我们来看看黑客是如何利用该漏洞的。
黑客先将合约的借款数额与债务值控制为了0与97(如何控制将在下一节介绍)。
接下来不停调用borrow和repay函数,并且借款和还款数值都为1,最后将借款数额与债务值控制为了0和120080183810681886665215049728,导致比例严重失衡。
根据上述代码规则(elastic=0,base=97),当攻击者调用一次borrow并传入1时,两个账本将变为elastic=1、base=98(elastic为0时,将按数值同步增加),再次调用一次borrow并传入1时,将变成elastic=2、base=196(elastic不为0时,将按比例同步增加)。
接下来攻击者调用repay函数传入1,将调用sub函数,此时计算出来的elastic应该等于1*1/196=>0,但是算法向上取整,导致计算出来elastic=1,结果将变成elastic=1、base=195。可以看到,此时elastic不变,base却翻倍。
攻击者通过多次上述方式,将elastic=0、base=120080183810681886665215049728。最终通过一笔borrow将合约500多万MIM借贷出来。
攻击流程
明白了函数问题点,我们来看看攻击者是如何实施攻击的(其中一笔交易为例)。
1.攻击者首先借贷了30万枚MIM。
2.随后,攻击者在回调函数中查询借款数额与债务值,可以看到,此时为24万和23万。
3.接下来攻击者调用repayForAll函数,归还了24万MIM代币,将elastic控制得极小。
4.接下来,攻击者通过repay函数归还了其他用户的负债,最终将借款数额与债务值控制为了0与97。
5.攻击者新创建合约,并通过上诉borrow与repay的方式,将借款数额与债务值控制为了0和120080183810681886665215049728。
6.最终通过一笔borrow将500万MIM借贷出来,并归还闪电贷。
资金追踪
截止发稿,被盗的超600万美元的资金,全部被攻击者兑换为了ETH,并且一直分散存在黑客地址未移动,Beosin KYT反洗钱平台将对资金进行持续监控。
铭文科普|了解铭文协议用例、实现方式与资产安全
由于铭文协议的复杂性和新颖性,各种安全问题频出。这不仅威胁到用户的资产安全,也对整个铭文生态的健康发展产生了负面影响。...
1月典型安全事件造成的总损失超2亿美元 Web3生态安全不可忽视
2024年1月发生较典型安全事件超『28』起,因黑客攻击、钓鱼诈骗和Rug Pull造成的总损失金额约2.09亿美元,较去年12月上涨约97%。...
惹争议的空投?Beosin KYT带你追踪AltLayer链上可疑囤积地址
近期,Rollup as a service(RaaS)赛道的头部项目 AltLayer 开启了2024年目前最大的空投,空投总价值超1亿美元,成为了Web3社区热议的事件。...