關於 Parity 多簽錢包賬戶凍結解釋
Parity 多簽錢包合約再次發現重大漏洞,這是繼七月份黑客攻擊後又一新事件。不過此次漏洞並沒有發生黑客盜幣事件,漏洞導致使用 Parity 多簽錢包的用戶賬戶被凍結,此次漏洞只涉及使用 Parity 多簽錢包合約的用戶,imToken 用戶不受影響。
事件快速回顧
問題最開始從 GitHub 的一個 issue 問題開始,結果演變成一個區塊鏈歷史上的一個慘案。GitHub 用戶 devops199 在 Parity 項目開啟了一個 issue #6995說:「任何人都可以殺掉你的合約」,該用戶聲稱,他不小心殺掉: 0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4 合約 ( 調用合約的記錄:https://etherscan.io/tx/0x47f7cff7a5e671884629c93b368cb18f58a993f4b19c2a53a8662e3f1482f690#internal ) 。
該用戶調用了合約的 initWallet 方法 ,使自己成為合約的所有者。獲得所有權後,他就殺掉該合約。
賬戶凍結的具體原因
initWallet 方法的漏洞在今年 7 月份就被發現,攻擊者利用該漏洞獲取了多簽錢包合約的控制權,盜走了約 153000 ETH。Parity 已經修復這個漏洞,為了保護 initWallet 方法,添加了一個修飾符,確保合約部署過程中只能調用一次,如果攻擊者試圖多次調用 initWallet 方法都會被拒絕。但是現在有人又發現了新漏洞,該用戶不是在多簽錢包的合約調用 initWallet 方法,而是調用了多簽錢包引用 library 合約的 initWallet 方法。之所以可以調用 initWallet 方法,因為 library 合約沒有被初始化過,變數 only_uninitialized 沒有被設置過。
使用 Parity 客戶端部署一個多簽錢包合約時,會使用 Parity 提供的智能合約模板。這個智能合約模板使用 delegateCall 方法調用上面提到的 library 合約地址。由於這個合約被 devops199 殺掉,多簽錢包合約就變得無法使用,因為他們所有的邏輯都依賴於這個 library 合約。基本上,使用 Parity 客戶端部署多簽錢包合約都將受到影響 ,賬戶被凍結無法轉賬。
社區反應和進展
- Parity 官方公布多簽錢包合約漏洞,2017 年 7 月 20 日之後部署多簽錢包的用戶將受到影響,並承諾會短期內發布更新
- 非官方的統計,151 個合約地址受影響,共計 513743 ETH 被凍結,PolkaDot、iconomi、musiconomi 都受到影響
- PolkaDot 官方承認,他們的多簽錢包被凍結
最後
事件目前還沒有定論,我們會繼續關注事態的發展,但相信以太坊社區會找到解決方案來拯救被凍結的資金。
相關參考:
https://blog.springrole.com/parity-multi-sig-wallets-funds-frozen-explained-768ac072763c
https://blog.zeppelinos.org/parity-wallet-hack-reloaded/
推薦閱讀:
※面向區塊鏈開發
※6. 羅素——一架自由的無人機
※比特幣,萊特幣,以太坊,以太經典,BCH,Dash, XRP價格分析(77)--1/17/2018
※imToken iOS 1.0.6 正式上線!
※3月第二周產品進度
TAG:区块链Blockchain | 以太坊 | imtoken |