CVE-2015-7551: Unsafe tainted string usage in Fiddle and DL

Existe una vulnerabilidad del tipo “unsafe tainted string usage” en Fiddle y DL. Esta vulnerabilidad se la ha asignado el identificador CVE CVE-2015-7551.

Detalles

Existe una vulnerabilidad del tipo “unsafe tainted string usage” en Fiddle y DL. Esta vulnerabilidad fue reportada y corregida originalmente con CVE-2009-5147 en DL, pero reapareció después que DL fue reimplementado utilizando Fiddle y libffi.

DL, CVE-2009-5147 fue corregido en Ruby 1.9.1, pero no corregido en otros branches, asi que los rubies que integran DL, menos Ruby 1.9.1, son vulnerables.

Algunos ejemplos de código impactado:

handle = Fiddle::Handle.new(dangerous_user_input)

O:

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

Todos los usuarios que están utilizando una versión afectada deben actualizarla o utilizar una de las soluciones inmediatamente.

Versiones Afectadas

  • Todos los releases patch de Ruby 1.9.2 y Ruby 1.9.3 (DL y Fiddle).
  • Todos los releases patch de Ruby 2.0.0 anterior a Ruby 2.0.0 patchlevel 648 (DL and Fiddle).
  • Todas las versiones de Ruby 2.1 anterior a Ruby 2.1.8 (DL y Fiddle).
  • Todas las versiones de Ruby 2.2 anterior a Ruby 2.2.4 (Fiddle).
  • Ruby 2.3.0 preview 1 y preview 2 (Fiddle).
  • Anterior a trunk revision 53153 (Fiddle).

Soluciones

Si no puedes actualizar, el siguiente monkey patch puede ser aplicado como una solución para 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

Si estás utilizando DL, utiliza Fiddle mejor.

Creditos

¡Gracias a Christian Hofstaedtler zeha@debian.org por reportar esta vulnerabilidad!

Historial

  • Originalmente publicado el 2015-12-16 12:00:00 UTC