CVE-2015-7551: Unsichere Behandlung von tainted Strings in Fiddle und DL

Es gibt ein Sicherheitsproblem mit dem Gebrauch von „tainted“ Strings in Fiddle und DL. Der Sicherheitslücke wurde die CVE-Nummer CVE-2015-7551 zugewiesen.

Details

Fiddle und DL sind anfällig für eine Sicherheitslücke beim Umgang mit „tainted“ Strings. Das Problem wurde ursprünglich mit CVE-2009-5147 gegen DL gemeldet und behoben, trat jedoch nach Reimplementation von DL auf der Basis von Fiddle und libffi wieder auf.

Im Bezug auf DL wurde CVE-2009-5147 mit Ruby 1.9.1 behoben, nicht jedoch in anderen Zweigen, weshalb alle Rubies mit mitgeliefertem DL außer Ruby 1.9.1 noch immer von dem Problem betroffen sind.

Betroffener Code sieht so aus:

handle = Fiddle::Handle.new(dangerous_user_input)

Oder so:

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

Alle Nutzer einer betroffenen Veröffentlichung sollten umgehend aktualisieren oder einen der Workarounds anwenden.

Betroffene Versionen

  • Alle Patch-Veröffentlichungen von Ruby 1.9.2 und Ruby 1.9.3 (DL und Fiddle)
  • Alle Patch-Veröffentlichungen von Ruby 2.0.0 vor Ruby 2.0.0 patchlevel 648 (DL und Fiddle)
  • Alle Versionen von Ruby 2.1 vor Ruby 2.1.8 (DL und Fiddle)
  • Alle Versionen von Ruby 2.2 vor Ruby 2.2.4 (Fiddle)
  • Ruby 2.3.0 preview 1 und preview 2 (Fiddle)
  • Trunk vor Revision 53153 (Fiddle).

Workarounds

Wenn Sie nicht aktualisieren können, besteht die Möglichkeit, als Workaround den folgenden Monkeypatch auf Fiddle anzuwenden:

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

Wenn Sie DL nutzen, wechseln Sie stattdessen zu Fiddle.

Danksagung

Danke an Christian Hofstaedtler zeha@debian.org für das Melden des Problems!

Historie

  • Erstmals veröffentlicht am 2015-12-16 12:00:00 UTC