Vulnerabilità XSS della documentazione RDoc generata da rdoc (CVE-2013-0256)

La documentazione di RDoc generata dal rdoc incluso in Ruby è vulnerabile ad attacchi XSS (cross-site scripting).

Raccomandiamo a tutti gli utilizzatori di Ruby di aggiornare la propria versione di Ruby alla nuova versione, che include una versione di RDoc che corregge il problema.

Se pubblichi documentazione RDoc generata tramite rdoc, ti raccomandiamo di applicare una patch per la documentazione o di rigenerarla con la nuova versione di RDoc.

Impatto

La documentazione di RDoc generata tramite rdoc (versioni da 2.3.0 a 3.12, e prerelease fino a rdoc 4.0.0.preview2.1) sono vulnerabili ad attacchi XSS. La vulnerabilità può portare alla pubblicazione di cookie a terze parti.

Details

La vulnerabilità è in darkfish.js, che è copiato dalla directory dove RDoc è installato, alla directory dove viene generata la documentazione

RDoc è uno strumento per la generazione di documentazione statica. Applicare una patch alla libreria è insufficiente per correggere questa vulnerabilità. Coloro che pubblicano documentazione devono applicare la seguente patch.

Soluzione

Applica la patch seguente alla documentazione rdoc. Se applicata ignorando gli spazi, la patch correggerà tutte le versioni interessate dalla vulnerabilità:

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." );
+      }
     }
   });
 };

Inoltre, se usi Ruby 1.9, ti raccomandiamo di aggiornare a ruby-1.9.3 patchlevel 385. Se stai usando Ruby 2.0.0 rc1 o una versione precedente del trunk di Ruby, per favore aggiorna a Ruby 2.0.0 rc2 revisione 39102 o successiva. Puoi anche aggiornare lo stesso RDoc utilizzando RubyGems alla versione 3.12.1 o 4.0.0.rc.2

Versioni soggette alla vulnerabilità

  • Tutte le versioni di Ruby 1.9 precedenti alla versione 1.9.3 patchlevel 383
  • Tutte le versione di Ruby 2.0 precedenti alla versione 2.0.0 rc2 o precedenti alla revisione 39102

Crediti

Questa vulnerabilità è stata scoperta da Evgeny Ermakov <corwmh@gmail.com>.

A questa vulnerabilità è stato assegnato l'identificativo CVE "CVE-2013-0256".

Cronologia

  • Pubblicato per la prima volta il giorno 2013-02-06 alle ore 13:30:00 (UTC)