SQL Injection en el plugin de estadísticas de WordPress.com

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:

code:
5&meta_key=%27) UNION ALL SELECT 1,2,3,4,5,user_login,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,user_pass,23,24,25,26,27,28 FROM wp_users/*&meta_value=1

El valor de la variable $r será:

code:
$r = 'include=5&meta_key=%27) UNION ALL SELECT 1,2,3,4,5,user_login,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,user_pass,23,24,25,26,27,28 FROM wp_users/*&meta_value=1'

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.

10 Replies to “SQL Injection en el plugin de estadísticas de WordPress.com”

  1. bueno acabo de verlo rapidito, el problema es que los IDs de los post no se comprobaban si eran valores enteros con lo cual podrias hacer tu inyeccion sql...

    Asi en vistazos rapido no veo como explotarlo directamente, pero bueno el chiste es que ya se mitigo, nuevamente gracias por tomar tu tiempo que tu si no descansas XDD

    Saludos

  2. @g30rg3_x: tienes razón sobre los IDs. Sobre como explotarlo, me parece que publiqué algo similar en [1] -- el problema básicamente se relaciona a lo que discutimos en [2]. 🙂

    @DragoN: también estaba probando el plugin ayer, al no poder activarlo, me puse a ver el código y encontré esa vulnerabilidad, que es muy parecida a otras que anteriormente había reportado en WordPress.

    Saludos

    [1] http://www.buayacorp.com/archivos/wordpress-mas-vulnerabilidades-de-inyeccion-de-sql/
    [2] http://www.buayacorp.com/archivos/php-uso-adecuado-de-parse_str/

Comments are closed.