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() 函數決定。subjectAltName 的 dNSName 使用了 sprintf() ,這對於空位元組來說是不安全的。如果 subjectAltName 等於 'www.ruby-lang.org\0.example.com' 的話,OpenSSL::SSL.verify_certificate_identity 把 subjectAltName 誤判為 '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.1 發布
Ruby 4.0.1 已經發布了。
由 k0kubun 發表於 2026-01-13
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