【漏洞分析】20240718-WazirXIndia:交易所私鑰泄露導致約 2.35 億美元損失
背景介紹
2024 年 7 月 18 日,WazirXIndia 遭遇黑客攻擊,損失約 2.35 億美元。本次攻擊是由于 ETH 上的 GnosisSafe 合約的 owner 私鑰和 3 個多簽錢包私鑰泄露造成的。攻擊者劫持了多重簽名錢包的 implement 合約,然后直接轉移錢包持有的資產。
攻擊交易
- 修改 implement 合約:https://app.blocksec.com/explorer/tx/eth/0x48164d3adbab78c2cb9876f6e17f88e321097fcd14cadd57556866e4ef3e185d
- 轉移資產(其中之一):https://app.blocksec.com/explorer/tx/eth/0x1e523051a8a481c5a57fe8261cced4cb3e775ce9315168b041fd34fc25d563ac
相關合約
- 多簽錢包 owner:https://etherscan.io/address/0xd967113224c354600b3151e27aaba53e3034f372
- 攻擊合約:https://etherscan.io/address/0x6eedf92fb92dd68a270c3205e96dccc527728066
- 多簽錢包 GnosisSafeProxy(被攻擊合約):https://etherscan.io/address/0x27fd43babfbe83a81d14665b1a6fb8030a60c9b4
- 惡意 implement 合約:https://etherscan.io/address/0xef279c2ab14960aa319008cbea384b9f8ac35fc6
攻擊交易1 Trace 分析
多簽錢包 owner 0xd967 調用 execTransaction 函數,對多簽進行驗證,然后執(zhí)行簽名的交易。

在 execTransaction 函數中,調用 checkSignatures 函數檢查多簽情況。

從 requiredSignatures 參數可以得知,需要 4 個簽名才能通過多簽校驗。

根據 trace 得知,在 checkNSignatures 函數中進行了 4 次簽名驗證。

在第四次驗簽中,由于 msg.sender 為多簽錢包的 owner 0xd967,所以走了 v == 1 的分支進行驗簽操作,其余三次都是進入 v > 30 的分支進行驗證。

通過簽名校驗后,調用 execute 函數,注意這里的 data 參數已經包含了攻擊者構造的惡意 implement 合約地址。

根據傳入的參數調用 delegatecall 函數,具體執(zhí)行了什么操作,從 trace 里面我們不得而知。

但是通過觀察 GnosisSafeProxy 合約的 solt 變化可以得知,攻擊者這次操作就是將 singleton 的地址修改為惡意 implement 地址。

攻擊交易2 Trace 分析
在執(zhí)行完第一筆攻擊交易后,選取其中一個獲利的攻擊交易進行分析。這次再調用多簽錢包時,直接走的就是 0xef27 的邏輯,直接對錢包代幣進行轉賬獲利。

在本次攻擊過程中,攻擊者一共執(zhí)行了 203 次這樣的獲利交易,總獲利金額約 2.35 億美元。


浙公網安備 33010602011771號