Web3 安全 | Cellframe Network 因闪电贷操控池子比例遭受攻击事件分析
2023-06-01 07:44

根据 Numen 链上监控,2023 年 6 月 1 日 10 点 7 分 55 秒(UTC+8),Cellframe Network(@cellframenet)在 Binance Smart Chain 上因为流动性迁移过程中代币数量计算问题遭到黑客攻击。https://bscscan.com/address/0x2525c811ecf22fc5fcde03c67112d34e97da6079https://bscscan.com/tx/0x943c2a5f89bc0c17f3fe1520ec6215ed8c6b897ce7f22f1b207fea3f79ae09a6预先调用交易:https://bscscan.com/tx/0xe2d496ccc3c5fd65a55048391662b8d40ddb5952dc26c715c702ba3929158cb9流动性迁移中计算出现问题。
攻击流程
1.首先,攻击者通过 DPP 的 flashloan 获得了 1000 个 BNB,然后利用 Pancake v3 的闪电贷功能获取了 50 万个 New Cell 代币。
接下来,他们将所有的 New Cell 代币换成了 BNB,导致池中的 BNB 数量接近为 0。
最后,攻击者用 900 个 BNB 兑换成了 Old Cell 代币。

2.需要注意的是,攻击者在攻击之前添加了 Old Cell 和 BNB 的流动性,获得 Old lp。

3.接着,攻击者调用流动性迁移函数。此时的状态是新池子中几乎没有 BNB,老池子中几乎没有 Old Cell 代币。首先,移除旧流动性,并将对应数量的代币返回给用户;接着,按照新池子的比例添加新的流动性。由于旧池子中基本没有 Old Cell 代币,因此在移除流动性时获得的 BNB 数量会增加,而 Old Cell 代币的数量会减少。Resoult 中的数值变大,Token1 的数值也变大。用户只需添加少量的 BNB 和少量的 New Cell 代币即可获取流动性,并将多余的 BNB 和 Old Cell 代币返回给用户。

4.最后,攻击者移除新池子的流动性,并将迁移返回的 Old Cell 代币兑换成 BNB。
此时,老池子中有大量的 Old Cell 代币,但没有 BNB,攻击者将 Old Cell 代币重新兑换成 BNB,从而完成盈利。

迁移流动性时应该多重考虑新池子和旧池子两种代币的数量的变化或者当前的代币价格,直接取交易对两个币种数量计算容易被操控。

https://github.com/NumenCyberhttps://twitter.com/@numencyberhttps://medium.com/@numencyberlabshttps://www.linkedin.com/company/numencyber/
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。