以太坊(Ethereum)原訂於明天1月17日的重大系統性升級「君士坦丁堡」再度的推遲。主網正式升級原本是預計今年11月左右執行。
在其中五項升級案的其中一項 EIP-1283中發現了一個嚴重的漏洞後,此次升級剛剛決議再度推遲。
就在硬分叉將於區塊高度7,080,000的前一刻,智能合約審計公司ChainSecurity週二表示,如果實施以太坊改進提案 EIP-1283,可能會為攻擊者提供竊取用戶資金的代碼漏洞。
在電話會議上,以太坊開發商以及客戶和其他運營網絡項目的開發商同意在評估問題時達成共識推遲硬分叉。參與者包括以太坊創造者 Vitalik Buterin、開發人員 Hudson Jameson、Nick Johnson和 Evan Van Ness,以及 Parity發布經理 Afri Schoedon等。星期五以太坊開發者電話會議期間,將決定新的分叉日期。
這個漏洞被稱為可重入攻擊(reentrancy-attack),它允許攻擊者多次」重新進入」同一個函數,而無需更新用戶的「事務狀態」。在這種情況下,攻擊者基本上可以「永久性撤出資金」,區塊鏈分析公司Amberdata的技術長Joanes Espanol在之前的採訪中表示:
「想像一下,我的合約有一個函數可以調用另一個合約……如果我是一個駭客,我能夠在前一個功能仍在執行的情況下觸發功能後,提取資金。」
經動區詢問具有豐富的以太坊智能合約開發經驗、Turing Chain的創辦人暨執行長Jeff Hu,他解釋這樣的重入攻擊的過程示例為:
1. 攻擊者創建攻擊合約(Attacker Contract)A,呼叫目標合約 B其中某一個特定函數F1,
2. 隨後函數 F1將首先調用外部邏輯(例如:轉錢給調用者 /調用收錢者的收錢函數F2),之後再做內部資料更新(例如:扣除目標存在該合約的錢量)。
3. 攻擊者合約 A的收錢函數 F2將再次調用目標合約 B的函數 F1。
4. 重複2、3步驟,直至Gas用光。
這類似於此前造成 ETH網絡分裂出ETC的漏洞,2016年The DAO攻擊事件中發現的漏洞之一。
該漏洞是由ChainSecurity發布的文章所指出:在君士坦丁堡之前,網絡上的存儲(Storage)的操作將耗費5,000 Gas,遠超過使用「轉移(transfer)」或「發送(send)」功能調用合約時發送所需的手續費2,300 Gas。
但是,如果EIP-1283實施升級後,存儲操作手續費僅需耗費200個 Gas。 攻擊者所創建合約可以使用2300 Gas成功操縱有漏洞合約的變數。
「以往因為調用合約的 Transfer 與 Send 都有2300 Gas的「單筆交易燃料上限」,避免透過一個 Contract 持續連環呼叫,或是在一個簡易的轉帳之中執行太多有風險的邏輯。白話就是,你想透過 transfer/send轉帳,我就讓你只能轉帳,不許多做。」Jeff 繼續說道,
由於新分叉優化的「資訊存入」的 Gas費用從5000降至200,也讓2300這個門檻『防不到』SSTORE在轉帳中的使用。
此次升級定名為「君士坦丁堡」,以拜占庭帝國的首都命名,是大都會(Metropolis)三部分升級中的其中一部分。此前君士坦丁已經在去年推遲過一次,去動區先前報導,該升級代碼在10月13日先於測試網路「Ropsten」發佈的過程中,在程式碼中發現了一些錯誤,導致開發人員決定延遲升級的時程。
也因此,此次原訂於明天的升級,已是第二次的被推遲舉行。
?相關報導?
以太坊挖礦新算法 ProgPoW批准!ASIC比起GPU的優勢 – 將從2x的產能降至1.2x
以太坊核心Meeting#49:君士坦丁硬分叉暫定1月16日, 難度炸彈「將顯現」, ProgPoW不完整
《BlockTempo動區動趨》LINE官方號開通囉~立即加入獲得第一手區塊鏈、加密貨幣新聞報導!