CVE-2015-7551: Cacat penggunaan string yang tidak aman pada Fiddle dan DL

Ada sebuah kerentanan penggunaan string yang tidak aman pada Fiddle dan DL. Kerentanan ini telah ditetapkan sebagai CVE identifier CVE-2015-7551.

Detail

Ada sebuah kerentanan penggunaan string yang tidak aman pada Fiddle dan DL. Masalah ini semula telah dilaporkan dan diperbaiki CVE-2009-5147 pada DL, namun muncul kembali setelah DL diimplementasikan menggunakan Fiddle dan libffi.

Dan, tentang DL, CVE-2009-5147 telah diperbaiki pada Ruby 1.9.1, namun tidak diperbaiki pada branch lain, sehingga rubies yang dibundel dengan DL kecuali Ruby 1.9.1 masih rentan.

Kode yang terkena imbas tampak seperti ini:

handle = Fiddle::Handle.new(dangerous_user_input)

atau:

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

Semua pengguna yang menggunakan rilis yang terkena imbas ini sebaiknya meng-upgrade atau menggunakan satu dari solusi yang ada segera.

Versi yang terkena imbas

  • Semua rilis patch Ruby 1.9.2 dan Ruby 1.9.3 (DL dan Fiddle).
  • Semua rilis patch Ruby 2.0.0 sebelum Ruby 2.0.0 patchlevel 648 (DL dan Fiddle).
  • Semua versi Ruby 2.1 sebelum Ruby 2.1.8 (DL dan Fiddle).
  • Semua versi Ruby 2.2 sebelum Ruby 2.2.4 (Fiddle).
  • Ruby 2.3.0 preview1 dan preview2 (Fiddle).
  • sebelum perbaikan trunk 53153 (Fiddle).

Solusi

Jika Anda tidak dapat upgrade, monkey patch berikut dapat dipakai sebagai salah satu solusi untuk 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

Jika Anda sedang menggunakan DL, gunakan Fiddle daripada DL.

Pujian

Terima kasih kepada Christian Hofstaedtler zeha@debian.org yang telah melaporkan permasalahan ini!

Riwayat

  • Semula dipublikasikan pada 2015-12-16 12:00:00 UTC