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

Autor: Armonth | El viernes 25 de mayo del 2007 @ 17:51.

Actualización: si bien la solución abajo indicada arregla el problema, Ryan ha hecho un Changeset más completo para la rama en desarrollo con múltiples attribute_escape() e int(). No recomiendo aplicar los cambios tal cual están ahí ya que son para la rama de desarrollo y hay que saber qué tocar (aparte de que son 35 cambios y tiene tela).

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 malas es que la vulnerabilidad afecta a todas las versiones. Los ficheros afectados son wp-admin/post-new.php, wp-admin/page-new.php y wp-admin/user-edit.php.

En Buayacorp han puesto un DIFF pero si no queremos complicarnos leyendo código la solución se puede resumir, en los ficheros wp-admin/edit-form-advanced.php y wp-admin/edit-page-form.php buscad la línea que pone:

<div><input type="text" name="post_title" size="30" tabindex="1" value="<?php echo $post->post_title; ?>" id="title" /></div>

Y cambiadla por:

<div><input type="text" name="post_title" size="30" tabindex="1" value="<?php echo attribute_escape($post->post_title); ?>" id="title" /></div>

En realidad sólo cambia el contenido de value="" envolviendo $post->post_title con attribute_escape().

Luego, en el fichero wp-admin/user-edit.php, buscad la línea:

<input type="hidden" name="wp_http_referer" value="<?php echo wp_specialchars($wp_http_referer); ?>" />

Y cambiadla por:

<input type="hidden" name="wp_http_referer" value="<?php echo clean_url($wp_http_referer); ?>" />

Aquí como veis lo que cambia es wp_specialchars por clean_url.

Nota importante: en la rama 2.0.x no aparece la función wp_http_referer en wp-admin/user-edit.php por lo que, en principio, sólo hay que editar los dos primeros ficheros.

Comentarios