還記得今年 7 月 Parity 錢包合約被找到漏洞,結果駭客偷走了將近 150,000 個以太幣,會發生是因為智能合約的 callback 裡使用了 delegatecall(msg.data),這個函數會呼叫 data 中的函數並將 msg.sender 設為原呼叫函數的地址,駭客利用這一點呼叫了 initWallet,這時你們可能會以為 Parity 應該有在 initWallet 設置條件阻擋駭客就不能呼叫,結果竟然是沒有!所以駭客就成功並改變合約的擁有者,最後再把以太幣轉走,細節的部分可以看這篇文章。

Parity 也在幾天後修復了這個問題,修復的方式就是在 init* 函數加上 only_uninitialized modifier 判斷,當 m_numOwners > 0 時這個函數就不能使用,這時應該會想說不會再有漏洞了吧,畢竟智能合約能操作以太幣,誰知道……

就在前幾天有人發布了新 issue 說他不小心刪除了錢包的合約,因為只有合約的擁有者可以刪除,那麼他到底怎麼刪除合約?可以看到錢包合約被刪除前共有兩筆交易,第一筆交易呼叫 initWallet 並將合約的擁有者設為自己。

function initWallet(address[] _owners, uint _required, uint _daylimit) only_uninitialized {initDaylimit(_daylimit);initMultiowned(_owners, _required);
}

交易結果:

Function: initWallet(address[] _owners, uint256 _required, uint256 _daylimit)
MethodID: 0xe46dcfeb
[0]:0000000000000000000000000000000000000000000000000000000000000060
[1]:0000000000000000000000000000000000000000000000000000000000000000
[2]:0000000000000000000000000000000000000000000000000000000000000000
[3]:0000000000000000000000000000000000000000000000000000000000000001
[4]:000000000000000000000000ae7168deb525862f4fee37d987a971b385b96952

第二筆交易呼叫了 kill 函數,而 kill 函數呼叫了 suicide (selfdestruct 函數的別稱,功能是將合約程式從區塊鏈移除,並將合約剩餘的以太幣轉給參數的位置),錢包的程式就從區塊鏈上移除了。

function kill(address _to) onlymanyowners(sha3(msg.data)) external {suicide(_to);
}

交易結果:

Function: kill(address _to)
MethodID: 0xcbf0b0c0
[0]:000000000000000000000000ae7168deb525862f4fee37d987a971b385b96952

因為很多使用這個錢包的合約引入位置都寫死導致很多合約不能運作,在 Polkadot 裡第 451 行就將錢包合約地址寫死:

address constant _walletLibrary = 0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4;

因為所有邏輯判斷都在錢包合約中,所以其他相依於錢包合約的現在以太幣都被凍結,且看起來像這樣 (無法提款):

contract Wallet {function () payable {Deposit(...)}
}

Parity 官方還在了解可行的解決方案,如果想查詢自己有沒有被影響可以到這個網站。

如何預防

這次的事件 Parity 說明有兩種預防方式。一種是智能合約不該有自殺的函數,這樣即便黑客獲得了權限也無法把合約移除。一種是有新的建議及改善時,要及時更新線上的合約或是找尋線上合約可能的漏洞,因為在這問題發生前,就有網友提議在合約部屬時要自動呼叫 initWallet(pr) 加強合約的安全。

如何取得凍結的資金

目前沒有其他方式可以取得凍結的資金,只能期待未來有相關的改善建議實作在以太坊,或是以太坊實行硬分叉回復狀態到錢包合約刪除之前。

參考

Security Alert - Parity Technologies
Winter may be coming but the moment you've all been waiting for has finally arrived: Parity Tech is excited to announce…paritytech.io
Parity Wallet Hack 2: Electric Boogaloo
Postmortem: The what, when, and how of the Nov 6th Parity Wallet Hackhackernoon.com

https://paritytech.io/blog/security-is-a-process-a-postmortem-on-the-parity-multi-sig-library-self-destruct.html

原文地址:https://medium.com/taipei-ethereum-meetup/parity-%E9%8C%A2%E5%8C%85%E5%90%88%E7%B4%84%E6%BC%8F%E6%B4%9E-43ed412ebcd2

