CVE-2015-7551: Уязвимост във Fiddle и DL

Същестува проблем с опасни стрингове във Fiddle и DL. На уязвимостта е назначен CVE идентификатор CVE-2015-7551.

Детайли

Същестува уязвимост във Fiddle и DL, първоначално докладвана и поправена с CVE-2009-5147 в DL, но появила се отново след като DL е реимплментиран чрез Fiddle и libffi.

CVE-2009-5147 е поправен в Ruby 1.9.1, но не и в другите branch-ове и затова всички версии на Ruby с вграден DL са уязвими.

Пример за уязвим код;

handle = Fiddle::Handle.new(dangerous_user_input)

Или:

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

Всички потребители на уязвените версии трябва веднага да ъпдейтнат или да ползват workardound.

Уязвими версии

  • Всички рилийзи на Ruby 1.9.2 и Ruby 1.9.3 (DL и Fiddle).
  • Всички пачнати рилийзи на Ruby 2.0.0 преди 2.0.0-p648 (DL и Fiddle).
  • Всички версии на Ruby 2.1 преди 2.1.8 (DL и Fiddle).
  • Всички версии на Ruby 2.2 преди Ruby 2.2.4 (Fiddle).
  • Ruby 2.3.0 preview 1 и preview 2 (Fiddle).
  • преди trunk revision 53153 (Fiddle).

Workaround-и

Ако не можете да ъпгрейднете Ruby, използвайте следният monkey patch:

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