Ruby / RoR

Syndicate content
Aktuelle Meldungen zum Thema Ruby und Ruby on Rails (RoR).
Updated: 3 hours 20 min ago

Ruby 1.9.3-p429 veröffentlicht

Di, 2013-05-14 17:00

Ruby 1.9.3-p429 ist soeben veröffentlicht worden. Die vor einigen Stunden veröffentlichte Version p426 hatte auf manchen Plattformen Kompilierprobleme. Verwenden Sie daher bitte diese neue Version p429.

Dieser Release beinhaltet einen Sicherheitsfix für DL / Fiddle.

Einige kleine Buxfixes sind ebenfalls enthalten.

Siehe Tickets und ChangeLog für weitere Informationen.

Download Danksagung

Viele Committer, Tester und Nutzer, die Probleme gemeldet haben, halfen mir bei der Veröffentlichung dieser Version. Vielen Dank an alle.

Ruby 2.0.0-p195 veröffentlicht

Di, 2013-05-14 13:00

Ruby 2.0.0-p195 wurde veröffentlicht. Dies ist der erste Patchlevel-Release von Ruby 2.0.0.

Diese Version beinhaltet einen Sicherheitsfix für DL / Fiddle.

Sie enthält außerdem viele Bugfixes, einige Optimierungen sowie Verbesserungen in der Dokumentation.

Downloads Änderungen

Die wichtigsten Änderungen sind unten aufgelistet. Siehe das ChangeLog oder die Tickets für weitere Informationen.

Vielen Dank an alle Committer und Mitwirkende.

Core - prepend #7841 Module#prepend now detect cyclic prepend. #7843 removing prepended methods causes exceptions. #8357 Module#prepend breaks Module's comparison operators. #7983 Module#prepend can't override Fixnum's operator methods. #8005 methods made private/protected after definition become uncallable on prepended class. #8025 Module#included_modules include classes when prepended. Core - keyword arguments #7922 unnamed keyword rest argument cause SyntaxError. #7942 support define method only receive keyword arguments without paren. #8008 fix a bug in super with keyword arguments. #8236 fix a treatment of rest arguments and keyword arguments through `super'. #8260 non-symbol key should not treated as keyword arguments. Core - refinements #7925 fix a bug of refinements with a method call super in a block. Core - GC #8092 improve accuracy of GC.stat[:heap_live_num] #8146 avoid unnecessary heap growth. #8145 fix unlimited memory growth with large values of RUBY_FREE_MIN. Core - Regexp #7972 Regexp POSIX space class is location sensitive. #7974 Regexp case-insensitive group doesn't work. #8023 Regexp lookbehind assertion fails with /m mode enabled #8001 Regexp \Z matches where it shouldn't Core - other #8063 fix a potential memory violation and avoid abort on the environment _FORTIFY_SOURCE=2 (ex. Ubuntu). #8175 ARGF#skip doesn't work as documented. #8069 File.expand_path('something', '~') now support home path on Windows. #8220 fix a Segmentation fault when defined? (). #8367 fix a regression in defined?(super). #8283 Dir.glob doesn't recurse hidden directories. #8165 fix a bug of multiple require with non-ascii file path. #8290 fix an incompatible String#inspect behavior with NUL character. #8360 fix a Segmentation fault of Thread#join(Float::INFINITY) on some platforms. RubyGems Bundled RubyGems version is updated to 2.0.2+ #7698 fix an rubygems' incompatibility about installation of extension libraries. #8019 fix a bug of gem list --remote doesn't work. Libraries #7911 File.fnmatch with US-ASCII pattern and UTF-8 path raise an exception. #8240 fix a bug about OpenSSL::SSL::SSLSocket breaks other connections or files on GC. #8183 CGI.unescapeHTML can't decode Numeric Character References with uppercase (&#Xnnnn). Build/Platform specific #7830 fix build failure with compiler warning. #7950 fix a build failure on mswin/VC with --with-static-linked-ext.

Umgehung von Object#taint in DL und Fiddle in Ruby (CVE-2013-2065)

Di, 2013-05-14 13:00

Es besteht eine Verwundbarkeit in DL und Fiddle in Ruby, wodurch als “tainted” eingestufte Strings unabhängig von dem durch Ruby festgelegten $SAFE-Level in Systemaufrufen verwendet werden können. Dieser Schwachstelle wurde die CVE-Nummer CVE-2013-2065 zugewiesen.

Auswirkungen

Native Funktionen, die mittels DL oder Fiddle von Ruby aus aufgerufen werden, überprüfen nicht den “taint”-Status der ihnen übergebenen Objekte. Dies kann dazu führen, dass als “tainted” eingestufte Objekte als Eingabe akzeptiert werden anstatt eine SecurityError-Ausnahme auszulösen.

Betroffener Code für DL kann etwa folgendermaßen aussehen:

def my_function(user_input) handle = DL.dlopen(nil) sys_cfunc = DL::CFunc.new(handle['system'], DL::TYPE_INT, 'system') sys = DL::Function.new(sys_cfunc, [DL::TYPE_VOIDP]) sys.call user_input end $SAFE = 1 my_function "uname -rs".taint

Betroffener Code für Fiddle kann etwa folgendermaßen aussehen:

def my_function(user_input) handle = DL.dlopen(nil) sys = Fiddle::Function.new(handle['system'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT) sys.call user_input end $SAFE = 1 my_function "uname -rs".taint

Alle Nutzer eines betroffenen Releases sollten dringend aktualisieren oder einen der folgenden Workarounds anwenden.

Beachten Sie, dass dies eine Verwendung von numerischen Memory-Offsets als Pointer-Werte nicht verhindert. Zahlen können nicht als “tainted” markiert werden, so dass Code, der einen numerischen Memory-Offset übergibt, nicht überprüft werden kann. Zum Beispiel:

def my_function(input) handle = DL.dlopen(nil) sys = Fiddle::Function.new(handle['system'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT) sys.call input end $SAFE = 1 user_input = "uname -rs".taint my_function DL::CPtr[user_input].to_i

In diesem Fall wird der Speicherort übergeben und der “taint”-Status des Objekts kann von DL / Fiddle nicht festgestellt werden. Überprüfen Sie in solchen Fällen den “taint”-Status der Benutzereingabe vor der Übergabe des Speicherorts:

user_input = "uname -rs".taint raise if $SAFE >= 1 && user_input.tainted? my_function DL::CPtr[user_input].to_i Workarounds

Wenn ein Upgrade von Ruby nicht möglich ist, kann der folgende Monkeypatch als Notlösung verwendet werden:

class Fiddle::Function alias :old_call :call def call(*args) if $SAFE >= 1 && args.any? { |x| x.tainted? } raise SecurityError, "tainted parameter not allowed" end old_call(*args) end end Betroffene Versionen
  • Alle Versionen von Ruby 1.9 vor Ruby 1.9.3 patchlevel 426
  • Alle Versionen von Ruby 2.0 vor Ruby 2.0.0 patchlevel 195
  • Alle Trunk-Versionen vor Revision 40728

Ruby 1.8 ist nicht betroffen.

Danksagung

Vielen Dank an Vit Ondruch für das Melden dieses Problems.

Verlauf
  • Erstmals veröffentlicht am 2013-05-14 13:00:00 (UTC)