
消息,由於以太坊改進提案(EIP 1283)被發現重大安全漏洞,原定於在第7080000 個區塊上進行的君士坦丁堡硬分叉被推遲。Evan Van Ness二級標題Afri Schoedon二級標題
二級標題
漏洞發生了怎麼辦?
關於EIP 1283 漏洞處理,以太坊官方也通過博客表示,推遲君士坦丁堡硬分叉,即不在第7080000 個區塊上分叉,並且發布了相關處理辦法:
對於已經升級同步的節點、礦工、交易所,需要在Geth 或Parity 新版本發布後及時更新版本,新版本預計在博客發布的3~4 個小時內發布。具體的方案如下所示:
Geth 版本:升級到Geth 1.8.21;降級至Geth 1.8.19;如果想保持在Geth 1.8.20,請使用開關'-override.constantinople = 9999999' 無限期推遲君士坦丁堡分叉;
二級標題
二級標題
二級標題
漏洞是什麼?ChainSecurity北京時間今天零點,智能合約審計公司
發布了一份報告,報告指出以太坊君士坦丁堡代碼(EIP 1283)存在漏洞,該漏洞可能導致“重入攻擊”——攻擊相關合約、修改用戶餘額或其他關鍵變量。
為什麼會產生重入攻擊? ChainSecurity 認為,在分叉前一個存儲至少需要5000 gas,遠遠超過使用“transfer”或“send”調用合約時發送的2300 gas ;而在分叉後,一個存儲只需要200 gas,攻擊者可以通過調用一些公共函數,更改所需變量。比如攻擊者可以調用攻擊者合約,只需要花費2300 gas 就可以成功地更改弱勢合約的變量,包括賬戶餘額等。
當然,攻擊要想成功需要一些條件:
必須有一個函數a,在該函數中,“transfer / send”後面緊跟著一個狀態更改操作,這有時是不明顯的;
攻擊者必須有一個能夠訪問函數A 改變狀態的函數B, B 狀態改變會與函數A 發生衝突;
函數B 需要在小於1600 gas 的情況下執行(2300氣費- 700氣話費)。
ChainSecurity 提醒大家,可以從檢查以下幾個方面避免合約被攻擊:
檢查transfer 事件後是否有任何操作。
檢查這些操作是否改變了存儲狀態,最常見的是通過分配一些存儲變量,檢查哪些變量已被修改,做一個列表。
二級標題
二級標題
二級標題
漏洞重演何時休?
這次EIP 1283 出現的重入攻擊,在以太坊的發展史上曾出現多次,屬於頑疾。
“其實這個攻擊方式,在以太坊上早就是赫赫有名了,我不相信以太坊社區沒有考慮到這個問題。”以太坊研究者胡靖宇告訴Odaily 。
重入攻擊影響最大是The DAO 合約漏洞事件。當時黑客利用The DAO 合約漏洞,轉移了價值4 千多萬美元以太幣(ETH)。為了奪回資金,以太坊社區決定進行軟分叉與硬分叉,結果社區內部產生分歧,一部分選擇留在原鏈(現在的ETC),一部分選擇了進入新的分叉鏈(ETH)。
根據胡靖宇所說,以太坊智能合約為了方便一些邏輯操作,留下了“ transfer() 和send() ”這樣一種調用方式,但也給開發者留下了安全隱患。 “但是只要開發者知道有這樣一個安全隱患,在寫代碼的時候多判斷一下邏輯就可以保證安全性了。”