Joe Blog Levy

Actualización 2: Después de escribir esta publicación, también descubrí otra vulnerabilidad en Trivia Crack que permitía dar a los usuarios vidas/giros ilimitados. En ese momento, agregué esto como otra característica a Trivia Cracker. Ayer (29/1/2016), Trivia Cracker comenzó a impedir esta función (la respuesta automática de preguntas continúa funcionando, como se describe en esta publicación). Pero lo gracioso es que, además de prevenirlo, el servidor de Trivia Crack también me llama específicamente.

Error de crack de Trivia

Actualización 1: Usando técnicas similares a las siguientes, también he lanzado una extensión de Chrome engañosa para Candy Crush. Tráelo aquí.

A medida que comenzaba la temporada navideña hace unas semanas, empecé a notar que una nueva aplicación, Trivia Crack, se estaba volviendo popular entre mis amigos. Para aquellos que no lo sepan, Trivia Crack es un nuevo juego para Android, iPhone y Facebook. La premisa del juego es simple, y muy similar a otra aplicación popular del año pasado, QuizUp. Esencialmente, respondes preguntas triviales de varias categorías, compitiendo contra tus amigos por el derecho a presumir. A pesar de la simplicidad (o tal vez debido a ella), Trivia Crack se ha vuelto muy popular en los últimos tiempos, acumulando 5,3 millones de me gusta en Facebook y convirtiéndose en la mejor aplicación gratuita en la tienda Google Play (Android).

Pensarías que los desarrolladores de un juego tan pulido y exitoso podrían haberse tomado el tiempo para implementarlo de una manera segura de hacer trampa, pero resulta que escribir un programa para hacer trampa en Trivia Crack es en realidad bastante simple. En el transcurso de un fin de semana, pude escribir y lanzar una extensión de Chrome, Trivia Cracker, que me convirtió de un jugador de Crack de Trivia medicore en el mejor de los casos a un semidiós aparentemente genial. Puedes ver Trivia Cracker en acción a continuación:

Entonces, ¿qué tiene de malo la implementación de Trivia Crack que me permitió construir tan fácilmente una herramienta que permite a cualquiera hacer trampa? En resumen, cuando el cliente de Trivia Crack solicita al servidor de Trivia Crack la siguiente pregunta para hacerle al usuario, el servidor responde no solo con la pregunta y las posibles respuestas, sino que también envía qué respuesta es la correcta. Los detalles de la vulnerabilidad, cómo la encontré y cómo construí una extensión de Chrome para aprovecharla están a continuación.

1 – Encontrar la vulnerabilidad

Después de perder ante mis amigos en Trivia Crack demasiadas veces, decidí que quería ver si podía ganar a mi manera especial. Si bien no soy tan bueno en trivialidades aleatorias, soy bastante bueno en ingeniería inversa. Sospechaba que podría aprovechar el envío de mis propias solicitudes a los servidores de Trivia Crack, o el uso de algunos datos en las respuestas de los servidores de Trivia Crack, para obtener una ventaja en el juego. Así que empecé investigando qué tipo de datos pasan el cliente y el servidor de Trivia Crack de ida y vuelta.

Para inspeccionar estos datos, jugué Trivia Crack en mi navegador en Facebook, mientras grababa e inspeccionaba las solicitudes y respuestas enviadas entre el cliente y el servidor de Trivia Crack utilizando una herramienta que había creado anteriormente llamada Gargl. Sí, sé que podría haber usado las herramientas para desarrolladores de Fiddler o Chrome para hacer lo mismo. Decidí usar Gargl en su lugar porque además de permitirle ver solicitudes/respuestas de cliente/servidor, Gargl también le permite modificar y parametrizar estas solicitudes, y luego generar automáticamente módulos en un lenguaje de programación de su elección para que pueda hacer estas mismas solicitudes sin escribir una línea de código. Más sobre eso más adelante.Facebook Facebook

De todos modos, después de decirle a Gargl que comenzara a grabar y que fuera a Trivia Crack en Facebook en mi navegador, el primer paso fue averiguar cuál de las muchas solicitudes que se enviaban en esta página de Facebook estaban relacionadas con Trivia Crack, en comparación con Facebook en sí. Al inspeccionar el HTML de la página, se demostró que el contenido de Trivia Crack está incrustado en Facebook a través de un iframe. El elemento justo encima de este iframe era un formulario destinado a publicar en una URL peculiar – https://preguntados.com/game.

Usar Herramientas de desarrollo de Chrome para inspeccionar el HTML de Trivia Crack

Mi conocimiento limitado de español me recordó que «pregunta» significa «pregunta», lo que parece relacionado con trivia, por lo que sospeché que este era el dominio donde se alojaba Trivia Crack. Ir a la URL https://preguntados.com/game confirmó esa sospecha:

Jugando a Trivia Crack en Preguntados.com

El siguiente paso fue comenzar a jugar Trivia Crack, y mientras jugaba, mira las solicitudes, Gargl encuentra que la página está haciendo a cualquier url que contenga «preguntados.com»:

Usando Gargl para registrar acciones en Trivia Crack

Mientras respondía a las preguntas de Trivia Crack, noté que parecía emitirse una nueva solicitud para cada pregunta. En realidad, la solicitud parecía haberse emitido incluso antes de que «hiciera girar el hilador» en Trivia Crack para determinar qué categoría sería la siguiente pregunta:

Usar Gargl para registrar acciones en Trivia Crack

