節點可能容易受到惡意 SOCKS 伺服器的緩衝區溢位攻擊。修復程式於 2017 年 11 月 6 日在 Bitcoin Core 版本 0.15.1 中發布。

技術細節

CVE-2017-18350 是一個緩衝區溢位漏洞,它允許惡意 SOCKS 代理伺服器在具有有號 char 型態的系統(包括常見的 32 位元和 64 位元 x86 PC)上覆寫程式堆疊。

該漏洞在 60a87bce873 (SOCKS5 support) 中引入,並於 2012 年 8 月 27 日首次在 Bitcoin Core v0.7.0rc1 中發布。修復程式隱藏在 d90a00eabed (“Improve and document SOCKS code”) 中,於 2017 年 11 月 6 日在 v0.15.1 中發布。

要受到影響,節點必須首先被設定為使用這樣的惡意代理。請注意,在不安全的網路(例如網際網路)上使用任何代理都可能是一個漏洞,因為連線可能被攔截用於此類目的。

在節點的連線請求後,惡意代理將回應一個與請求不同的目標網域名稱的確認。通常這個確認完全被忽略,但如果長度使用高位元(即,長度 128-255(含)),它將被易受影響的版本解釋為負數。當負數傳遞給 recv() 系統呼叫以讀取網域名稱時,它會轉換回無號/正數,但以更寬的大小(通常是 32 位元),導致實際上無限讀取到 256 位元組虛擬堆疊緩衝區內及之外。

為了修復此漏洞,虛擬緩衝區被更改為明確的無號資料型態,避免與負數之間的轉換。

歸屬

感謝 practicalswift 發現並提供漏洞的初始修復程式,以及 Wladimir J. van der Laan 提供修復程式的偽裝版本以及對風險程式碼的一般清理。

時間表

  • 2012-04-01:在 PR #1141 中引入漏洞。
  • 2012-05-08:漏洞合併到 master git 儲存庫。
  • 2012-08-27:漏洞在 v0.7.0rc1 中發布。
  • 2012-09-17:漏洞在 v0.7.0 中發布。
  • 2017-09-21:practicalswift 向安全團隊披露漏洞。
  • 2017-09-23:Wladimir 開啟 PR #11397 以悄悄修復漏洞。
  • 2017-09-27:修復程式合併到 master git 儲存庫。
  • 2017-10-18:修復程式合併到 0.15 git 儲存庫。
  • 2017-11-04:修復程式在 v0.15.1rc1 中發布。
  • 2017-11-09:修復程式在 v0.15.1 中發布。
  • 2019-06-22:向 bitcoin-dev ML 披露漏洞存在。
  • 2019-11-08:向 bitcoin-dev ML 披露漏洞細節。