Cointime

扫码下载App
iOS & Android

SharkTeam:MIM_SPELL被攻击事件原理分析

2024年1月30日,MIM_SPELL遭受闪电贷攻击,因为精度计算漏洞,项目方损失650万美元。

SharkTeam对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

攻击者地址:

0x87F585809Ce79aE39A5fa0C7C96d0d159eb678C9

攻击合约:

0xe1091d17473b049cccd65c54f71677da85b77a45

0x13AF445F81B0DEcA5dCb2Be6A4C691F545c95912

0xe59b54a9e37ab69f6e9312a9b3f72539ee184e5a

被攻击合约:

0x7259e152103756e1616A77Ae982353c3751A6a90

攻击交易:

0x26a83db7e28838dd9fee6fb7314ae58dcc6aee9a20bf224c386ff5e80f7e4cf2

0xdb4616b89ad82062787a4e924d520639791302476484b9a6eca5126f79b6d877

攻击流程:

1. 攻击者(0x87F58580)通过闪电贷借取300000枚MIM代币。

2. 随后向被攻击合约(0x7259e1520)发送了240000枚的MIM代币,用于下一步偿还用户的借款。

3. 攻击者(0x87F58580)随后调用repayForAll函数偿还其他用户的借款,后续又依次调用repay函数偿还其他用户借款,目的是将elastic变量减小为0.

4. elastic变量减小为0后,攻击者(0x87F58580)创建新的攻击合约(0xe59b54a9)并不断的进行borrow和repay函数的调用,直到将elastic =0,base = 120080183810681886665215049728时结束。

5. 随后攻击者(0x87F58580)调用borrow函数和DegenBox合约的withdraw函数借出了5000047枚MIM代币。

6. 攻击者(0x87F58580)归还闪电贷函数,并将4400000枚MIM代币兑换为1807枚ETH,本交易获利约450W。

攻击的本质是在进行借贷变量计算时精度出现了问题,使得关键变量elastic和base值被操纵后比例失衡,导致计算抵押物和借贷数量时出现问题,最终超额借出MIM代币。

被攻击合约(0x7259e1520)中borrow函数和repay函数在对elastic和base两个变量进行计算时,都采用了向上取整的方式。

攻击者(0x87F58580)首先通过偿还其他用户借款的方式,将elastic变量和base变量分别设置为了0和97。

随后不断的调用borrow函数和repay函数并且参数amount都为1,在第一次调用borrow函数时,由于elastic=0,会执行上述if逻辑并回到add函数中。这样会导致elastic = 1,base = 98。

攻击者(0x87F58580)再调用borrow函数并传入1,由于elastic=1,会执行else逻辑,计算出的返回值为98,这样在回到add函数中时,elastic=2,base变量为196.

但此时攻击者(0x87F58580)调用repay函数并传入1,由于elastic=2,会执行else逻辑,计算出的elastic变量本来为 1*2/98 =0,但由于下面存在向上取整的步骤,导致计算出的返回值1,这样在回到sub函数中时,elastic变量又变回1,而base变量为195。

可以看到在经历一次borrow-repay循环后,elastic变量不变而base变量近乎翻倍,利用这一漏洞,黑客频繁进行borrow-repay函数循环,最后再调用一次repay,最终使得elastic=0 base = 120080183810681886665215049728。

当elastic和Base变量之间的比例严重失衡后,攻击者(0x87F58580)添加了一点抵押物后即可通过solvent修饰符中的限制条件,从而借出大量MIM代币。

针对本次攻击事件,我们在开发过程中应遵循以下注意事项:

1. 开发精度计算相关逻辑时,慎重考虑精度和取整情况。

2. 项目上线前,需要通过专业的第三方审计团队进行智能合约审计。

SharkTeam的愿景是保护Web3世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约底层理论。提供包括链上大数据分析、链上风险预警、KYT/AML、智能合约审计、加密资产追讨等服务,并打造了链上智能风险识别平台ChainAegis,平台支持无限层级的深度图分析,能有效对抗Web3世界的高级持续性威胁(Advanced Persistent Threat,APT)。已与Web3生态各领域的关键参与者,如Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land等建立长期合作关系。

官网:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

评论

所有评论