Esto me hizo pensar que tal vez las preguntas estaban predeterminadas, y que el «hilador aleatorio» de hecho estaba predeterminado para aterrizar en una determinada categoría (y hacer una determinada pregunta) en función de la respuesta del servidor al «api.preguntados.com/api/users/<userId>/games / <GameID>» solicitud enviada antes de hacer clic en el botón «Girar». Para mí, esto significaba que probablemente podría alertar al usuario de la pregunta que está a punto de hacerse con anticipación, para que tuvieran tanto tiempo como quisieran para pensarlo o buscarlo. Esto sería una ventaja porque en Trivia Crack, solo tienes 30 segundos para responder una pregunta una vez que se muestra la pregunta, para evitar que el usuario busque respuestas. Además, en algunos modos de juego no es solo el número de preguntas que obtienes correctas, sino también la cantidad de tiempo que tomas para responder, lo que determina si ganas. Si pudiera mostrarle al usuario la pregunta con anticipación, obviamente podrían responderla mucho más rápidamente una vez que la pregunta se muestre en Trivia Crack.

Así que pensé que tenía una ventaja y excavó en los detalles de esta solicitud. Resulta que esta solicitud en realidad proporcionó una «ventaja de tramposo» mucho mayor de lo que pensé

2 – La vulnerabilidad en detalle

Usando Gargl para mirar la «api».preguntas.com / api / users / < userId> / games/<GameID>» solicitud / respuesta en detalle, pude confirmar que efectivamente proporciona la pregunta que se debe hacer, así como las posibles respuestas, en la respuesta. Sin embargo, me sorprendió descubrir que la respuesta correcta a la pregunta también está incrustada en la respuesta.

 Uso de Gargl para registrar acciones en el Crack de Trivia: la vulnerabilidad de respuesta

Como puede ver anteriormente, la respuesta a esta solicitud contiene la pregunta, las posibles respuestas y qué índice en la matriz de posibles respuestas es la respuesta correcta. Entonces, si estos datos se refieren a la siguiente pregunta, después de hacer clic en «Girar», se me debería preguntar «¿Cuál de los siguientes países africanos no tiene costa?»y la respuesta correcta deben ser las respuestas de arriba, que es «Todos lo hacen». Hacer clic en «Girar» demostró que esta hipótesis era correcta:

Jugar a Trivia Crack, antes de seleccionar una respuesta

Jugando a Trivia Crack, seleccionando la respuesta correcta

También usé mi navegador para encontrar las solicitudes GET repetidas a «api».preguntas.com / api / users / < userId> / games / <GameID>» siempre da la misma respuesta, hasta que respondas la pregunta que proporciona. Esto significa que podría solicitar esta URL desde mi propia herramienta y seguir recibiendo la misma pregunta que recibiría el cliente de Trivia Crack en Facebook.

Una respuesta que contiene la respuesta correcta, cuando el objetivo es que el usuario debe determinar la respuesta por sí mismo, está en conflicto directo con la práctica de programación de «Programación Defensiva», particularmente el principio de programación web de «nunca confíes en el cliente». Dado que el servidor no tiene control sobre cómo actúa el cliente, no puede asumir que el cliente no actuará de manera maliciosa, por lo que debe protegerse a sí mismo. La forma correcta de implementar el comportamiento de comprobación de respuestas es hacerlo en el lado del servidor. No envíe la respuesta correcta al cliente en ningún momento, y en su lugar haga que el cliente envíe la respuesta del usuario al servidor, donde el servidor verificará la corrección y acreditará al usuario si es correcto (y, por supuesto, solo permitirá que se envíe una respuesta por usuario por pregunta).

Sin embargo, Trivia Crack no hizo esto, y en su lugar confía en el cliente. Ahora solo era cuestión de crear un cliente malicioso para aprovechar el hecho de que la respuesta correcta se envía en la respuesta. Idealmente, uno que sea fácil de instalar y usar para usuarios no técnicos. Hmm how ¿qué tal una extensión de Chrome que solo agrega un botón al juego de preguntas y respuestas, cuando se juega en Facebook, que cuando se hace clic responde a la pregunta actual correctamente y automáticamente??

3 – Aprovechando la vulnerabilidad

Como mencioné anteriormente, Gargl le permite tomar las solicitudes que tenía grabadas, modificarlas y parametrizarlas según sea necesario, y luego generar automáticamente módulos en un lenguaje de programación de su elección para realizar estas mismas solicitudes. No voy a entrar en los detalles de ese proceso, ya que puedes mirar una de mis publicaciones de blog de Gargl para encontrar esa información, pero esencialmente generé un archivo de plantilla de Gargl para las diversas solicitudes de API de Trivia Crack, utilizando la extensión de Chrome de Gargl, y luego usé un generador de Gargl para convertir ese archivo de plantilla en una biblioteca JavaScript de Trivia Crack. Usar Gargl para esto me permitió crear una biblioteca JavaScript que habla con los servidores de Trivia Crack, sin escribir una línea de código para hacerlo, y también tener un archivo de plantilla para el futuro en caso de que quiera hacer lo mismo más tarde para otro lenguaje de programación.

Una vez que tuve esta biblioteca de JavaScript de Trivia Crack, era una simple cuestión de construir una extensión de Chrome en JavaScript que se ejecute en el dominio cargado en la página de juego de Facebook de Trivia Crack iframe (preguntados.com), agrega un botón al HTML del juego, y cuando se hace clic en ese botón, solicita la «api».preguntas.com / api / users / < userId> / games / <GameID>» URL, analiza la respuesta para la respuesta correcta y, a continuación, hace clic en el botón de respuesta en la página que representa la respuesta correcta.

Cracker de preguntas que se ejecuta en Crack de preguntas para responder a mis preguntas

Write a Comment

Tu dirección de correo electrónico no será publicada.