DODO遭受攻击事件分析:搬起“石头”,竟砸了自己的脚?

  • 事件概览:2021年3月9日,去中心化交易所DODO的wCRES/USDT资金池遭黑客攻击,损失约98万美元的wCRES和114万美元的USDT。官方已介入调查。

  • 攻击原因:合约的init函数未设置重入校验,攻击者通过闪电贷工具转移空气币后,在交易结束前调用init函数将币种指向空气币,绕过闪电贷归还校验。

  • 技术细节

    • 攻击者利用闪电贷功能发起交易,并在过程中调用未受限的init函数。
    • DODO的闪电贷函数本身有重入防护,但init函数漏洞导致类似重入攻击生效。
  • 安全建议

    • 项目方需对所有函数(包括init)进行重入校验,避免因命名误解而忽略安全限制。
    • 建议采用形式化验证与人工审计结合的方式,全面排查合约漏洞。
    • 模块化开发中需警惕函数权限管理,避免因代码复杂度引入风险。
总结

原标题:《搬起“石头”,竟砸了自己的脚? | DODO攻击事件分析》

来源:成都链安

一、事件概览

北京时间2021年3月9日,根据【链必安-区块链安全态势感知平台(Beosin-Eagle Eye)】舆情监测显示,去中心化交易所DODO上的wCRES/USDT资金池似乎被黑客攻击,转移走价值近98万美元的Wrapped CRES(wCRES)和近114万美元的USDT。DODO官方回复目前团队正在进行调查。原文链接如下:

https://www.panewslab.com/zh/sqarticledetails/1615251653717039.html

成都链安(Beosin)安全团队第一时间针对该事件启动安全应急响应,并将事件细节分析进行梳理,以供参考。其实,该事件本身来说并不复杂,其攻击流程也非常简单。但因该事件涉及到“闪电贷”“重入攻击”等热门话题,因此成都链安认为有必要对该事件进行发声。 

二、事件分析 

该事件的攻击原因主要在于合约的init函数未进行限制,从而导致攻击者有权利进行调用,如下图所示:



经分析,攻击者利用DODO合约提供的闪电贷工具首先向合约转移了两种空气币。紧接着,发起一笔闪电贷交易在交易结束前,调用合约init函数将币种指向空气币从而躲过闪电贷的归还校验,如下图所示。


 

三、安全建议 

成都链安(Beosin)安全团队认为,事件并不复杂,但值得敲响警钟,引起广大项目方的注意。具体而言,首先是DODO的闪电贷函数是进行了重入校验的,但由于init函数并没有添加重入校验,所以导致类似重入攻击发生。 

另外结合成都链安审计团队以往对项目方安全审计经验,由于目前代码的复杂度越来越高,模块化也随之越来越多,有许多项目方虽然都使用init函数进行管理,但需要提醒的是,init函数在solidity也仅仅只是一个普通函数,在此呼吁广大项目方与开发者引起重视切记,不要误以为取名为“init,就只能进行一次调用。 

同时,我们建议,在日常的安全防护中,项目方也需要做好事无巨细的安全加固工作;通过借助第三方安全公司的专业力量,采用“形式化验证与人工审核”结合的复合式审计方法,方能实现对项目面面俱到的全方位护航。



分享至:

作者:Beosin

本文为PANews入驻专栏作者的观点,不代表PANews立场,不承担法律责任。

文章及观点也不构成投资意见

图片来源:Beosin如有侵权,请联系作者删除。

关注PANews官方账号,一起穿越牛熊