【漏洞分析】20240718-WazirXIndia:交易所私钥泄露导致约 2.35 亿美元损失

背景介绍

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

posted @ 2024-07-19 00:46  ACai_sec  阅读(107)  评论(5编辑  收藏  举报