8000 萬美元不翼而飛 —— QBridge 被黑簡析

語言: CN / TW / HK

據慢霧區情報,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

慢霧導航

慢霧科技官網

https://www.slowmist.com/

慢霧區官網

https://slowmist.io/

慢霧 GitHub

https://github.com/slowmist

Telegram

https://t.me/slowmistteam

Twitter

https://twitter.com/@slowmist_team

Medium

https://medium.com/@slowmist

知識星球

https://t.zsxq.com/Q3zNvvF