jump to navigation

Cómo ganar siempre al “Apalabrados” (para Hackers) July 4, 2012

Posted by toniface in : Apps, iPhone, Seguridad , trackback

Confieso que no he entrado en el tema “Apalabrados”, pero conozco a mucho enfermo del tema. Este artículo, extraido íntegramente de Security by Default, no pretende que hagáis trampas, o no siempre, ni va de las famosas aplicaciones para que os lo den hecho. En realidad va de ver las tripas de como funciona el juego y cómo hackearlo, o sea que aquí os lo dejo por si quereis experimentar…

Esto es lo que nos cuentan desde Security by Default:

Apalabrados, o “Angry Words”, el juego de moda. Muchos lo hemos descubierto como un desafío más. Algo a lo que se puede jugar con cualquiera y que consiste en exprimirse el cráneo pensando, con las letras que tienes, cómo completar palabras en un tablero. El concepto ya existía con el Scrabble de toda la vida, pero en este caso jugando de forma online contra amigos/conocidos o incluso contra personas seleccionadas de forma aleatoria.
Así que empecé a jugar y ví como ganaba algunas partidas, pero perdía otras. Y he de reconocer que no me gusta mucho perder ;DCon el tiempo, incluso aparecieron aplicaciones online o servicios que te “ayudaban” con la generación de palabras, en base a las letras que dispones, y las ya colocadas en el tablero, para que efectúes la mejor de las jugadas. Pese a que nunca llegué a hacer uso de estas aplicaciones, pensé en echar un vistazo a las tripas del juego, por aquello de ver cómo funciona y buscar alguna otra debilidad que me permitiese hacer esto de las palabras cruzadas algo más divertido.

Para ello, y como se jugaba desde un dispositivo móvil, monté una herramienta de intercepción de tráfico, que me permitiese analizar los mensajes intercambiados entre la aplicación, y el servidor correspondiente. Una vez identifiqué que las peticiones eran simples llamadas a una API web, dispuse el conocido proxy Paros para poder estudiar las mismas.
Os cuento mis findings principales:

 

 

 

Teniendo en cuenta que es una matriz de 15×15, la posición de cada letra viene dado por la posición de la 0 a 224. Así que si queremos, podemos devolver el mapa de caracteres que queramos (ni siquiera han de ser sólo letras) y/o cuantos comodines nos venga en gana.
 

 

Y por supuesto podemos escribir lo que queramos en los puntos, el nombre del adversario, o incluso el mapa de letras que queramos que queden reflejados… Quise probar cuánto era el mayor puntaje que podía obtenerse en Apalabrados, así que probé rellenando con todo Z (valen 10 puntos) todo el tablero… Al forzar un WIN, el programa se pasa de largo sumando y calculando las triple/doble letra/palabra y da un resultado de 248, que obviamente es un resultado incorrecto,…
 

 

Estuve probando por si, por debajo, la aplicación llamase a Safari y fuese posible generar un XSS… pero no hubo suerte con la única prueba que hice.

Bueno, pero… ¿y cómo lo pueden arreglar?
El problema fundamental de Apalabrados, es que no han tenido en cuenta ningún tipo de checksum, o lo que sería aún mejor, una firma digital del hash de cada mensaje recibido. Las manipulaciones o tampering de los datos enviados por el servidor a los clientes, deberían ser comprobadas por el mismo, de manera que, si alguien ha dado rienda suelta a su creatividad por el camino, debería dar un error de integridad y no interpretar el contenido del mensaje.
Respecto al envío de mensajes por parte del cliente hacia el servidor, tanto con las jugadas con letras que se envían, como con los mensajes de “Rendirse” o “Pasar”, deberían ir cifrados, por ejemplo, con una contraseña de sesión. Otra opción, sería hacerlo con un hash de la contraseña del usuario que se mantenga en el cliente y que al estar ya almacenada en el servidor, pudiese dar la capa de confidencialidad necesaria a los mensajes. La opción optima sería firmar digitalmente todos los mensajes, pero eso implicaría un despliegue de certificados por cada usuario, que posiblemente hiciera inviable el juego.Ni siquiera se han preocupado que, cuando el login se hace mediante usuario-correo/contraseña, el envío de la misma se efectúe mediante un canal SSL, sino que la contraseña viaja en claro para que cualquiera, en determinadas condiciones, pueda acceder a ella cómodamente. Como recomendación, no uséis la misma contraseña que utilizáis para otras cosas, y por supuesto, ya que el nombre de usuario es una dirección de correo, haced el favor que la contraseña no sea la del servicio de correo!

La única “medida de seguridad” implementada (que yo creo que ha sido por casualidad) es el escaso tiempo de time-out, que obliga a hacer la manipulación de los parámetros en tiempo récord, o tener hecho el mensaje antes, para inyectarlo en la respuesta cuanto antes. La otra opción es diseñar un programa que cuando detecte las peticiones, formatee las respuestas según nuestras necesidades de forma automática.
Pensé en buscar un BOFen la devolución de alguno de los parámetros, ya que, como habéis podido comprobar, es posible modificarlos todos a nuestro gusto. Así que a base de pruebas, quizá sea posible ejecutar código remoto en el dispositivo de la víctima. Mi intención eran los fines académicos y lúdicos para conseguir la victoria en el juego, no en el dispositivo completo.Cierto es, que en el lado servidor, han tenido en cuenta “alguna” medida de seguridad, como la doble comprobación de que la palabra existe. Sin embargo, no han controlado todas las posibles reacciones de un usuario con un pelín de mala uva.

Recordad además que esto sólo es posible en aquellas situaciones en las que se utilice una red wireless para la comunicación de datos y sea posible el MiTM. En caso de jugar con 3G no habría forma de efectuar estas manipulaciones, y en caso de GPRS, hay que mirar que los @Taddong no estén cerca.
Noticia extraida de: Security by Default