区块链 > 技术 > 正文

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

区块链数字货币板块文章「DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞」,本文约有1209个文字,大小约为5KB,预计阅读时间4分钟请您欣赏。樱花区块链门户资讯网荟萃众多优秀文章精选,如果想要浏览更多相关区块链数字货币,可以关注本文结尾推荐的优秀文章内容。本站区块链资讯虽然不乏优秀之作,但仅为大家参考使用,希望能对关注区块链的人有所帮助。

以下是这次漏洞的披露细节,作者是专业白帽samczsun,曾披露过0x等项目的严重漏洞。

长话短说:

Authereum钱包包含了一个漏洞,而攻击者可以利用它来随时接管任何钱包。Authereum团队利用此漏洞来强制对所有的用户钱包进行了升级,因此没有丢失资金。

关于Authereum

Authereum是一个旨在使用户更轻松使用以太坊dApp的项目。为了实现这一目标,他们建立了一套智能合约,以充当智能钱包。

每个智能钱包均由一组管理密钥(admin key)拥有,并且当用户在Authereum上创建帐户时会生成第一个管理密钥。自然,管理密钥可以添加新的管理密钥。

Authereum钱包还允许中继者(relayer)提交交易,因此最终用户无需担心支付gas费用。为了确保中继者无法通过做坏事造成破坏,Authereum钱包会验证中继的交易是否已由管理密钥签名。

如何中继一笔交易

让我们看一下中继者(relayer)如何使用Authereum元交易来中继一笔ERC20批准交易。

首先,用户提供编码交易。这包括目标合约,要发送的ETH量,gas限额以及交易数据。对于一笔ERC20批准交易,可能看起来像是这样的:

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

接下来,用户指定他们希望发送此交易的最低gas价格,以及估算的gas费用。用户还指定他们是否要用ETH以外的代币付款,以及ETH转换成相关代币的费率。

最后,用户提供一个管理密钥签名。具体来说,它是以下数据的签名。

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

Source

向中继者提供所有必需的信息后,他们将提交一笔交易到函数executeMultipleAuthKeyMetaTransactions,该函数如下所示:

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

Source

此时,Authereum钱包将自动执行所有交易,验证交易是否已通过管理密钥签名,然后在必要时退款。

注意到存在问题的地方了吗?

元交易存在的问题

如果管理者可以使用元交易来中继某些交易,那如果其可以使用元交易中继所有交易肯定是很好的。但是,确保管理者发送一笔交易的唯一可靠方法,就是检查msg.sender,而这在一笔元交易中是不起作用的。

实际上,如果我们考虑一下,钱包代表着管理者。只有管理者可以授权要发送的交易。这意味着,如果钱包是调用者(caller),那么管理者必须已授权钱包进行自我调用,对吗?因此,也许我们可以将钱包视为某种伪管理者,让它执行一些可怕的特权之事。

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

Source

希望没有人会用这一版本的钱包去调用一个随机函数,因为这样做确实会很糟。

哎呀:

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

哎呀哎呀哎呀:

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

哎呀哎呀哎呀呀呀呀呀呀:

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

完整的攻击方式可以在这里找到:https://gist.github.com/samczsun/bbb53e50900e53b659bb2fe16ce51a1e

影响

DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞
DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞

幸运的是,Authereum刚刚推出,实际还没有什么资金可偷的。

解决方案

Authereum团队将签名检查重新定位到执行交易之前。
function executeMultipleAuthKeyMetaTransactions(bytes[] memory _transactions,uint256 _gasPrice,uint256 _gasOverhead,address _feeTokenAddress,uint256 _feeTokenRate,bytes memory _transactionMessageHashSignature)publicreturns (bytes[] memory){uint256 _startGas = gasleft();

// Hash the parametersbytes32 _transactionMessageHash = keccak256(abi.encode(address(this),msg.sig,getChainId(),nonce,_transactions,_gasPrice,_gasOverhead,_feeTokenAddress,_feeTokenRate)).toEthSignedMessageHash();

// Validate the signer// NOTE: This must be done prior to the _atomicExecuteMultipleMetaTransactions() call for security purposes_validateAuthKeyMetaTransactionSigs(_transactionMessageHash, _transactionMessageHashSignature);

(, bytes[] memory _returnValues) = _atomicExecuteMultipleMetaTransactions(_transactions,_gasPrice,_gasOverhead,_feeTokenAddress,_feeTokenRate);

if (_shouldRefund(_transactions)) { _issueRefund(_startGas, _gasPrice, _gasOverhead, _feeTokenAddress, _feeTokenRate);}

return _returnValues;}

进一步阅读:
  1. Parity钱包是如何被盗的
  2. Authereum团队的披露

以上便是樱花区块链给大家分享的关于「DeFi又出幺蛾子了?以太坊智能钱包应用Authereum被曝致命漏洞」http://www.0797jjw.cn/qkljs/jishu_25797.html的相关信息了,希望能帮助到大家,更多区块链相关内容,敬请关注樱花区块链!

猜你喜欢

全球稳定币与金融稳定

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

原文地址: