CVE-2015-7551: Fiddle 與 DL 不安全的字串用途瑕疵存在安全性風險

Fiddle 與 DL 擴充模組不安全的字串用途瑕疵存在安全性風險。本安全風險識別號已經被指派為 CVE-2015-7551

細節

Fiddle 與 DL 函式庫發現了不安全的字串用途瑕疵所產生的安全性風險。本問題初見於 DL 的 CVE-2009-5147,但在 DL 重新使用 Fiddle 和 libffi 實作後重新發現。

CVE-2009-5147 曾在 Ruby 1.9.1 版本修復,但其它分支並未修復,Ruby 1.9 系列除了 1.9.1 之外,有打包 DL 的版本都存在此安全性風險。

受影響的程式碼看起來像是:

handle = Fiddle::Handle.new(dangerous_user_input)

或:

handle = Fiddle::Handle.new(some_library)
function_pointer = handle[dangerous_user_input]

所有正使用受影響版本的使用者,應儘速升級或立即使用下述暫時解決方案。

受影響版本

  • 1.9.2 與 1.9.3 所有補丁版本(DL 和 Fiddle)
  • 所有 Ruby 2.0.0 補丁號在 648 之前的版本(DL 和 Fiddle)
  • 所有 Ruby 2.1 在 2.1.8 之前的版本(DL 和 Fiddle)
  • 所有 Ruby 2.2 在 2.2.4 之前的版本(Fiddle)
  • Ruby 2.3.0-preview1 與 2.3.0-preview2(Fiddle)
  • 主幹 revision 53153 之前的版本(Fiddle)

暫時解決方法

若無法升級,下面的補丁可以套用到 Fiddle:

class Fiddle::Handle
  alias :old_initialize :initialize

  def initialize file, *args
    raise SecurityError if file.tainted? && $SAFE > 0
    old_initialize file, *args
  end

  alias :sym :[]
  alias :old_call :[]

  def [] fun
    raise SecurityError if fun.tainted? && $SAFE > 0
    old_call fun
  end
end

若是使用 DL,請改用 Fiddle。

致謝

感謝 Christian Hofstaedtler zeha@debian.org 回報此問題!

歷史

  • 初次發佈於 2015-12-16 12:00:00 UTC