WordPress, XSS y CSRF – Parte 1

Puesto que ya está disponible la Release Candidate 2 de WordPress 2.1.3 y 2.0.10, paso a comentar, como lo había prometido, los detalles del fallo de seguridad que afecta a todas las versiones menores a las que liberaron hoy (me parece que se salvan los que corren PHP como CGI, los que estén usando la alternativa de solución que propuse, los que tengan activo el módulo mod_security o PATH_INFO deshabilitado en sus servidores Web).

Este problema se origina por el valor que puede llegar a tener $_SERVER['PHP_SELF'] debido a que ésta es fácilmente manipulable por el cliente, tal como se puede apreciar en el caso menéame o uno de los ejercicios que mi buen amigo Braulio puso cuando todavía estaba en Cusco.

Repasando un poco el comportamiento de esta variable, tomaremos como base el siguiente código:

php:
<?php
// php_self.php
header('Content-type: text/plain');

echo $_SERVER['PHP_SELF']."\n";
echo $_SERVER["PATH_INFO"]."\n";

?>

Si alguien intenta invocar a nuestro script de la siguiente manera: /php_self.php/<xss>, entonces lo que se envía al navegador es lo siguiente:

code:
/php_self.php/<xss>
/<xss>

En WordPress, existe un sólo lugar* en el que se envía directamente el contenido de esta variable al navegador, ésta se encuentra en la función get_pagenum_link de wp-admin/link-template.php.

php:
$index = $_SERVER['PHP_SELF'];
$index = preg_replace('|^'. $home_root . '|', '', $index);
$index = preg_replace('|^/+|', '', $index);

Una vez identificado el punto débil, para conseguir ejecutar javascript usando este problema, depende de la estructura que hayan definido para las URL, por ejemplo una instalación normal (versión 2.1.3 RC1) es muy probable que sea afectada.

En la siguiente entrega viene la parte más interesante de este bug, es muy probable que lo ponga como ejercicio para la siguiente semana 😉 , mientras tanto, los que tienen blogs basados en WordPress, vayan actualizando sus versiones.

*: si alguien encuentra más, puede ayudar reportándolo a través de la página de incidencias de WordPress.

5 Replies to “WordPress, XSS y CSRF – Parte 1”

  1. Una duda que tengo con esto del XSS (que ademas aun no se del todo lo que es). ¿Que se puede hacer con estas vulnerabilidades ademas de las alertas con js?

  2. Depende del sitio afectado, pero entre entre otras cosas permite el robo de cookies, saltar la protección contra ataques de tipo CSRF, facilita los ataques phishing, se puede redirigir a los usuarios a páginas nada confiables, permitiría inclusive aprovechar las vulnerabilidades para distribuir o realizar ciertas acciones, etc, etc. Puedes visitar la siguiente dirección para que leas un poco más de las cosas que se pueden hacer http://sla.ckers.org/forum/read.php?3,3843

    En la próxima entrega posiblemente ponga un ejemplo práctico de XSS/CSRF que permite sobreescribir archivos en una instalación vulnerable de WordPress 😉

    Saludos

Comments are closed.