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

usa 发表于 2015-12-16
翻译: Delton Ding

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 首次发布

最新消息

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 采用了全新的、RDoc 的 Aliki 默认主题。

Stan Lo 发表于 2025-12-23

重新设计我们的网站标识

我们激动地宣布网站已经全面改版。此次更新的设计方案由 Taeko Akatsuka (赤塚妙子) 创作。

Hiroshi SHIBATA 发表于 2025-12-22

Ruby 4.0.0 preview3 已发布

我们很高兴地宣布 Ruby 4.0.0-preview3 已发布。 Ruby 4.0 引入了 Ruby::Box 和 “ZJIT”,以及若干改进。

naruse 发表于 2025-12-18

更多新闻...