lunes, enero 16, 2012

¿Están ciegos en Edmodo?

Edmodo es una red social educativa en la que se encuentran alumnos y profesores, que sirve para mandar y calificar trabajos, notificar cosas, etcétera. Uno de mis profesores se decidió usarla y, la verdad, hay que reconocer que es muy cómoda. Tranquilos, lectores del lado del mal, este artículo no es un publirreportaje…

Centrándonos en la seguridad, lo primero que llama poderosamente la atención es la ausencia de Https por defecto, incluso para el envío de la contraseña en el login con lo que lo hace especialmente sensible a ataques de man in the middle y hijacking de sesiones con Firesheep, pero si a Facebook le costó años y Tuenti aún está así, no es para rasgarse las vestiduras... ¿o deberíamos?

Sin embargo, de lo que quiero hablaros es de que, estando registrado como alumno fui a ver el perfil de un compañero. La URL era del perfil de un usuario es: edmodo.com/user?uid=SuID y claro, como os podéis imaginar vosotros que leéis este blog, uno no es de piedra…, así que ya podréis entender que probara las tres o cuatro cosas más habituales. Así, sin darle duro:

- edmodo.com/user?uid=SuID and 1=1
- edmodo.com/user?uid=SuID and 1=0

Seguro que alguno estaréis pensando que cómo soy tan maligno de no avisarles, pobrecicos, un error lo tiene cualquiera, etcétera. Y es cierto, no soy tan maligno... al menos no tanto.

Conversación de día 2 de Diciembre. Abajo un resumen en Español -:

Yo:
Dear admin, 
As you can see... 
   http://www.edmodo.com/user?uid=YOURFRIENDID%20and%201=1
   http://www.edmodo.com/user?uid=YOURFRIENDID%20and%201=0
 
It's really important that you fix it because altough you can't see a profile without permission you can get any info from the database.
Tío raro de soporte:
Hi Juan, 
Can you clarify what kind of info you are able to get from the database?
Kevyn
Yo:
Hi Kevyn,
I haven't tested further because would take me a lot of time and probably wouldn't be legal. Breaking the law and spending hours without profit? Obviously not.
All I can tell you is that this kind of vulnerability would make possible extract ANY information in the database such as user emails, user passwords (altought I suppose and hope that they are hashed/salted) and documents. 
Please forward it to your backend/technical department as fast as you can, this is very serious.
Tio raro de soporte: 
will do.  Jason, please see the following email thread.
Resumen cutre en Español:
Yo: Hola teneis un agujero, es bastante grave se puede acceder a cualquier dato.
Tio raro: ¿Qué datos puedes coger?
Yo: ¿No te he dicho que cualquiera? Ponme con un informático anda…
Lo más grave no es que tenga más agujeros que las mozas de meter.com, sino que un mes después todo siga igual. Como muestra de su gran preocupación por la seguridad podemos cambiar el email y la contraseña sin poner la contraseña actual y sin confirmar los cambios en un correo.

¿Es todo malo? No del todo. El resto de las cosas no parece que estén demasiado mal a priori, pero tener un fallo de seguridad de Blind SQL Injection en un parámetro numérico que va a probar hasta el más aburrido de turno, hace que plantearse en dejar tus datos o tu información, junto con el resto de los 4.5 millones de usuarios que ya lo han hecho, se convierta en algo temerario... ¿cuantos SQLi o BSQLi habrá en el resto de todos los parámetros de todas las partes de la web?

Autor: Juan Luís Valadas

14 comentarios:

Alex dijo...

Juan el link principal está mal..está apuntando a www.edmondo.com
en vez de a www.edmodo.com

Un saludo!

Anónimo dijo...

confundir un blind sql injection con un sql injection no tiene precio... luser!

Maligno dijo...

@anónimo, quién lo ha confundido? Y ademas, un BSQLi es un SQLi que se explota de manera distinta. No todos los SQLi se explotan igual... relax.

Saludos!

fossie dijo...

Pues yo me considero de los "aburridos de turno" que prueban esas cosas al igual que el autor del artículo... pero vamos que por desgracia no solo hay "aburridos" en internet, también hay mucha gente interesada en conseguir la información de esos 4.5 millones de usuarios de esa y de muchas otras webs.

La gente sigue sin concienciarse de la importancia de esas cosas. Hasta el fallo más tonto pone en peligro a la empresa más grande.

Jay dijo...

Hola, soy el autor del artículo.

@Anónimo Hasta donde yo he visto no da errores, simplemente muestra el contenido o no. Si hay algún error que se puede ver en el código fuente personalmente lo desconozco.

Si me puedes decir que errores da la sentencia te lo agradezco. Sino, es blind. Saludos y gracias por comentar.

Anónimo dijo...

@Jay: ¿Errores? ¿Dar errores? ¿Solo muestra el contenido o no? Como se nota en tu comentario que no tienes ni idea de la diferencia entre blind sql injection y sql injection... Que buen articulo, si si...

