XSS эксплоит RDoc документации, сгенерированной rdoc (CVE-2013-0256)

RDoc документация, сгенерированная rdoc встроенным в ruby, уязвима к XSS эксплоиту. Всем пользователям ruby рекомендуется обновиться до последних версий, которые включают исправления безопасности RDoc. Если вы публикуете RDoc документацию, сгенерированную rdoc, вам рекомендуется применить патч для документации, или перегенерировать ее с исправленным RDoc.

Влияние

RDoc документация, сгенерированная rdoc 2.3.0 по rdoc 3.12 и пререлизы до rdoc 4.0.0.preview2.1, уязвима к XSS эксплоиту. Эксплоит может привести к раскрытию cookies третьей стороне.

Детали

Эксплоит находится в darkfish.js, который копируется из установочной директории RDoc в сгенеренную документацию.

RDoc – это статический инструмент для генерации документации. Патчить саму библиотеку поможет только для последующих генераций документации. Нужно в первую очередь применить патч к документации, которая опубликована.

Решение

Пожалуйста, примените следующий патч к rdoc документации. Если он применен игнорируя пробелы, этот патч должен исправить все затронутые версии:

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

И если вы используете ruby 1.9, пожалуйста обновитесь до ruby-1.9.3 patchlevel 385. Если вы используете ruby 2.0.0 rc1 или не последний транк, пожалуйста, обновитесь до ruby 2.0.0 rc2 или транк ревизии 39102 и позже. Вы также можете обновить сам RDoc до RDoc 3.12.1 или RDoc 4.0.0.rc.2.

Affected versions

  • Все версии ruby 1.9 до ruby 1.9.3 patchlevel 383
  • Все версии ruby 2.0 до ruby 2.0.0 rc2 или до транка ревизии 39102

Благодарности

Этот эксплоит обнаружил Evgeny Ermakov <corwmh@gmail.com>.

Этой уязвимости назначен CVE идентификатор CVE-2013-0256.

История

  • Оригинал опубликован 2013-02-06 13:30:00 (UTC)