Parity 錢包合約漏洞相关推荐

  1. 使用Node.js部署智能合約(Smart Contract)

    從智能合約原始檔.編譯.部署,一氣呵成 我想大部分的人應該都是為了寫智能合約(Smart Contract)而選擇使用Ethereum,在開發應用程式(Dapp)時,若能透過程式碼自動部署智能合約,就 ...

  2. 在區塊鏈上建立可更新的智慧合約(二)

    這篇介紹用library的方式來建立可更新的合約邏輯. Library Library是另外一種形式的contract,宣告方式也幾乎一樣: Library libA{}.Library會被部署在鏈上 ...

  3. 在區塊鏈上建立可更新的智慧合約(一)

    由於區塊鏈不可篡改的特性,智慧合約一但部署到區塊鏈上,其執行的邏輯就無法再更改.長期來看,這個重要的特性反而限制了合約的彈性和發展. 接下來要介紹如何設計及部署合約才能讓合約在需要時可以更新.但這裡的 ...

  4. 阿包也是兔娘cosplay全套超清图包合集

    阿包也是兔娘cosplay全套超清图包合集 既然如此, 现在,解决阿包也是兔娘cosplay全套超清图包合集的问题,是非常非常重要的. 所以, 阿包也是兔娘cosplay全套超清图包合集,发生了会如何 ...

  5. 三菱PLC通过CC LINK IE通讯控制2个三菱伺服的测试 程序,里面有JOG HOME,定位,适合你入门参考。包合IO规划,伺候参数,PLC程序。

    三菱PLC通过CC LINK IE通讯控制2个三菱伺服的测试 程序,里面有JOG HOME,定位,适合你入门参考.包合IO规划,伺候参数,PLC程序.

  6. 学计算机专用表情包大全,哈哈哈!设计师专用表情包合集(四)

    本篇文章又给大家带来了设计师专用表情包合集,让你在日常斗图的时所向披靡. 这里还有之前的表情包: 一. 反手就给你一个XX 系列 这一设计师专用的表情包,叫做:反手就给你一个XX 系列.起源于那句俗话 ...

  7. 项目打包打的是什么包_打工人是什么梗 打工人语录 打工人表情包合集来啦

    最近,网络上突然爆了一个词"打工人",预测下估计会成为今年的网络热词."打工人"这个词看字面意思就是打工的人,那为什么会突然火爆呢?打工人是什么梗?小编一起带大 ...

  8. 2023 年 3 月公众号深圳卫健委历史文章无水印封面表情包合集来了

    每个月我都会更新一次公众号深圳卫健委的封面表情包图,无水印,欢迎收藏. 2023 年公众号深圳卫健委历史文章无水印封面表情包合集,分享到网盘了 2022 年公众号深圳卫健委所有历史文章无水印封面表情包 ...

  9. 抓包篡改商品价格漏洞到不要相信任何前台传过来的数据-血的教训致初级程序狗

    前言 一个测试工程师走进了一家酒吧,点了一杯2999元的拉菲,并对酒吧老板说我只付款0.01元,奇葩的是老板还默许了. 问题描述 今天部门内外包的一个项目出现了漏洞,客户说有一个用户下了一个500多的 ...

最新文章

  1. 【学习笔记】超简单的多项式求逆(含全套证明)
  2. 利用Python模拟鼠标操作,一键将GIF文件载入CSDN的Markdown编辑器
  3. oracle 01589,ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
  4. matlab mat文件 太大,MATLAB .mat文件中的开销过大
  5. Android 自定义ViewPager设置屏蔽左右滑动事件
  6. python画雷达图-Python 详解雷达图/蛛网图
  7. iOS 深拷贝、浅拷贝、自定义对象拷贝简介
  8. 2.1 全连接神经网络
  9. Android ViewGroup
  10. 项目经理要提升需求分析的能力
  11. 如何查看CSDN发布的博客和上传的资源?
  12. Wowza 4.3.0安装和使用 并联合海康摄像头(RTSP)实现直播推流
  13. 神经网络有哪些基本功能,常见的神经网络有哪些
  14. 一文详解单目VINS论文与代码解读目录
  15. html文件如何设置为桌面壁纸,怎样把文件里的图片设置为桌面背景时全部是全屏图?最好详细一点的。...
  16. Go语言实现自定义i18n功能
  17. 如何查询专利费减备案
  18. 对于一些常用的R语言的算法包的归纳(修改)
  19. NBA表格_NBA西强东弱有多严重?看科比、詹姆斯和杜兰特对手胜率就知道了
  20. mjpg-streame

热门文章

  1. Android深度探索第四章感想
  2. Matlab cell矩阵处理
  3. 正则化与L0、L1、L2范数略解
  4. [云炬创业基础笔记]第七章创业资源测试5
  5. [云炬python3玩转机器学习]5-4向量化高效运算
  6. 科大星云诗社动态20210910
  7. Python的第一个程序 Hello world
  8. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170406
  9. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(二)
  10. 8K 星!这可能是最适合你的 TensorFlow 教程