CVE-2015-7551: Fiddle 与 DL 中使用了不安全的字符串调用

Fiddle 和 DL 的实现中使用了一个易受攻击的不安全的字符串调用。CVE-2015-7551 对此风险提供了识别号。

详情

Fiddle 和 DL 的实现中使用了一个易受攻击的不安全的字符串调用。最早的报告和修复出现在有关于 DL 的 CVE-2009-5147 中,但在 DL 使用 Fiddle 和 libffi 重构后再次出现。

另外,关于 DL,CVE-2009-5147 于 Ruby 1.9.1 分支上修复。但其他分支上都没有修复,除了 Ruby 1.9.1 以外的所有版本的 DL 都存在风险。

受到影响的代码形如:

handle = Fiddle::Handle.new(dangerous_user_input)

或:

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

所有的用户应立即升级版本或使用下述的应急方法。

受到影响的版本

  • 所有 Ruby 1.9.2 和 Ruby 1.9.3 的补丁版本(DL 和 Fiddle)。
  • 所有 Ruby 2.0.0 patchlevel 648 前 Ruby 2.0.0 的补丁版本(DL 和 Fiddle)。
  • 所有 Ruby 2.1.8 前 Ruby 2.1 的版本(DL 和 Fiddle)。
  • 所有 Ruby 2.2.4 前的 Ruby 2.2 版本(仅 Fiddle)。
  • Ruby 2.3.0 preview 1 和 preview 2(仅 Fiddle)。
  • trunk revision 53153 前的开发版本(仅 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 首次发布