事件背景
零時科技區塊鍊安全情報平台監控到消息,中原標準時間2023年4月1日,BSC鍊上Allbridge跨鍊橋受到黑客攻擊,攻擊者獲利約57萬美元,攻擊者位址為0xc578d755cd56255d3ff6e92e1b6371ba945e3984,被盜資金轉移至Tornado.cash混币平台。零時科技安全團隊及時對此安全事件進行分析。
合約漏洞
合約中執行兌換操作函數swapToVUsd中計算兌換結果方式為合約中目前記錄BUSD餘額與計算轉入token後的數量轉換為BUSD的內插補點得到的,是以攻擊者通過存取大量資金以及進行大量代币兌換實作對池子中代币價格控制。
攻擊步驟
1. 攻擊者通過閃電貸借出7,500,000 BUSD
2. 将 2,003,300 BUSD 兌換為 2,000,296 USDT,此時合約中 BUSD 餘額為11,405,966,USDT餘額為8,296,249
3. 調用合約中deposit函數,向合約中存入 5,000,000 BUSD
4. 此時攻擊者位址剩餘 496,700 BUSD,攻擊者将剩餘 BUSD 全部兌換為 USDT,共 495,488 個
5. 将之前兌換得到的 2,000,296 USDT 存入合約
6. 調用Allbridge Core: Bridge合約中swap函數,使用495,784 USDT 兌換 490,849 BUSD
7. 取出之前存入的 4,830,999 BUSD
8. 調用Allbridge Core: Bridge合約中swap函數,使用 40,000 BUSD 兌換出 789,632 USDT
9. 将存入的資金提出,并将USDT兌換為BUSD
10. 歸還閃電貸
攻擊者此次攻擊中共獲利 549,874 BUSD
總結及建議
此次攻擊是由于攻擊者可以通過大額存取資金和進行兌換,進而修改交易池中代币的比例,實作用較少的BUSD兌換出大額USDT進而獲利。
安全建議
- 建議對合約中進行代币兌換的函數添加最大兌換比判斷,避免當池子中代币數量內插補點較大時執行兌換産生較大損失。
- 建議項目方上線前進行多次審計,避免出現審計步驟缺失