由于插入非法 NUL 字符导致意外文件创建 (CVE-2012-4522)

usa 发布于 2012 年 10 月 12 日

发现一个漏洞,即通过策略性地在文件路径中插入 NUL 字符,文件创建例程可以创建意外的文件。此漏洞被报告为 CVE-2012-4522。

详情

Ruby 可以将任意的二进制模式处理为字符串,包括 NUL 字符。而操作系统和其他库则不然。它们通常将 NUL 字符视为字符串的结束标记。因此,为了与它们进行交互,应该妥善避免 NUL 字符。

然而,像 IO#open 这样的方法并没有检查传递给它们的 filename,而是直接将其传递给底层例程。这导致创建了如下意外的文件:

p File.exists?("foo")      #=> false
open("foo\0bar", "w") { |f| f.puts "hai" }
p File.exists?("foo")      #=> true
p File.exists?("foo\0bar") #=> raises ArgumentError

受影响的版本

  • 所有 Ruby 1.9.3 (补丁级别低于 286)
  • 所有 Ruby 2.0.0 的开发分支 (修订版本号低于 r37163)

解决方案

升级到最新版本。

致谢

此问题由 Peter Bex 报告。

更新

  • 已于 2012-10-19 14:54:49 JST 修复了拼写错误。
  • 已于 2012-10-16 08:58:51 JST 添加了对 CVE 编号的提及。
  • 最初发布于 2012-10-12 19:19:55 JST。

近期新闻

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 的新默认主题,焕然一新。

Stan Lo 发布于 2025 年 12 月 23 日

重新设计我们的网站标识

我们很高兴地宣布对我们的网站进行全面重新设计。此次更新的设计由 Akatsuka Taeko 创作。

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 日

更多新闻...