根據 Numen 鏈上監控,2023年6月1日10點7分55秒(UTC+8),Cellframe Network(@cellframenet)在 Binance Smart Chain 上因爲流動性遷移過程中代幣數量計算問題遭到黑客攻擊,黑客從中獲利76112美元。
事件分析
黑客地址:
https://bscscan.com/address/0x2525c811ecf22fc5fcde03c67112d34e97da6079
攻擊交易:
https://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 代幣的數量會減少。
Resoul 中的數值變大,Token1 的數值也變大。
用戶只需添加少量的 BNB 和少量的 New Cell 代幣即可獲取流動性,並將多余的 BNB 和 Old Cell 代幣返回給用戶。
然後,重復進行遷移操作。
4.最後,攻擊者移除新池子的流動性,並將遷移返回的 Old Cell 代幣兌換成 BNB。
此時,老池子中有大量的 Old Cell 代幣,但沒有 BNB,攻擊者將 Old Cell 代幣重新兌換成 BNB,從而完成盈利。
總 結
遷移流動性時應該多重考慮新池子和舊池子兩種代幣的數量的變化或者當前的代幣價格,直接取交易對兩個幣種數量計算容易被操控。
此外,代碼上线前應做好全面的安全審計。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。