数次闪电贷无成本套利上百万美元,New Free DAO攻击事件分析

CertiK热度: 13334

2New Free DAO (NFD) 项目遭遇了闪电贷攻击。攻击者在3次攻击中重复上述过程,获取了4481枚WBNB,价值约125万美元。由于攻击者大量抛售NFD代币(6,838,792枚),该代币的价格已经暴跌超过99%。

原文作者:CertiK

原文来源:CertiK

2022年9月8日,CertiK Skynet天网监测到New Free DAO (NFD) 项目遭遇了闪电贷攻击

漏洞在NFD项目部署的一个未经验证的奖励合约中,攻击者利用闪电贷借入NFD代币,并将其发送到攻击合约。随后攻击合约则利用未经验证的奖励合约的漏洞,向攻击者发送了更多的NFD代币。

攻击者在3次攻击中重复上述过程,获取了4481WBNB,价值约125万美元

由于攻击者大量抛售NFD代币(6,838,792),该代币的价格已经暴跌超过99%。

攻击步骤

① 攻击者在交易0xdd058fb5a53db0e9236ad7f1b29d7c39e586a1cef53af5866794ed993b9633b7中部署了一个未经验证的攻击合约0xa35ef9fa2f5e0527cb9fbb6f9d3a24cfed948863,并调用函数addMember(),将自己添加为合约成员。

DAO

② 在攻击合约的加持下,攻击者执行了三次闪电贷攻击。

我们将以第一个攻击交易0x1fea385acf7ff046d928d4041db017e1d7ead66727ce7aacb3296b9d485d4a26为例进行详细分析。

③ 攻击者利用攻击合约通过闪电贷借入250枚WBNB,并通过PancakeSwap交易对资金池WBNB-USDT & USDT-NFD,将250枚WBNB换成6,313,508枚NFD代币给攻击合约。

④ 随后,攻击者将6,313,508枚NFD代币发送到未经验证的合约地址0x9f49375d30dd556776c14e95fb2502ac7e09a281,它调用了名为0xe2f9d09c的方法,输入为NFD代币地址0x000000000000000038c63a5d3f206314107a7a9fe8cbba29d629d4f9。此举动触发了NFD项目部署的未经验证的奖励合约0x8b068e22e9a4a9bca3c321e0ec428abf32691d1e的0x6811e3b9()方法,方法0x6811e3b9()的反编译如下: 

DAO对于一个新的调用者,默认的时间戳`stor_6`将被设置为owner_d[msg.sender]。变量`v2` = (block.timestamp - owner_d[msg.sender]) / stor_8作为_SafeDiv被定义为第二个参数除以第一个参数。之后,`v5`或`v7`是`v1`与一些默认值`stor_b`的乘法,返回值`v3`是`v5`或`v8`(=`v2`*`v7`)除以一个乘数0xf4240=1000,000。由于时间戳在函数结束时被更新,攻击者必须重复创建新的合约。

DAO

DAO之后,根据奖励计算,未验证的合约实际上从奖励合约中收到了额外的525,283枚NFD代币——总计6,838,792枚NFD代币,这些代币被返还给了攻击合约。

⑤ 攻击者利用几十个新创建的合约重复这个过程。因为对于每一个新的合约,时间戳将被重置为`stor_6`,就像步骤4一样,奖励仍然可用。

⑥ 最后,攻击者的合约得到了343,323,371NFD代币,并将其出售,获得3202WBNB。攻击者偿还了250WBNB的闪电贷,获得了2952WBNB的利润。

⑦ 最后攻击者通过其他两笔漏洞交易,获得了大约4481WBNB,价值约125万美元。

漏洞分析

本次攻击事件的漏洞位于NFD项目部署的一个未经验证的奖励合约在调查了有漏洞的合约字节码后,CertiK安全团队确认根本原因是以下代码中显示的函数`0x6811e3b9`带来了问题。

DAO从代码实现来看,有两个主要因素会影响奖励:

1. 时间间隔:存款时间越长,可以获得的奖励越多。

2. 用户代币余额:用户持有的代币越多,用户可以获得的奖励就越多。

然而,由于没有防止闪电贷的机制,这意味着攻击者可以通过闪电贷大幅增加其代币余额。此外,在L169中,用户的奖励开始时间将被初始化为 "store_6",导致 "block.tmestamp - store_6 "是一个非零值。

因此,在闪电贷的帮助下,攻击者能够通过借用代币来放大奖励,大大增加奖励额度。

资金去向

攻击者总共获得了4481WBNB,并将其中的2000枚兑换成了55.7万枚USDT,剩下的WBNB仍然在攻击者的账户中。

将2000WBNB交易为USDT的两笔交易:

https://bscscan.com/tx/0x8c035fc9c3d944b3dd4a0ea721c119240cb624e79b7625a16173ad6682410599 

https://bscscan.com/tx/0xda4b4de6ecacfe9b8b60167a2010630aeec103ab51920eb2e1b94ba1fef6c95b 

相关地址

攻击者账户:

https://bscscan.com/address/0x22c9736d4fc73a8fa0eb436d2ce919f5849d6fd2 

攻击合约:

https://bscscan.com/address/0xa35ef9fa2f5e0527cb9fbb6f9d3a24cfed948863 

未经验证的奖励合约:

https://bscscan.com/address/0x8b068e22e9a4a9bca3c321e0ec428abf32691d1e 

WBNB-USDT对:

https://bscscan.com/address/0x16b9a82891338f9ba80e2d6970fdda79d1eb0dae 

USDT-NFD对:

https://bscscan.com/address/0x26c0623847637095655b2868c3182b2285bdaeaf 

写在最后

因奖励计算逻辑模式缺陷,对于富有经验的熟悉闪电贷攻击的审计人员来说,该漏洞可谓“显而易见”。攻击发生后,CertiK的推特预警账号以及官方预警系统已于第一时间发布了消息。同时,CertiK也会持续于官方公众号发布与项目预警(攻击、欺诈、跑路等)相关的信息。

CertiK的端到端安全解决方案,从智能合约审计和KYC项目背景调查服务,到Skynet天网动态扫描系统SkyTrace等区块链分析工具,以及漏洞赏金计划,助力每一个项目充分发挥潜力的同时为Web3.0打造用户和投资者高参与的生态系统。

DAO目前,CertiK的审计及端到端解决方案已覆盖目前市面上大部分生态系统,并支持几乎所有主流编程语言,就区块链平台、数字资产交易平台、智能合约的安全性等领域为各个生态链提供安全技术支持。

迄今为止,CertiK已获得了3600家企业客户的认可,保护了超过3110亿美元的数字资产免受损失。

责任编辑:MK

声明:本文为入驻“MarsBit 专栏”作者作品,不代表MarsBit官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
免责声明:本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况,及遵守所在国家和地区的相关法律法规。