大意失荊州:Paraluni 被黑分析

慢霧安全團隊建議在進行deposit 存款等敏感操作時對指定pid 對應的池子代幣與所傳入的代幣做好一致性的判斷,並且在添加流動性等涉及LP 代幣數量變動的函數需添加重入鎖的限制,避免再次出現此類問題。

By:九九@慢霧安全團隊

2022 年03 月13 日,據慢霧區消息,Paraluni 存在嚴重漏洞遭攻擊,黑客獲利約170 萬美元,慢霧安全團隊第一時間介入分析,並將結果分享如下:

相關信息

Paraluni 是BSC 鏈上的一個元宇宙金融(DeFi)項目。用戶可以質押代幣添加流動性獲取收益。

以下是本次攻擊涉及的相關地址:

攻擊者地址:

https://bscscan.com/address/0x94bc1d555e63eea23fe7fdbf937ef3f9ac5fcf8f

攻擊交易:

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

攻擊合約:

https://bscscan.com/address/0x4770b5cb9d51ecb7ad5b14f0d4f2cee8e5563645

UBT(ukraine bad token)代幣合約:

https://bscscan.com/address/0xca2ca459ec6e4f58ad88aeb7285d2e41747b9134

UGT(russia good token)代幣合約:

https://bscscan.com/address/0xbc5db89ce5ab8035a71c6cd1cd0f0721ad28b508

Masterchef 合約:

https://bscscan.com/address/0xa386f30853a7eb7e6a25ec8389337a5c6973421d#code

攻擊核心點

在MasterCheif 合約中的depositByAddLiquidity 函數中,未校驗傳入的代幣數組參數_tokens 所構造的LP 代幣是否和指定的_pid 參數對應和池子裡的LP 代幣(USDT-BUSD LP)是否一致,且在添加流動性計算時沒有做重入限制,導致攻擊者利用了惡意構造的代幣合約進行了重入攻擊。

具體細節分析

1. 攻擊者構造了改寫了transferFrom 函數的ERC20 標準的UBT 代幣合約與另一個ERC20 標準的UGT 代幣合約;

2. 攻擊者首先從PancakeSwap 中閃電貸借出約15.7 萬枚USDT 和15.7 萬枚BUSD;

分析

3. 接著調用ParaRouter 合約中的addLiquidity 函數添加流動性,為所構造的UBT 合約上mint 約15.5 萬枚Paraluni LPs 代幣;

分析分析

4. 調用MasterChef 合約中的depositByAddLiquidity 函數,指定傳入的_pid 參數為18,為該池子添加了1 個UBT 代幣和1 個UGT 代幣的流動性。該函數內部調用了depositByAddLiquidityInternal 函數;

分析分析

在depositByAddLiquidityInternal 函數中,會利用傳入的_tokens 代幣通過調用paraRouter 合約的addLiquidity 函數去構造LP 代幣。而我們看到該函數沒有校驗_pid 對應的池子代幣(USDT-BUSD LP)和利用傳入的_tokens 所構造的LP 代幣是否相匹配;

分析分析

5. depositByAddLiquidityInternal 函數又內部調用了addLiquidityInternal 函數,而在addLiquidityInternal 函數中,先獲取合約地址中LP 代幣餘額記錄為vars.oldBalance,接著調用了paraRouter 合約的addLiquidity 函數,然後再次獲取合約地址中LP 代幣餘額記錄為vars.newBalance,最後用vars.newBalanc – vars.oldBalance 計算需要deposit 的數量,然後調用_deposit 函數存入LP 代幣;

分析分析

而paraRouter 合約的addLiquidity 函數會調用攻擊所構造的UBT 代幣合約中的transferFrom 函數,該函數為攻擊者惡意構造,會調用deposit 函數轉入LP 代幣記賬到UBT 合約中,而此時計算攻擊合約_deposit 的值時未能更新vars.oldBalance 的值,造成了UBT 代幣合約與攻擊合約均記賬了15.5 萬枚的LP 代幣份額,形成了一次重入攻擊;

6. 攻擊者分別調用UBT 合約中的withdrawAsset 函數和利用攻擊合約調用Mastechef 合約中的withdraw 函數提取LP 到攻擊合約中;

分析分析

7. 攻擊者移除流動性並總共得到了31 萬枚USDT 和31 萬枚BUSD,歸還閃電貸後獲利離場。

分析分析

MistTrack

據慢霧AML 分析,黑客地址初始資金來源於從Tornado.Cash 轉入的0.99785 BNB。

分析分析

在攻擊獲利後,黑客將部分BNB 兌換為ETH,並將235.448 ETH 從BSC 跨鏈到以太坊,同時將230 ETH 分5 筆轉入Tornado.Cash。

分析分析

截止目前,黑客在BSC 上的地址餘額為3000.06 BNB,在以太坊上的地址餘額為5.243 ETH。慢霧AML 將持續監控被盜資金的轉移,拉黑攻擊者控制的錢包地址。

在攻擊發生後,Paraluni 項目方與黑客在鏈上發生了一系列對話:

Paraluni:

分析分析

黑客也很快給出了回复:

分析分析

接著Paraluni 項目方繼續與黑客協商,如果黑客願意退還部分資金,則作為白帽行為給予賞金:

分析分析

而目前,黑客暫無回复。

總結

本次攻擊事件是由於在Mastechef 合約中的depositByAddLiquidity 函數未對指定_pid 對應的池子代幣和傳入的_tokens 數組裡的代幣所構造的LP 代幣作一致性校驗,並且在涉及流動性添加時未作重入鎖的限制,導致了LP 代幣數量記賬時被利用。慢霧安全團隊建議在進行deposit 存款等敏感操作時對指定pid 對應的池子代幣與所傳入的代幣做好一致性的判斷,並且在添加流動性等涉及LP 代幣數量變動的函數需添加重入鎖的限制,避免再次出現此類問題。

展開全文打開碳鏈價值APP 查看更多精彩資訊

Total
0
Shares
Related Posts