完整披露
CVE-2018-17144 的修復程式於 9 月 18 日在 Bitcoin Core 版本 0.16.3 和 0.17.0rc4 中發布,包括阻斷服務元件和關鍵的通膨漏洞。它最初於 9 月 17 日僅作為阻斷服務錯誤報告給多位從事 Bitcoin Core 工作的開發者,以及支援其他加密貨幣的專案,包括 ABC 和 Unlimited,但我們很快確定該問題也是一個通膨漏洞,具有相同的根本原因和修復方法。
為了鼓勵快速升級,決定立即修補並披露較不嚴重的阻斷服務漏洞,同時聯繫礦工、企業和其他受影響的系統,同時延遲發布完整問題以給系統時間升級。9 月 20 日,一個公共論壇中的貼文報告了完整影響,儘管它很快被撤回,但該聲稱被進一步傳播。
目前我們相信超過一半的 Bitcoin 算力已升級到已修補的節點。我們不知道有任何試圖利用此漏洞的嘗試。
然而,受影響的使用者升級並應用最新的修補程式仍然至關重要,以確保不會發生大規模重組、挖掘無效區塊或接受無效交易的可能性。
技術細節
在 Bitcoin Core 0.14 中,新增了一個最佳化(Bitcoin Core PR #9049),它避免了在初始預中繼區塊驗證期間進行昂貴的檢查,該檢查是在 2012 年新增的(PR #443),用於檢查單個交易中的多個輸入沒有花費相同的輸入兩次。雖然 UTXO 更新邏輯有足夠的知識來檢查在 0.14 中沒有違反這種情況,但它僅在完整性檢查斷言中這樣做,而不是使用完整的錯誤處理(然而,它確實在 0.8 之前完全處理了這種情況兩次)。
因此,在 Bitcoin Core 0.14.X 中,任何在區塊內的單個交易中重複花費交易輸出的嘗試都將導致斷言失敗和崩潰,正如最初報告的那樣。
在 Bitcoin Core 0.15 中,作為更大的重新設計的一部分,以簡化未花費交易輸出追蹤並更正資源耗盡攻擊,斷言被巧妙地更改了。它不是斷言被標記為已花費的輸出先前是未花費的,而是僅斷言它存在。
因此,在 Bitcoin Core 0.15.X、0.16.0、0.16.1 和 0.16.2 中,任何在區塊內的單個交易中重複花費交易輸出的嘗試,其中被花費的輸出是在同一區塊中建立的,將發生相同的斷言失敗(如 0.16.3 修補程式中包含的測試案例所示)。然而,如果被重複花費的輸出是在前一個區塊中建立的,CCoin 映射中仍將保留一個條目,設定了 DIRTY 標誌並被標記為已花費,不會導致這樣的斷言。這可能允許礦工增加 Bitcoin 的供應量,因為他們將能夠聲稱被花費的價值兩次。
時間表
2018 年 9 月 17 日的時間表:(所有時間均為 UTC)
- 14:57 匿名報告者向以下人員報告崩潰錯誤:Bitcoin Core 的 Pieter Wuille、Greg Maxwell、Wladimir Van Der Laan,Bitcoin ABC 的 deadalnix 和 Bitcoin Unlimited 的 sickpig。
- 15:15 Greg Maxwell 與 Cory Fields、Suhas Daftuar、Alex Morcos 和 Matt Corallo 分享原始報告
- 17:47 Matt Corallo 識別通膨錯誤
- 19:15 Matt Corallo 首次嘗試聯繫 slushpool CEO 以建立溝通線路快速應用修補程式
- 19:29 Greg Maxwell 為展示通膨漏洞的測試案例的雜湊加上時間戳記(a47344b7dceddff6c6cc1c7e97f1588d99e6dba706011b6ccc2e615b88fe4350)
- 20:15 John Newbery 和 James O’Beirne 被告知該漏洞,以便他們可以協助警告公司即將發布的 DoS 漏洞修補程式
- 20:30 Matt Corallo 與 slushpool CTO 和 CEO 交談,並分享修補程式並披露阻斷服務
- 20:48 slushpool 確認已升級
- 21:08 向 Bitcoin ABC 傳送警告,修補程式將在 22:00 前公開發布
- 21:30(大約)回覆原始報告者並確認
- 21:57 Bitcoin Core PR 14247 發布,包含修補程式和展示阻斷服務錯誤的測試
- 21:58 Bitcoin ABC 發布其修補程式
- 22:07 諮詢電子郵件與 Bitcoin Core PR 和修補程式的連結傳送給 Optech 成員等
- 23:21 Bitcoin Core 版本 0.17.0rc4 標記
2018 年 9 月 18 日:
- 00:24 Bitcoin Core 版本 0.16.3 標記
- 20:44 Bitcoin Core 發布二進位檔案和發布公告可用
- 21:47 Bitcointalk 和 reddit 有公開橫幅敦促人們升級
2018 年 9 月 19 日:
- 14:06 郵件列表由 Pieter Wuille 分發額外訊息敦促人們升級
2018 年 9 月 20 日:
- 19:50 David Jaenson 獨立發現該漏洞,並向 Bitcoin Core 安全聯絡電子郵件報告。
