浮點數解析存在溢出風險 (CVE-2013-4164)

Ruby 直譯器解析浮點數存在溢出風險。

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

風險細節

每當字串轉成浮點數時,刻意捏造的字串可造成 heap 溢出。這可導致有心人透過記憶體區段錯誤 (Segment Fault) 來進行分散式阻斷服務攻擊,可能隨意執行任何程式碼。任何將未知來源字串轉成浮點數(特別是從 JSON)都可能存在 此風險。

存在風險的程式碼看起來像是:

untrusted_data.to_f

但任何從外部資料將字串轉成浮點數的程式碼都存在此風險,像是:

JSON.parse untrusted_data

注意,這個 bug 與 CVE-2009-0689 類似。

所有使用受影響版本的使用者,應儘快升級至已修正的版本。

受影響版本

  • Ruby 1.8 patchlevel 230 之後所有的 1.8 版本。
  • Ruby 1.9 patchlevel 484 之前所有的 1.9 版本。
  • Ruby 2.0 patchlevel 353 之前所有的 2.0 版本。
  • trunk revision 43780 之前所有的 Ruby。

解決辦法

建議所有使用者升級至 Ruby 1.9.3-p484、2.0.0-p353 或是 Ruby 2.1.0 preview2。

請注意 Ruby 1.8 系列版本已過時,不會發佈新的修正版。Ruby 1.8 版本的使用者建議儘快升級, 不再維護的版本,我們無法保證不會有更多的安全性問題存在。

表揚

感謝 Charlie Somerville 回報這個風險!

歷史

  • 最初發佈於 2013-11-22 04:00:00 UTC
  • 二次修訂於 2013-11-22 06:46:00 UTC
  • 三次修訂於 2013-11-22 22:46:00 UTC
  • 四次修訂於 2013-12-10 12:09:38 UTC