http://www.umut.cn

Parity多重签名钱包被盗事件之技能阐明

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

Snip20170720_74

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

Snip20170720_76

黑客资金账户:

Snip20170720_77

留意上图中的传入的进攻者地点: 0xb3764761e297d6f121e79c32a65829cd1ddb4d32,以及initWallet的合约ABI: 0xe46dcfeb,(注ABI计较要领:https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)

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

进攻进程技能阐明还原:

第一步:成为合约的owner

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

原始陈诉: https://blog.parity.io/security-alert-high-2/

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

假如您利用受影响的Parity钱包合约,请确保将所有资金当即移动到差异的钱包。

Snip20170720_72

源码地点位于:

Snip20170720_78

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

第二步: 转账, 剩下的工作就很清晰了,通过挪用execute函数转账到黑客的地点:

办理方案:

通过上面的阐明可以看到,焦点问题在于越权的函数挪用, 合约接口必需经心设计和明晰界说会见权限,可能更进一步说,合约的设计必需切合某种成熟的模式,可能尺度,合约代码陈设前最好交由专业的机构举办评审。不然,一个不起眼的代码就会让你丢掉所有的钱。

Snip20170720_79

Snip20170720_80

Snip20170720_73

Snip20170720_75

Parity Multisig电子钱包版本1.5+的裂痕被发明,使得进攻者从三个高安详的多重签名合约中窃取到高出15万ETH(约3000万美元)。

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

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