首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Parity 多重签名合约 delegatecall 漏洞回顾

Hash Incubator参与投资和孵化的BUGX.IO是一家致力于区块链领域的安全公司。核心团队组建于2014年,BUGX.IO在区块链生态安全,行业解决方案,安全建设,红蓝对抗等方面有深厚积累与过硬专业素养。

———— /事件始末/ ————

2017年7月19日,Parity Multisig 电子钱包合约被爆出的漏洞,使得攻击者从三个高安全的多重签名合约中窃取到超过15万以太坊(约3000万美元)。

———— /漏洞原理/ ————

delegatecall的含义:

.delegatecall(...) returns (bool):issue low-level DELEGATECALL, returns false on failure, forwards all available gas, adjustable。

call与delegatecall的功能类似,区别仅在于后者仅使用给定地址的代码,其它信息则使用当前合约(如存储,余额等等)。注意delegatecall是危险函数,他可以完全操作当前合约的状态。

黑客通过 delegatecall 调用 initWallet 函数, initWallet 没有检查以防止攻击者在合同初始化后调用到 initMultiowned ,漏洞使得黑客能通过 library 库函数,让自己成为多个 Parity 钱包的新主人,然后调用转账函数把钱转走。

———— /具体分析/ ————

1、 initWallet 函数可以改变合约的 owner 。

// line 216

// constructor - just pass on the owner array to the multiowned and // the limit to daylimit

function initWallet(address[] _owners, uint _required, uint _daylimit) {

initDaylimit(_daylimit);

initMultiowned(_owners, _required);

}

2、 代码里使用了 delegatecall() 函数,导致所有 public 函数对所有人可见。包括 initWallet 函数。而且 initWallet 函数也没有作任何防护措施。

// line 424

function() payable {

// just being sent some cash?

if (msg.value > 0)

Deposit(msg.sender, msg.value);

_walletLibrary.delegatecall(msg.data);

}

3、 攻击者先获取owner权限,将调用函数的指令放在Data中。

行为地址:

https://etherscan.io/tx/0x9dbf0326a03a2a3719c27be4fa69aacc9857fd231a8d9dcaede4bb083def75ec

4、 然后执行execute获取所有 funds

行为地址:

———— /防范方法/ ————

谨慎使用 d elegatecall() 函数。

明确函数可见性,默认情况下为public类型,为防止外部调用函数被内部调用应使用 external。

加强权限控制。敏感函数应设置 onlyOwner 等修饰器。

———— /资料/ ————

WalletLibrary 合约地址:

https://etherscan.io/address/0xa657491c1e7f16adb39b9b60e87bbb8d93988bc3#code

The Parity Wallet Hack Explained:

https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7

BUGX.IO是一家致力于区块链领域的安全公司。核心团队组建于2014年,我们在区块链生态安全、行业解决方案、安全建设、红蓝对抗等方面有深厚积累与过硬专业素养。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180719A0TUWB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券