推荐阅读

  • BTC突破70000美元

    Cointime 报道,行情显示,BTC突破70000美元,现报70003.25美元,24小时涨幅达到3.96%,行情波动较大,请做好风险控制。

  • 伊朗通过巴基斯坦回击美国,拒绝停火,强调必须永久结束战争

    Cointime 报道,据伊朗伊斯兰共和国通讯社(IRNA):伊朗通过巴基斯坦回击美国,拒绝停火,强调必须永久结束战争。

  • 美媒称45天停火计划只是“众多方案之一”

    Cointime 报道,据美国媒体6日报道,一名白宫官员说,美国和伊朗之间为期45天的停火计划只是目前正在讨论的“众多方案之一”。这位白宫官员表示,美国总统特朗普尚未批准该计划,美方对伊朗的军事行动仍在继续。(新华社)

  • 特朗普尚未批准停火计划

    Cointime 报道,4月6日,美国白宫表示,美国总统特朗普尚未批准停火计划。潜在的停火方案只是众多设想之一。(金十)

  • Strategy上周增持4,871枚BTC,累计持仓突破76.6万枚

    Cointime 报道,4月6日,据Strategy官方披露,Strategy上周以约6.7718万美元的均价买入4,871枚BTC,总耗资约3.299亿美元。截至2026年,Strategy累计持有766,970枚BTC,总持仓成本约580.2亿美元,均价约7.5644万美元/枚。

  • 伊朗发动“真实承诺-4”第98波攻势 打击美军两栖攻击舰

    Cointime 报道,4月6日讯,伊朗伊斯兰革命卫队公共关系部发表声明说,伊朗发动“真实承诺-4”行动第98波攻势。声明称,伊斯兰革命卫队海军��用巡航导弹打击了属于“犹太复国主义政权”的集装箱船SDN7,该船被摧毁后发生大面积起火,还使用导弹打击了特拉维夫北部和南部、海法的战略中心、贝尔谢巴的化工企业与工厂,以及巴特赫费尔的军队驻地。声明还表示,搭载逾5000名水兵和海军陆战队员的美国军方两栖攻击舰LHA7也遭到导弹打击,在此次攻势后被迫撤退至印度洋南部深海区域。声明还称,阿联酋与以色列联合无人机生产中心,以及驻扎在阿里·萨利姆基地的多架飞机,均遭到无人机和导弹打击。 (金十)

  • 霍尔木兹海峡船只通行数量升至3月初以来最高水平

    Cointime 报道,4月6日,据外媒报道,霍尔木兹海峡通行量升至中东战争爆发初期以来最高水平,因更多国家与伊朗达成安全通行协议。周末共有21艘船只通过该水道,这是自3月初通行量开始下降以来的最高两日总量。尽管当前通行船只数量仍远低于战前水平(约135艘),但已有更多国家获得通行许可。新加坡Kpler高级原油分析师表示:“伊朗在回应其伙伴国请求的同时,也在强化对霍尔木兹的控制。通行仍取决于伊朗意愿,如果冲突升级,局势可能随时发生变化。”截至目前,大多数获准通行的船只似乎遵循德黑兰指示的航线,贴近伊朗海岸航行。不过,也有更多船只开始选择沿对岸航线行驶。 (金十)

  • 伊朗称美国15点计划“野心极大且不合逻辑”

    Cointime 报道,4月6日讯,据伊朗伊斯兰共和国通讯社(IRNA)报道,伊朗外交部发言人伊斯梅尔·巴盖伊表示,在近期有关结束战争的提议背景下,德黑兰已敲定自身诉求,但仅会在适当时机公布,并强调伊朗不会屈从于压力,。他表示:“几天前,他们通过中间方提出了一些方案,而这项包含15点内容的美国计划是通过巴基斯坦以及其他一些友好国家转达的。”他并补充称,“此类方案野心极大,又不同寻常,而且不合逻辑。”他强调,伊朗拥有自身框架。“基于我们的自身利益,基于我们的考量,我们已经整理并制定了我们过去和现在所提出的一系列诉求。”他还否认与调解方接触意味着软弱。“伊朗迅速且勇敢地对一项方案表达立场的事实,不应被视为向敌人屈服的表现。”(金十)

  • BTC突破70000美元关口

    Cointime 报道,行情显示,BTC突破70000美元关口,现报70071.01美元,24小时涨幅达到4.46%,行情波动较大,请做好风险控制。