Todos aquellos que estén usando el plugin de estadísticas de WordPress.com, es recomendable que desactiven cuanto antes el mismo, porque incluye una vulnerabilidad bastante grave que permite a un atacante remoto obtener las credenciales de cualquier usuario conociendo sólo su ID.
Detalles de la vulnerabilidad
El mencionado plugin registra dos nuevos métodos en el servidor XMLRPC que todo blog con WordPress tiene, éstos son wpStats.get_posts
y wpStats.get_blog
-- internamente implementados por stats_get_posts
y stats_get_blog
respectivamente. El que más nos interesa en este caso, es la función stats_get_posts
:
[php start=1]function stats_get_posts( $args ) {
list( $post_ids ) = $args;
$r = 'include=' . join(',', $post_ids);
$posts = get_posts( $r );
$_posts = array();
foreach ( $post_ids as $post_id )
$_posts[$post_id] = stats_get_post($post_id);
return $_posts;
}[/php]
A simple vista se puede ver que no existe ningún tipo de validación en los parámetros que esa función recibe, y como mencioné en ocasiones anteriores, usar esta forma (query string) para pasar parámetros a otras funciones es bastante peligroso, porque permite a un atacante modificar a su gusto los valores.
Por ejemplo, si hacemos que $post_ids
contenga algo como:
El valor de la variable $r
será:
Haciendo unos cambios en el valor de $post_ids
se recupera toda la lista de usuarios con sus respectivas contraseñas en MD5, pero para obtener estos valores todavía hay que tener en cuenta las líneas 6, 8 y 9.
Dejo intencionalmente incompleta la prueba de concepto y exploit como reto para los que le gustan estas cosas y como medida de protección de los script kiddies.