據慢霧區情報,2022 年01 月28 日,Qubit 項目的QBridge 遭受攻擊,損失約8000 萬美金。慢霧安全團隊進行分析後以簡析的形式分享給大家。

簡要分析

1. 攻擊者通過ETH 上的QBridge 合約進行存款操作,存款時傳入所要跨的目標鏈destinationDomainID、所要跨鏈的資產resourceID 以及跨鏈資金數量與接收地址等參數構成的data。

2. 攻擊者指定傳入的resourceID 為跨ETH 代幣所需要的值,但其調用的是QBridge 的deposit 函數而非depositETH 函數,因此首先繞過了跨鏈資金數量與msg.value 的檢查。 deposit 函數會根據resourceID 從映射中取出handler 地址進行充值,由於攻擊者傳入的是真實的跨ETH 代幣所需要的值所以可以順利調用handler 合約的deposit 函數。

3. handler 合約的deposit 函數中會根據resourceID 取出的所要充值的代幣是否在白名單內進行檢查,由於攻擊者傳入的resourceID 對應ETH,因此映射中取出的所要充值的代幣為0 地址,即會被認為是充值ETH 而通過了白名單檢查。但deposit 函數中卻並沒有對所要充值的代幣地址再次進行檢查(充值ETH 應該是要通過depositETH 函數進行跨鏈),隨後直接通過safeTransferFrom 調用了所要充值的代幣的transferFrom 函數。

4. 由於所要充值的代幣地址為0 地址,而call 調用無code size 的EOA 地址時其執行結果都會為true 且返回值為空,因此通過transferFrom 的轉賬操作通過了safeTransferFrom 的檢查,最後觸發了Deposit 跨鏈充值事件。

5. 由於傳入的resourceID 為跨ETH 所需要的值,因此觸發的Deposit 事件與真正充值ETH 的事件相同,這讓QBridge 認為攻擊者進行了ETH 跨鏈,因此在BSC 鏈上為攻擊者鑄造了大量的qXETH 代幣。攻擊者利用此qXETH 憑證耗盡了Qubit 的借貸池。

MistTrack 分析

慢霧AML 旗下MistTrack 反洗錢追踪系統分析發現,攻擊者地址(0xd01...5c7)首先從Tornado.Cash 提幣獲取初始資金,隨後部署了合約,且該攻擊者地址交互的地址是Qubit、PancakeSwap和Tornado.Cash 合約地址。目前資金未發生進一步轉移。慢霧AML 將持續監控被盜資金的轉移,拉黑攻擊者控制的錢包地址,提醒交易所、錢包注意加強地址監控,避免相關惡意資金流入平台。

總結

本次攻擊的主要原因在於在充值普通代幣與native 代幣分開實現的情況下,在對白名單內的代幣進行轉賬操作時未對其是否為0 地址再次進行檢查,導致本該通過native 充值函數進行充值的操作卻能順利走通普通代幣充值邏輯。慢霧安全團隊建議在對充值代幣進行白名單檢查後仍需對充值的是否為native 代幣進行檢查。

參考交易:

https://etherscan.io/tx/0x478d83f2ad909c64a9a3d807b3d8399bb67a997f9721fc5580ae2c51fab92acf

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