以太坊(ETH)重大漏洞有望修復

ETH
公鑰快取投毒驗證者安全漏洞修復共識客戶端GlamsterdamGloas分叉以太坊
21 小時前來源: u.today
以太坊(ETH)重大漏洞有望修復

根據 GitHub 上的一份拉取請求,以太坊的共識客戶端之一已合併了一項修復,針對的是驗證者公鑰快取投毒攻擊。該補丁解決了 Gloas 分叉附近的一個漏洞,該漏洞可能導致部分節點因全域公鑰快取中的錯誤而拒絕有效簽名。

Gloas 是即將到來的 Glamsterdam 升級的共識層部分。

三筆存款,兩條鏈

問題出在一個機制上,客戶端將驗證者公鑰及其索引儲存在全域快取中。

從技術上講,已經最終確定的存款應該在每條鏈上產生相同的驗證者,不過在分叉邊界處情況則不同。

Article image
來源:Github

攻擊者需要在分叉前恰好有三筆待處理的存款。第一筆是對現有驗證者的大額充值。另外兩筆是新密鑰:A 帶有建構者憑證,B 帶有常規驗證者憑證。

在規範鏈上,該充值消耗了餘額變動額度,因此 A 和 B 在分叉後才被處理。A 成為建構者,B 取得下一個驗證者索引。

在攻擊者的側鏈上,被充值的驗證者在分叉前被罰沒,其存款被跳過。這導致 A 被更早處理,實質上取得了 B 的索引。

有缺陷的快取假設兩條鏈會產生相同的驗證者,並將 A 的密鑰全域匯入。

在分叉時,受影響的節點會拒絕 B 在規範鏈上的所有有效簽名並分叉出去。

實際上,該攻擊有些複雜,因為它需要在恰當的時機發生罰沒並需要一條側鏈,因此不太可能意外發生。

修復改變了什麼?

根據該 PR,修復方案是僅在密鑰的啟動資格 epoch 最終確定後,才將其加入全域公鑰快取。

一個新的 HeadPubkeys 結構還結合了頭部狀態和全域快取中的密鑰,因此即使鏈在沒有新區塊的情況下最終確定,節點也不會遺漏密鑰。

其他共識客戶端是否有類似問題尚待確認。換句話說,Glamsterdam 越臨近,開發者就必須捕捉越多分叉邊界附近的邊緣情況。