Buen nivel, buen nivel...

Jay dijo...

@Anónimo De toda la vida de dios BSQLi es aquella que no da ningún resultado en la consulta, o mejor deicho en aquellas en las que no es visible.

Si no estoy en lo correcto al afirmar que es Blind corrigeme y demuestralo escribiendo aquí la consulta y por qué no es blind.

Hasta ahora no has argumentado nada diciendo que no sea que no tengo ni puta idea.

PD: No estaría de más firmar lo que escribes.

Anónimo dijo...

@Jay: ¿Y acaso no te da resultados la pagina que de ta los datos del perfil del usuario? Anda, lee un poco y acuestate. No creo que sea necesario explicar el porque. Cualquiera con unos conocimientos (no tan bajos como los tuyos) entenderia que esto es un sql injection sin necesidad de hacerlo blind

fossie dijo...

Sinceramente no entiendo esta polémica. El artículo no trata de si es BSQLi o SQLi sino del problema de seguridad en Edmodo.

¿Porque os parais en un detalle?
Sea lo que sea el caso es que es un fallo grave de seguridad y el autor ha hecho muy bien en ponerlo en conocimiento del administrador y, viendo que el admin pasaba del tema pues darlo a conocer para que los usuarios (o futuros usuarios) tengan conocimiento del tema y decidan si deben o no dar sus datos.

Jay dijo...

@Anónimo Claro que los da, sino no habría una consulta xD.

La pregunta es, ¿Puedes sacar algo de la DB sin que sea comprobando si la consulta es verdadera o falsa? No, ¿verdad? Pues entonces es BSQLi.

Pasó mes y medio y tampoco miré mucho pero vamos con tus argumentos queda claro que eres un troll.

@Fossie: Tienes toda la razón, no tenía que haber entrado al trapo, además a un tio sin experiencia y de FP este artículo no le viene mal para el CV...

Juan José de Haro dijo...

He intentado reproducir el fallo y no puedo. O bien obtengo una página de error diciendo que el perfil es privado o bien sólo veo las conversaciones que esa persona ha tenido conmigo.
¿Podría ser que estuviese ya solucionado?

Rafa Oliva dijo...

Hola!
Me ha parecido realmente interesante el artículo sobre la seguridad en edmodo. ¿Crees que www.redAlumnos.com (el edmodo made in Spain) puede tener problemas similares? Si es así, nos gustaría saberlo para ponerle remedio lo antes posible, en redAlumnos no estamos ciegos.
Un saludo!

Rafa Oliva
Community Manager
www.redAlumnos.com
rafa.oliva (arroba) redalumnos.com

Jay dijo...

Respondiendo a tu pregunta, "creo que puede tenerlos". Cosa muy distinta a decir que los tiene...

Desde luego sería más adecuado que comentases el tema con los informáticos de la empresa (y no con alguien ajeno).

Ya de paso si la economía lo permite una auditoría externa.

Alejandro Di Mare dijo...

Buenas, muy buen artículo. Yo soy uno de los programadores que construyó el sitio. Agradezco mucho que te contactaras con el grupo de soporte de Edmodo en lugar de tratar de crear problemas en el sitio.

El año pasado crecimos mucho en muy poco tiempo, lo que nos obligó a contratar varios nuevos programadores; y aunque lo intentamos, no fue fácil lograr que se adaptaran tan rápidamente como nos habría gustado a todas las convenciones que tenemos.

Una de éstas es la manera en la que se obtienen los valores de los parámetros GET y POST, los cuales se supone tienen que obtenerse a través de una función que se asegura de que no haya intentos de inyección. Uno de nuestros programadores nuevos no estaba al tanto de esto y accedió directamente a los parámetros cuando se le asignó la reciente tarea de hacer varios cambios en los profiles.

Otra situación es que tenemos mucha más gente que antes enviando mensajes en el grupo de soporte. Hace menos de dos años los programadores éramos los que leíamos los posts en soporte, en estos momentos son tantos que tenemos varias personas que trabajan tiempo completo exclusivamente respondiendo a las preguntas de soporte y pasándonos solamente las que consideran problemas que se tienen que arreglar por los programadores. No todas estas personas tienen un fondo técnico, por lo que a veces no nos llegan posts importantes como el tuyo.

Por la parte de seguridad te puedo decir que guardamos todos los urls sospechosos para revisar (gracias a eso llegué a este artículo), y aunque hemos tenido varios intentos de inyección, hasta ahora puedo decir con bastante seguridad que nadie ha tenido éxito en obtener o modificar información privada de nuestra base de datos (recibimos varios "; DROP TABLE students;" por semana...). Ya personalmente arreglé el problema en el profile y revisé todo el código para asegurarme de que siempre se usen funciones seguras para obtener datos del cliente. Las únicas instancias donde esto no se estaba cumpliendo era en el profile y en una página de quizzes (ambas páginas nuevas).

Gracias!
Alejndro Di Mare

Entradas populares