Vulnerabilidad en Menéame
Revisando el código de Meneame (en su última versión del CVS) he encontrado un fallo importante de seguridad que permite suplantar la identidad de cualquier usuario registrado en el portal de forma arbitraria.
El código vulnerable se encuentra en el fichero libs/login.php en la función/constructor UserAuth.
[...]
switch ($userInfo[2]) {
case ‘3′: if (($this->now - $cookietime) > 864000) $cookietime = ‘expired’;
$key = md5($dbuser->user_email.$site_key.$dbusername.$dbuser->user_id.$cookietime);
break;
case ‘2′:
$key = md5($dbuser->user_email.$site_key.$dbusername.$dbuser->user_id);
$cookietime = 0;
break;
default:
md5($site_key.$dbusername.$dbuser->user_id);
$cookietime = 0;
}if ( !$dbuser || !$dbuser->user_id > 0 || $key !== $userInfo[1] || $dbuser->user_level == ‘disabled’ || empty($dbuser->user_validated_date)) {
$this->Logout();
return;
}
[...]
El problema radica en el que el “default” de la estructura “switch” no se asigna la variable $key, por lo que una cookie preparada maliciosamente permite pasar la comprobación de tipos y contenido en la siguiente condición “$key !== $userInfo[1]“, únicamente consiguiendo que $userInfo[1] sea NULL.
Modificando la cookie “mnm_user” para que contenga el usuario víctima y la cookie “mnm_key” el mismo usuario pero codificado en base64, el ataque tiene éxito, ya que al hacer el “explode” de “mnm_key“, todos los elementos del array “$userInfo” quedan a NULL excepto el primero.
Para corregirlo únicamente habría que modificar
md5($site_key.$dbusername.$dbuser->user_id);
por
$key = md5($site_key.$dbusername. $dbuser->user_id);
La vulnerabilidad fue encontrada e informada al responsable del código y más tarde corregida en el mismo día (diff), tanto en el CVS como en el código usado por meneame.net. Todos aquellos portales que se hayan basado en su código desde el día 2 de julio de 2007 hasta hoy contienen dicha vulnerabilidad (diff), ya que fue introducido entonces de forma accidental.
Este post fue escrito el Viernes, Julio 20th, 2007 a las 20:43 y está archivado en la(s) categoría(s) Frikadas.
Puedes seguir los comentarios de esta entrada suscribiéndote a este feed RSS 2.0.
Puedes dejar un comentario, o enviar un trackback desde tu web.

Julio 20th, 2007 at 20:51
Vulnerabilidad en Menéame…
Revisando el código de Meneame (en su última versión del CVS) he encontrado un fallo importante de seguridad que permite suplantar la identidad de cualquier usuario registrado en el portal de forma arbitraria, simplemente mediante una inyección mal…
Julio 20th, 2007 at 23:13
Usando navegador desconocido
Muy chulo, pero te lo votan negativo… de verdad…
Julio 21st, 2007 at 16:21
Usando
Pues la verdad es que me parece un buen artículo. Si un lugar así tiene un fallo tan gordo, me parece bien que se le avise y lo pueda corregir. Además, no se trata de ninguna difamación. Croc presenta pruebas que demuestran esto, y no veo el por qué se han de llevar las manos a la cabeza.
Besos para mi informático favorito,
Mun Light Doll
Julio 23rd, 2007 at 22:48
Usando
Cierto, mientras sea para mejorar esta bien que sucedan casos así.
Buen trabajo.