jueves, octubre 28, 2010

Un XSS en Tuenti que permitía hacer hijacking

Existía un fallo de Cross-Site Scripting (XSS) en la web de tuenti dentro del módulo de reto de juegos a través del chat con el que se podían realizar ataques de Hijacking para robarle la cookie de sesión, y por tanto la cuenta a los usuarios con que estuvieras chateando. Como nosotros somos tipos buenos, les avisamos y nos invitaron a tomar un bonito café en sus instalaciones para que se lo contasemos. Tras una rápida reunión, que esto es bastante sencillo de entender, lo arreglaron. Como ya está resuelto, os dejamos aquí la explicación del fallo que tenía.

XSS en Tuenti

Tuenti dispone de un sistema de juegos entre usuarios, los cuales pueden ‘retarse’ a través de un sistema de chat, como se ve en la siguiente captura donde un usuario reta a otro a jugar a ‘Poolstastic’.


Figura 1: Reto de juegos por chat

Para la explotación de esta vulnerabilidad utilizaremos el navegador Chrome, debido a que permite la modificación del código en runtime. Para ello debemos expandir el menú de juegos, seleccionar uno, en este ejemplo Poolstastic, y hacer botón derecho sobre el botón jugar, pulsando posteriormente sobre ‘Inspeccionar elemento’.


Figura 2: Inspeccionar elemento

Analizando el código, vemos que el botón ‘Jugar’ contiene un atributo llamado ‘gamename’ el cual almacena el nombre del juego al cual se quiere retar.


Figura 3: Nombre del juego en el elemento

Si existe la posibilidad de modificar el nombre del juego, nos permitirá realizar la inclusión de código javascript en el dominio de tuenti.com, pudiendo de este podo tomar el control total de la cuenta a atacar. Para probarlo modificaremos el atributo gamename inyectando el siguiente código:

[div style='top:0px;left:0px;height:100%;position:fixed;width:100%;'
onmouseover='alert(document.cookie);'[/div]”



Figura 4: Inyección de XSS en el atributo nombre

En cuanto el usuario atacado reciba el mensaje, se le ejecutará dicho código javascript, mostrando en este caso su cookie por pantalla.


Figura 5: Ejecución de código XSS sin interacción con el usuario

Esta prueba de concepto, que descubrió el gran Manu "The Sur", permitía tomar el control total de la cuenta. El resto era sencillo, inyectar un código que capture la cookie de sesión, la envíe a un servidor controlado, ponerte la cookie robada y acceder a la cuenta logeada del usuario. Un Hijacking clásico. Por suerte para todos, la gente de Tuenti, que se portó muy bien con nosotros, arregló ya este fallo.

Saludos Malignos!

15 comentarios:

Arán dijo...
Este comentario ha sido eliminado por el autor.
Arán dijo...

Conmigo no se portaron tan bien después del segundo XSS que les descubrí... pero bueno.. no tengo tu caché..

Luis dijo...

Yo he de reconocer que la primera vez se portaron tan bien que me sorprendio, me invitaron a las oficinas y tuvieron un par de detalles (camiseta, lacasitos)... pero de las siguientes (que no fueron pocas) ya cambio el tema, y opte por no reportar mas...

Ademas despues del articulo de SbD, que toca a Tuenti, no ha habido muy buenas palabras que digamos... :)

Anónimo dijo...

q bonito xDD
para cuando uno en facebook???

un saludo.
Manolo.

Christian Hernández dijo...

Como sigas, en algún café de estos que te invitan cuando descubrís estas cosas tan chulas, te van a fichar y entonces si que te tratarán bien :o)

cGVwZQ dijo...

Además de modificar el nombre del juego para un XSS, podíamos modificar el otro parámetro (el page_key), y mediante HPP redireccionar al usuario a cualquier página de Tuenti al aceptar la invitación:

> Games.challengeFriends.showDialogInDropDown('&m=Profile&user_id=X', 'NewGame')

Al aceptar nos redirecciona a "#m=Profile&func=index&page_key=&m=Profile&user_id=X&game_token=hash"

De hecho, acabo de probarlo y esta parte sigue funcionando.

Por otro lado, no tengo quejas de ellos. Hasta hora me han tratado bién, y tengo pendiente una visita a Madrid... =P

Por curiosidad, ¿cuándo lo reportastéis?

Arán dijo...

el primero era un XSS en los enlaces que no tenían bien los filtros y permitía injectar htmlencode (tipo /) en marzo del 2009. Gracias por correo y au. El segundo lo avise a Félix Ruiz Hernández por el tuenti (user_id=8) y el pavo se hacia el tonto como si no supiera de que le hablaba y lo corregían como podían. Era error al pasar el filtro, me lo salté con &#/47; me decía de que me hablas? y cambiaban el filtro...tomándome por gilipollas o yo que se...después de eso ni me molesto en entrar..

Arán dijo...

1er htmlencode & #47; sin el espacio
2 & #& #47;47; en el segundo reporte.

Anónimo dijo...

El problema esta en que solo se podria explotar mediante un troyano con MITB ya que seria una de la formas de inyectar ese codigo para lograr el xss, ya que en el articulo no vi como se explotaria mediante un url y lo cual no creo sea posible.

Maligno dijo...

@Anónimo, la inyección se hace desde la máquina del atacante y listo. 100% funcional, probado.

thesur dijo...

@Anonimo, el tuenti tiene un sistema de chat desde el cual un usuario puede conversar con otro. Es ahí por donde se inyecta(ba) el código. No se trata del clásico XSS no permanente que se pasa por los parámetros GET de una URL

/Ts

lost-perdidos dijo...

¿Por qué no incluyes directamente la función "onmouseover"? ¿Intentas impresionar a los malos? xD

Anónimo dijo...

¿Quién me invita a entrar a tuenti?y tambien a twenti.com
Gracias para quiénlo haga.
mervelasco1@gmail.com

Anónimo dijo...

No se para que coño les avisais de nada son una panda de caraduras poco agradecidos que se forran a costa de vosotros..
Si quereis eso haya vosotros.
Un saludo.

Anónimo dijo...

Es importante reportarlos, no por los creadores, sino por los usuarios que utilizan esa red social.

Entradas populares