Parity钱包的多重签名钱包出现bug,导致约930000个以太坊被冻结。Parity开发团队为Polkadot项目团队。目前,

本次事件分析:

事情起因:Github用户devops199打开了#6995——“任何人都可以删除合约。”然后该用户声称他意外删除了合约。0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4.

该用户使用的是名为initWallet的合约内初始化功能,该功能能够使用户获得Parity钱包所有权,从而引发自杀式销毁钱包。

initWallet在今年7月份就被爆出存在漏洞。其表现为,当一个新的多重签名钱包(技术上为一种智能合约)被安置时,代码在Parity’s Github上以智能合约的模式呈现,用户可以因此获得多重签名钱包的所有权。而使用智能合约模板,就出现了delegateCall删除功能 。由于该智能合约被用户删除,导致所有依赖于智能合约的多重签名钱包都无法使用。所以从本质上讲,现在多重钱包中没有任何资金可以被转移出去。

发展与影响

Github列出了所有受影响的项目地址:

根据统计,被冻结的以太坊超过50万个,价值约为1亿5千万美金。

2. PolkaDot已承认多重签名钱包账户被冻结,且不可能解冻。

3. 金牛财经提醒投资者,如果有使用的交易所采用Parity作为第三方钱包,建议尽快提现。

4. Polkadot共有30万以太坊被冻结,但并非全部。根据数据,Polkadot可能还有钱包含约14W以太坊,足以支持团队进行开发。

更多细节还有待披露,目前金牛财经网还在跟进中,尽请留意最新消息。

7月20日漏洞事件回顾

Parity Multisig电子钱包版本1.5+的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过15万ETH(约3000万美元)。

原始报告: https://blog.parity.io/security-alert-high-2/

黑客资金账户

https://etherscan.io/address/0xb3764761e297d6f121e79c32a65829cd1ddb4d32#internaltx

可以看到,一共盗取了153,037 个ETH,受到影响的合约代码均为Parity的创始人Gavin Wood写的Multi-Sig库代码:

源码地址位于:

https://github.com/paritytech/parity/blob/4d08e7b0aec46443bf26547b17d10cb302672835/js/src/contracts/snippets/enhanced-wallet.sol

攻击过程技术分析还原:

第一步:成为合约的owner

通过往这个合约地址转账一个value = 0 ,msg.data.length > 0 的交易, 执行到_walletLibrary.delegatecall的分支,该函数能无条件的调用合约内的任何一个函数,黑客调用了一个叫做 initWallet的函数:

这个函数再次调用initMultiowned函数:

不幸的是,initWallet没有检查以防止攻击者在合同初始化后调用到initMultiowned, 这个函数使得这个合约的所有者被改为攻击者,相当于从unix中获得了root权限。

注意上图中的传入的攻击者地址: 0xb3764761e297d6f121e79c32a65829cd1ddb4d32,以及initWallet的合约ABI: 0xe46dcfeb,(注ABI计算方法:https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)

第二步: 转账, 剩下的事情就很清晰了,通过调用execute函数转账到黑客的地址:

第一个参数: address to= 0xb3764761e297d6f121e79c32a65829cd1ddb4d32, 转账额度116779808c03e4140000是为以Wei为单位的的eth,即 82189000000000000000000,可以通过如下的代码获得具体数值。