XSS-Exploit für RDoc-Dokumentation (CVE-2013-0256)

Die von dem in Ruby enthaltenen rdoc erzeugten Dokumentationen sind anfällig für einen XSS-Exploit, daher wird es allen Ruby-Nutzern empfohlen, auf eine neuere Version von Ruby umzusteigen, die eine korrigierte Version von RDoc enthält. Wenn Sie von RDoc erzeugte Dokumentationen veröffentlichen, sollten Sie diese patchen oder mit dem korrigierten RDoc neu generieren.

Auswirkungen

Die Dokumentationen, die von den RDoc-Versionen 2.3.0 über 3.12 bis hin zu 4.0.0.preview2.1 erzeugt werden, sind für einen XSS-Exploit anfällig, der Cookies an Dritte weitergeben kann.

Details

Der Exploit befindet sich in darkfish.js, welches aus der RDoc-Installation in die generierte Dokumentation kopiert wird. Weil RDoc ein Tool zur Generierung statischer Dokumentation ist, reicht es nicht aus, lediglich die Library zu patchen — die gehostete Dokumentation benötigt den folgenden Patch.

Lösung

Wenden Sie den folgenden Patch auf die generierte RDoc-Dokumentation an. Wenn Sie dabei den Whitespace ignorieren, wird dieser Patch alle betroffenen Versionen berichtigen:

diff --git darkfish.js darkfish.js
index 4be722f..f26fd45 100644
--- darkfish.js
+++ darkfish.js
@@ -109,13 +109,15 @@ function hookSearch() {
 function highlightTarget( anchor ) {
   console.debug( "Highlighting target '%s'.", anchor );

-  $("a[name=" + anchor + "]").each( function() {
-    if ( !$(this).parent().parent().hasClass('target-section') ) {
-      console.debug( "Wrapping the target-section" );
-      $('div.method-detail').unwrap( 'div.target-section' );
-      $(this).parent().wrap( '<div class="target-section"></div>' );
-    } else {
-      console.debug( "Already wrapped." );
+  $("a[name]").each( function() {
+    if ( $(this).attr("name") == anchor ) {
+      if ( !$(this).parent().parent().hasClass('target-section') ) {
+        console.debug( "Wrapping the target-section" );
+        $('div.method-detail').unwrap( 'div.target-section' );
+        $(this).parent().wrap( '<div class="target-section"></div>' );
+      } else {
+        console.debug( "Already wrapped." );
+      }
     }
   });
 };

Wenn Sie Ruby 1.9 benutzen, aktualisieren Sie bitte auch auf ruby-1.9.3-p385. Nutzen Sie Ruby 2.0.0-rc1 oder einen früheren Trunk, aktualisieren Sie bitte auf 2.0-0-rc2 oder die Trunk-Revision 39102 oder später. Alternativ können Sie auch RDoc selbst über RubyGems auf die Version 3.12.1 oder 4.0.0.rc.2 aktualisieren.

Betroffene Versionen

  • Alle Versionen von Ruby 1.9 vor 1.9.3-p383
  • Alle Versionen von Ruby 2 vor 2.0.0-rc2 oder vor Trunk-Revision 39102

Danksagung

Dieser Exploit wurde von Evgeny Ermakov <corwmh@gmail.com> gefunden und bekam die CVE-Nummer CVE-2013-0256 zugewiesen.

Geschichte

  • Erstmals veröffentlicht: 2013-02-06 13:30:00 (UTC)