Pembuatan File Tak Sengaja yang Disebabkan Memasukkan Karakter NUL Ilegal (CVE-2012-4522)

Sebuah kerentanan ditemukan bahwa routine untuk membuat file dapat membuat file lain secara tak sengaja dengan memasukkan NUL di path file secara strategis. Kerentanan ini telah dilaporkan sebagai CVE-2012-4522.

Rincian

Ruby dapat menangani pola binary apapun sebagai String, termasuk berbagai macam karakter NUL. Di lain pihak, sistem operasi dan library lain tidak selalu begitu. Mereka biasanya memperlakukan NUL sebagai penanda akhir String. Jadi, untuk meng-interface mereka dengan Ruby, karakter NUL seharusnya dihindari dengan tepat.

Tetapi, method seperti IO#open tidak mengecek nama file yang diberikan, dan hanya memberikan string nama file itu ke routine di layer lebih bawah. Hal ini menyebabkan pembuatan file tak sengaja seperti berikut:

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

Versi yang Terkena Dampak

  • Semua Ruby 1.9.3 sebelum patchlevel 286
  • Semua branch development Ruby 2.0.0 sebelum revisi r37163

Solusi

Harap meng-upgrade ke salah satu versi terbaru.

Ucapan Terima Kasih

Masalah ini dilaporkan oleh Peter Bex.

Update

  • Memperbaiki kesalahan eja pada tanggal 2012-10-19 14:54:49 JST.
  • Menambah sebutan nomor CVE pada tanggal 2012-10-16 08:58:51 JST.
  • Awalnya diterbitkan pada tanggal 2012-10-12 19:19:55 JST.