【漏洞分析】20240718-WazirXIndia:交易所私鑰洩露導致約 2.35 億美元損失

ACai_sec發表於2024-07-19

背景介紹

2024 年 7 月 18 日,WazirXIndia 遭遇駭客攻擊,損失約 2.35 億美元。本次攻擊是由於 ETH 上的 GnosisSafe 合約的 owner 私鑰和 3 個多籤錢包私鑰洩露造成的。攻擊者劫持了多重簽名錢包的 implement 合約,然後直接轉移錢包持有的資產。

攻擊交易

  1. 修改 implement 合約:https://app.blocksec.com/explorer/tx/eth/0x48164d3adbab78c2cb9876f6e17f88e321097fcd14cadd57556866e4ef3e185d
  2. 轉移資產(其中之一):https://app.blocksec.com/explorer/tx/eth/0x1e523051a8a481c5a57fe8261cced4cb3e775ce9315168b041fd34fc25d563ac

相關合約

  1. 多籤錢包 owner:https://etherscan.io/address/0xd967113224c354600b3151e27aaba53e3034f372
  2. 攻擊合約:https://etherscan.io/address/0x6eedf92fb92dd68a270c3205e96dccc527728066
  3. 多籤錢包 GnosisSafeProxy(被攻擊合約):https://etherscan.io/address/0x27fd43babfbe83a81d14665b1a6fb8030a60c9b4
  4. 惡意 implement 合約:https://etherscan.io/address/0xef279c2ab14960aa319008cbea384b9f8ac35fc6

攻擊交易1 Trace 分析

多籤錢包 owner 0xd967 呼叫 execTransaction 函式,對多籤進行驗證,然後執行簽名的交易。

image

execTransaction 函式中,呼叫 checkSignatures 函式檢查多籤情況。

image

requiredSignatures 引數可以得知,需要 4 個簽名才能透過多籤校驗。

image

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

image

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

image

透過簽名校驗後,呼叫 execute 函式,注意這裡的 data 引數已經包含了攻擊者構造的惡意 implement 合約地址。

image

根據傳入的引數呼叫 delegatecall 函式,具體執行了什麼操作,從 trace 裡面我們不得而知。

image

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

image

攻擊交易2 Trace 分析

在執行完第一筆攻擊交易後,選取其中一個獲利的攻擊交易進行分析。這次再呼叫多籤錢包時,直接走的就是 0xef27 的邏輯,直接對錢包代幣進行轉賬獲利。

image

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

image

相關文章