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次攻击中重复上述过程,获取了4481枚WBNB,价值约125万美元。
由于攻击者大量抛售NFD代币(6,838,792枚),该代币的价格已经暴跌超过99%。
① 攻击者在交易0xdd058fb5a53db0e9236ad7f1b29d7c39e586a1cef53af5866794ed993b9633b7中部署了一个未经验证的攻击合约0xa35ef9fa2f5e0527cb9fbb6f9d3a24cfed948863,并调用函数addMember(),将自己添加为合约成员。
② 在攻击合约的加持下,攻击者执行了三次闪电贷攻击。
我们将以第一个攻击交易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()的反编译如下:
对于一个新的调用者,默认的时间戳`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。由于时间戳在函数结束时被更新,攻击者必须重复创建新的合约。
之后,根据奖励计算,未验证的合约实际上从奖励合约中收到了额外的525,283枚NFD代币——总计6,838,792枚NFD代币,这些代币被返还给了攻击合约。
⑤ 攻击者利用几十个新创建的合约重复这个过程。因为对于每一个新的合约,时间戳将被重置为`stor_6`,就像步骤4一样,奖励仍然可用。
⑥ 最后,攻击者的合约得到了343,323,371枚NFD代币,并将其出售,获得3202WBNB。攻击者偿还了250WBNB的闪电贷,获得了2952WBNB的利润。
⑦ 最后攻击者通过其他两笔漏洞交易,获得了大约4481WBNB,价值约125万美元。
本次攻击事件的漏洞位于NFD项目部署的一个未经验证的奖励合约。在调查了有漏洞的合约字节码后,CertiK安全团队确认根本原因是以下代码中显示的函数`0x6811e3b9`带来了问题。
从代码实现来看,有两个主要因素会影响奖励:
1. 时间间隔:存款时间越长,可以获得的奖励越多。
2. 用户代币余额:用户持有的代币越多,用户可以获得的奖励就越多。
然而,由于没有防止闪电贷的机制,这意味着攻击者可以通过闪电贷大幅增加其代币余额。此外,在L169中,用户的奖励开始时间将被初始化为 "store_6",导致 "block.tmestamp - store_6 "是一个非零值。
因此,在闪电贷的帮助下,攻击者能够通过借用代币来放大奖励,大大增加奖励额度。
攻击者总共获得了4481枚WBNB,并将其中的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打造用户和投资者高参与的生态系统。
目前,CertiK的审计及端到端解决方案已覆盖目前市面上大部分生态系统,并支持几乎所有主流编程语言,就区块链平台、数字资产交易平台、智能合约的安全性等领域为各个生态链提供安全技术支持。
迄今为止,CertiK已获得了3600家企业客户的认可,保护了超过3110亿美元的数字资产免受损失。
责任编辑:MK