Parity多重签名函数库自杀漏洞

前言

2017年7月19号发生的 Parity 多重签名合约delegatecall漏洞(Parity Multisig Wallet delegatecall)事件之后,2017年11月6号再次发生了 Parity 多重签名函数库自杀漏洞事件(Parity Multi-Sig Library Self-Destruct)事件。此次漏洞影响587个钱包,包含了 513,774.16 Ether($152 million)。

一名叫做 devops199 的开发者能够让自己成为函数库合约的 owner,然后有调用自杀功能,使得合约所有功能、通证均失效。之后,devops199 在 github 提交了 issue,说出了一句经典的话 I accidentally killed it.

◆ 分析

Parity Multisig Wallet delegatecall 漏洞之后,官方修复了这个漏洞,

地址在:

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

https://github.com/paritytech/parity/pull/6103/files。

修复方法就是在init*函数加上only_uninitialized modifier 判断,当 m_numOwners 0 时这个函数就不能使用。

但是仍然有缺陷,因为函数库没有正确初始化,被利用方式如下:

① 所有的 Parity Multisig wallets 都使用单一的函数库:

https://etherscan.io/address/0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4#code 但是,这个函数库合约没有正确地初始化。

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

恶意行为在:

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

③ **然后获取调用kill函数**

恶意行为在:

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

④ 导致两个结果:

1)所有用户的以太币都被冻结。

2)很多使用这个钱包的合约引入位置都写死,导致很多合约不能运作,如在 Polkadot 里第 451 行就将钱包合约地址写死:

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

因为所有逻辑判断都在钱包合约中,所以其他相依于钱包合约的现在以太币都被冻结,且看起来无法提款:

所有受影响的合约如下:

https://pastebin.com/ejakDR1f

◆防范

这次的事件 Parity 说明有两种预防方式。一种是智能合约不该有自杀的函数,这样即便黑客获得了权限也无法把合约移除。一种是有新的建议及改善时,要及时更新线上的合约或是找寻线上合约可能的漏洞,因为在这问题发生前,就有网友提议在合约部署时要自动呼叫 initWallet(pr) 加強合约的安全。

◆本地复现

git clone

https://github.com/Martin2877/parity_kill_example.git # 下载复现代码

npm install # 安装组件

npm run start-block # 启动tesrRPC

# 打开新窗口

npm start # 运行测试代码

不成功的情况:

不成功,原因是因为安装的testrpc为6.0.3,改用6.0.1可以解决。可以 npm list --depth 0 查看安装的包的情况。

◆资料

事件脉络:

https://medium.com/crypt-bytes-tech/parity-wallet-security-alert-vulnerability-in-the-parity-wallet-service-contract-1506486c4160

其它相关资料:

https://medium.com/chain-cloud-company-blog/parity-multisig-hack-again-b46771eaa838

https://paritytech.io/a-postmortem-on-the-parity-multi-sig-library-self-destruct/

https://paritytech.io/security-alert-2/

https://github.com/paritytech/parity/issues/6995

◆团队介绍

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

*本文作者:BUGX.IO-Tri0nes,转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

微信提现免费!申请微信免费提现的教程

今天,微信突然宣布:微信提现免费,不过,要享受微信提现免费的功能,需要满足一些条件,比如:需要申请具有微信免费提现的收款二维码,通过普通的微信收款码收款之后,提...

3.7K6
来自专栏Netkiller

Hyperledger Fabric 超级账本的硬伤

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

97029
来自专栏一场梦

看片要当心了,不良网站不只掏空你,还可能掏空你的电脑!

1624
来自专栏圆方圆学院精选

【许晓笛】EOS 系统架构图解

相信关心 EOS 系统的同学肯定见过下面这张蓝图。对,目前只是一个蓝图,而且以 BM 的尿性,肯定在心理已经把这张图改的面目全非了(比如图中的 eosd 早就改...

1253
来自专栏申龙斌的程序人生

用API在Bigone上提交一笔订单

想写一个交易所的量化程序,第一步得利用API建立一笔订单,比如,我想在EOS-BTC市场中创建一笔卖单,价格为0.002985,数量为1个EOS。

2127
来自专栏醒者呆

区块链3.0:拥抱EOS

EOS是当下最火的区块链技术,被社会广泛看好为下一代区块链3.0。不同于以太坊的学习,EOS的主语言是C++,本文作为EOS研究的首篇文章,重点介绍EOS的创...

1.3K12
来自专栏梦里茶室

【Chromium中文文档】Web安全研究

保护浏览器不受扩展的缺陷影响 保护浏览器不受扩展的缺陷影响 Adam Barth, Adrienne Porter Felt, Prateek Saxena, ...

1955
来自专栏圆方圆学院精选

【刘文彬】区块链3.0:拥抱EOS

原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/eos-intro.html

1654
来自专栏极客编程

以太坊预言机与智能合约开发

什么是以太坊预言机?智能合约就其性质而言,能够运行各种算法并可以存储和查询数据。预言机可以监控区块链事件并能将监控结果发回智能合约。因为每个节点每次都需要大量计...

1343
来自专栏友弟技术工作室

EOS.IO 技术白皮书背景区块链应用的要求共识算法 (DPOS)帐户应用程序的确定性并行执行Token 模型与资源使用治理脚本 & 虚拟机跨链通信总结

草案:2017 年 6 月 26 日 (@dayzh (https://steemit.com/@dayzh))

1132

扫码关注云+社区

领取腾讯云代金券