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

E’ stata trovata una vulnerabilità nella gestione delle stringhe in Fiddle e DL. A questa vulnerabilità è stato assegnato l’identificativo CVE-2015-7551.

Dettagli

E’ stato trovata una vulnerabilità nella gestione delle stringhe in Fiddle e DL. Questo problema è stato originariamente riportato e corretto con il codice CVE-2009-5147 in DL, ma è riapparso dopo che DL è stato re-implementato utilizzando Fiddle e libffi.

E, sempre riguardo DL, la vulnerabilità CVE-2009-5147 è stata risolta in Ruby 1.9.1, ma non negli altri branch, quindi tutte le versioni (eccetto Ruby 1.9.1) sono ancora vulnerabili.

Un esempio del codice che causa il problema:

handle = Fiddle::Handle.new(dangerous_user_input)

O:

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

Tutti gli utenti che stanno utilizzando una versione ancora senza fix dovrebbero aggiornarla o usare un workaround.

Versioni afflitte

  • Tutte le versioni patch di Ruby 1.9.2 e Ruby 1.9.3 (DL e Fiddle).
  • Tutte le versioni patch di Ruby 2.0.0 e precedenti al patchlevel 648 (DL e Fiddle).
  • Tutte le versioni di Ruby 2.1 precedenti a Ruby 2.1.8 (DL e Fiddle).
  • Tutte le versioni di Ruby 2.2 precedenti a Ruby 2.2.4 (Fiddle).
  • Ruby 2.3.0 preview 1 e preview 2 (Fiddle).
  • Tutte le versioni precedenti alla revisione del trunk 53153 (Fiddle).

Workaround

Se non è possibile aggiornare, il seguente codice può essere utilizzato per risolvere il problema in 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

Se si utilizza DL si suggerisce di utilizzare Fiddle al suo posto.

Credits

Grazie a Christian Hofstaedtler zeha@debian.org per aver riportato il problema!

Storia

  • Originariamente pubblicato il 2015-12-16 12:00:00 UTC