零时科技 || DCF 攻击事件分析

背景介绍

2024年11月25日,我们监控到 BNB Smart Chain 上的一起攻击事件,被攻击的项目为 DCF。攻击交易为

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

本次攻击共造成约 440,000 USD 的损失。

攻击及事件分析

首先,攻击者从一系列的 PancakeSwapV3 Pool 中利用 flashloan 贷了大量 BUSD。

1732779941_67481fa54213aa120fcba.png!small?1732779940616

随后,攻击者利用 PancakeSwap 的 swap 功能的先转兑换后的 token 然后在 callback 函数中支付token ,通过一系列的递归 swap 又拿到了大量的 BUSD 。

1732779953_67481fb1a41e863803520.png!small?1732779952923

接着,在攻击者拿到用来实施攻击的本金后,开始针对 DCF 项目的攻击。

第一步:

攻击者将持有的所有 DCF 转给攻击合约,

1732779965_67481fbd734e7bf226402.png!small?1732779964418

第二步:

攻击者使用 80,435,691 BUSD 兑换了 4,039 DCF 给0x16600100b04d17451a03575436b4090f6ff8f404 ,

1732779975_67481fc750be8f63f5a61.png!small?1732779974391

第三步:

攻击者用剩下的 29,919,679 BUSD 兑换了 1,062,693 DCT 给攻击合约,

1732780004_67481fe45166d28ce2ffc.png!small?1732780003398

第四步:

攻击者利用 transfer 将 82 DCF 转给了 PancakeSwap Pair BUSD-DCF ,我们看一下 DCF的 transfer 的具体实现,

1732780014_67481fee332a2327d3c05.png!small?1732780013242

1732780021_67481ff55d30e0ccd83ae.png!small?1732780020150

可以看到,当 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 的价格。

1732780035_674820035c2a8fac87cc3.png!small?1732780034550

最后,攻击者利用手中剩余的 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 的价格。最后完成套利。建议项目方在合约上线前审计时尽量选择多个审计公司交叉审计。

# 黑客攻击 # 攻击事件 # web3安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
原始链接: https://www.freebuf.com/articles/blockchain-articles/416431.html
侵权请联系站方: [email protected]

相关推荐

换一批