不当な NUL 文字挿入によって意図しないファイルが生成されうる脆弱性について (CVE-2012-4522)

ファイル名の途中に NUL 文字を挿入することにより、意図しない名前のファイルを生成しうる脆弱性が発見されました。 この問題は CVE-2012-4522 として報告されているものです。

詳細

Ruby は NUL 文字を通常の文字と同様に String の一部として取り扱うことができますが、一方で、OS や各種ライブラリでは NUL 文字は文字列の終端として取り扱われるケースが多々あります。 従って、Ruby インタプリタと外部のライブラリ等とのやり取りに際しては、都度、NUL 文字を適切に取り扱う必要が発生します。 しかし、IO#open などのファイルオープン系メソッドにおいて、NUL 文字を処理しないままファイル名をライブラリに引き渡していたため、以下の例のように意図しない名前のファイルを生成することが可能となっていました。

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 p286 以前のバージョン
  • Ruby trunk r37163 以前のリビジョン

解決策

新しいバージョンにアップグレードして下さい。

クレジット

この脆弱性は Peter Bex 氏により報告されました。

更新履歴

  • 2012-10-16 08:56:39 (JST) CVE について追記
  • 2012-10-12 19:13:15 (JST) 初版