OpenSSL 繞過主機名檢查的風險(CVE-2013-4073)

nahi 發表於 2013-06-27
翻譯: Juanito Fatas

這是 Ruby SSL 客戶端的一個風險,允許攻擊者得到證書授權機構發放的證書,來欺騙 SSL 伺服器,執行中間人攻擊。

這個風險的 CVE 識別號為 CVE-2013-4073。

總結

Ruby 的 SSL 客戶端實作了主機名檢查機制,但此機制不能夠妥善處理含有空位元組(null bytes)主機名的證書。

風險細節

OpenSSL::SSL.verify_certificate_identity 給 Ruby SSL 客戶端實作了,由 RFC2818 所定義的伺服器身分檢查。但並沒有妥善處理好由 subjectAltName X509 文件裡所述的,含有空位元組的主機名。

lib/openssl/ssl.rb 目前的程式碼使用 OpenSSL::X509::Extension#value ,從 subjectAltName 來取得識別名稱(identity)。而 Extension#value 的回傳值由 OpenSSL X509V3_EXT_print() 函數決定。subjectAltNamedNSName 使用了 sprintf() ,這對於空位元組來說是不安全的。如果 subjectAltName 等於 'www.ruby-lang.org\0.example.com' 的話,OpenSSL::SSL.verify_certificate_identitysubjectAltName 誤判為 'www.ruby-lang.org'。則 Extension#value 會回傳 'www.ruby-lang.org'

當一個由 SSL 客戶端信賴的證書授權機構,發放證書給 subjectAltName 含有空位元組的申請時,攻擊者可使用來自 'www.ruby-lang.org\0.example.com' 的證書,得到證書騙過 'www.ruby-lang.org',在 Ruby 客戶端與 SSL 伺服器做中間人攻擊。

受影響版本

  • ruby 1.8.7 patchlevel 374 先前所有的 1.8 版本。
  • ruby 1.9.3 patchlevel 448 先前所有的 1.9 版本。
  • ruby 2.0.0 patchlevel 247 先前所有的 2.0 版本。
  • trunk revision 41671 之前所有的 Ruby。

解決辦法

建議所有使用者升級至 Ruby 2.0.0-p247、1.9.3-p448 或 1.8.7-p374。

表揚

這個風險由 William (B.J.) Snow Orvis 發現,並經由來自 iSEC Partners 的 David Thiel 與 security@ruby-lang.org 協調下修復。

歷史

  • 最初發表於 2013-06-27 11:00:00 (UTC)

最新消息

Ruby 4.0.0 發布

我們很高興宣布 Ruby 4.0.0 發布了。 Ruby 4.0 導入了 Ruby::Box 和 “ZJIT”,以及許多改進功能。

naruse 發表於 2025-12-25

Ruby 文件的新樣貌

繼重新設計 ruby-lang.org 之後,我們還有更多消息來慶祝 Ruby 誕生 30 週年: docs.ruby-lang.org 採用了 Aliki—RDoc’s 的全新預設主題。

Stan Lo 發表於 2025-12-23

重新設計我們的網站形象

我們很興奮地宣布網站進行了全面改版。這次更新的設計方案是由 Taeko Akatsuka 負責創作。

Hiroshi SHIBATA 發表於 2025-12-22

更多新聞...