零时科技 || DCF 攻击事件分析
背景介绍
2024年11月25日,我们监控到 BNB Smart Chain 上的一起攻击事件,被攻击的项目为 DCF 。攻击交易为
https://bscscan.com/tx/0xb375932951c271606360b6bf4287d080c5601f4f59452b0484ea6c856defd6fd
本次攻击共造成约 440,000 USD 的损失。
攻击及事件分析
首先,攻击者从一系列的 PancakeSwapV3 Pool 中利用 flashloan 贷了大量 BUSD。
随后,攻击者利用 PancakeSwap 的 swap 功能的先转兑换后的 token 然后在 callback 函数中支付token ,通过一系列的递归 swap 又拿到了大量的 BUSD 。
接着,在攻击者拿到用来实施攻击的本金后,开始针对 DCF 项目的攻击。
第一步:
攻击者将持有的所有 DCF 转给攻击合约,
第二步:
攻击者使用 80,435,691 BUSD 兑换了 4,039 DCF 给0x16600100b04d17451a03575436b4090f6ff8f404 ,
第三步:
攻击者用剩下的 29,919,679 BUSD 兑换了 1,062,693 DCT 给攻击合约,
第四步:
攻击者利用 transfer 将 82 DCF 转给了 PancakeSwap Pair BUSD-DCF ,我们看一下 DCF的 transfer 的具体实现,
可以看到,当 to 为 PancakeSwap Pair 的地址时执行红框里的代码,漏洞就出现在这。由于 deadcfg 为 2 ,所以该代码会将 transfer 的 amount 约一半的 DCF 从 PancakeSwap Pair 中销毁,最后再 sync 。该操作会造成 PancakeSwap Pair BUSD-DCF 中 DCF 的数量大幅减少,DCF 的价格大幅拉升。通过此次操作,导致 DCF 的价格由 171 BUSD 拉升到了 1,708,540,682,977,674 BUSD ,拉升了 9,991,465,982,325 倍。由于 DCF 的 transfer 函数中的代码 liquidHepler.addLiquidity 又将 PancakeSwap Pair BUSDDCT 中的一部分 DCT 消耗掉了,所以同样也拉升了 DCT 的价格。
最后,攻击者利用手中剩余的 DCF 将 PancakeSwap Pair BUSD-DCF 中的 72,612,978 BUSD 掏空。由于上述操作同样也拉升了 DCT 的价格,所以攻击者之前使用 29,919,679 BUSD 兑换的 DCT 价值变为 38,302,987 BUSD 。最后,在攻击者归还了 flashloan 中借贷的 BUSD 后,获利 442,028 BUSD 。
总结
本次漏洞的成因是项目方在实现 DCF 的 transfer 函数时,编写了错误的逻辑。导致攻击者通过transfer 给 swap pair 后,销毁 pair 中的 DCF ,从而可以轻易操纵 DCF 的价格。最后完成套利。建议项目方在合约上线前审计时尽量选择多个审计公司交叉审计。