Joe blog Levy

atualização 2: Depois de escrever este post, também descobri outra vulnerabilidade no Trivia Crack que permitia dar aos usuários vidas/giros ilimitados. Naquela época, adicionei isso como outro recurso ao Trivia Cracker. Ontem (29/1/2016), o Trivia Cracker começou a impedir esse recurso (a resposta automática de perguntas continua a funcionar — conforme descrito neste post). Mas o engraçado é que, além de impedi-lo, o servidor Trivia Crack também me chama especificamente!

 Trivia Crack error

Update 1: Usando técnicas semelhantes às abaixo, também lancei uma extensão do Chrome para Candy Crush. Chega aqui.

quando a temporada de férias começou há algumas semanas, comecei a notar que um novo aplicativo, Trivia Crack, estava se tornando popular entre meus amigos. Para aqueles de vocês que não sabem, Trivia Crack é um novo jogo para Android, iPhone e Facebook. A premissa do jogo é simples e muito semelhante a outro aplicativo popular do ano passado, QuizUp. Essencialmente, você responde a perguntas triviais de várias categorias, competindo contra seus amigos por se gabar. Apesar da simplicidade (ou talvez devido a isso), Trivia Crack tornou – se muito popular a partir do final-acumulando 5,3 milhões de curtidas no Facebook e se tornando o melhor aplicativo gratuito na loja do Google Play (Android).

você pensaria que os desenvolvedores de um jogo tão polido e bem-sucedido poderiam ter tomado o tempo para implementá-lo de uma maneira que é segura de trapacear, mas acontece que escrever um programa para trapacear no Trivia Crack é realmente bastante simples. Ao longo de um fim de semana, consegui escrever e lançar uma extensão do Chrome, Trivia Cracker, que me transformou de um jogador de Trivia Crack do medicore-at-best para um semideus aparentemente genial. Você pode ver o Trivia Cracker em ação abaixo:

então, o que há de errado com a implementação do Trivia Crack que me permitiu construir tão facilmente uma ferramenta que permite que alguém trapaceie? Em suma-quando o cliente Trivia Crack solicita do servidor Trivia Crack a próxima pergunta a fazer ao usuário, o servidor responde não apenas com a pergunta e as respostas possíveis, mas também envia qual resposta é a resposta correta. Os detalhes da vulnerabilidade, como a encontrei e como construí uma extensão do Chrome para aproveitá-la estão abaixo.

1 – encontrando a vulnerabilidade

depois de perder para meus amigos em Trivia Crack muitas vezes, decidi que queria ver se poderia ganhar de minha própria maneira especial. Embora eu não seja tão bom em trivialidades aleatórias, sou muito bom em engenharia reversa. Eu suspeitava que eu poderia ser capaz de tirar proveito de enviar meus próprios pedidos para servidores do Trivia Crack, ou usando alguns dados nas respostas dos servidores do Trivia Crack, para ganhar uma vantagem no jogo. Então, comecei pesquisando quais tipos de dados o cliente e o servidor do Trivia Crack passam para frente e para trás.

para inspecionar esses dados, joguei Trivia Crack no meu navegador no Facebook, enquanto gravava e inspecionava as solicitações e respostas enviadas entre o cliente e o servidor do Trivia Crack usando uma ferramenta que criei anteriormente chamada Gargl. Sim, eu sei que poderia ter usado as ferramentas de desenvolvedor do Fiddler ou do Chrome para fazer o mesmo. Eu decidi usar Gargl em vez disso, porque, além de permitir que você visualize cliente/servidor solicitações/respostas, Gargl também permite que você modifique e parametrizar a esses pedidos e, em seguida, gera automaticamente os módulos em uma linguagem de programação de sua escolha, assim você pode fazer essas solicitações iguais e sem escrever uma linha de código. Mais sobre isso depois.

de qualquer forma, depois de dizer Gargl para começar a gravar e ir para Trivia Crack no Facebook no meu navegador, o primeiro passo foi descobrir qual dos muitos pedidos enviados nesta página do Facebook estavam relacionados ao Trivia Crack, versus o próprio Facebook. Inspecionar o HTML na página mostrou que o Conteúdo Do Trivia Crack está incorporado ao Facebook por meio de um iframe. O elemento logo acima deste iframe era um formulário destinado a postar em um URL peculiar – https://preguntados.com/game.

usando ferramentas Chrome Dev para inspecionar HTML Trivia Crack

meu conhecimento limitado de espanhol me lembrou que” pregunta “significa” pergunta”, que parece relacionado com trivia, então eu suspeitava que este era o domínio onde Trivia Crack está hospedado. Ir para o URL https://preguntados.com/game confirmou essa suspeita:

jogando Trivia Crack em Preguntados.com

O próximo passo foi só para começar a jogar Trivia Crack, e como eu joguei olhar para os pedidos Gargl acha que a página está fazendo para qualquer url que contenha “preguntados.com”:

Usando Gargl para o registro de ações em Curiosidades do Crack

Como eu respondi Curiosidades Crack perguntas, eu notei um novo pedido parecia ser emitido para cada questão. Na verdade, o pedido parecia ser emitido antes mesmo de eu “girar o spinner” em Trivia Crack para determinar qual categoria seria a próxima pergunta:

Usando Gargl para o registro de ações em Curiosidades do Crack

Isso me fez pensar que talvez as perguntas foram pré-determinados, e o “acaso spinner” na verdade foi pré-determinado para a terra em uma determinada categoria (e peça a uma determinada questão) com base na resposta do servidor para o “api.preguntados.com/api/users/<id de utilizador>/jogos/<gameID>” pedido enviado antes de clicar no botão “Spin”. Para mim, isso significava que eu poderia provavelmente alerta o usuário para a pergunta que eles estão prestes a ser solicitado antes do tempo, então eles teriam tanto tempo como eles queriam pensar ou procurá-lo. Isso seria uma vantagem porque em Trivia Crack, você só tem 30 segundos para responder a uma pergunta uma vez que a pergunta é mostrada, para evitar que o Usuário procure respostas. Além disso, em alguns modos de jogo não é apenas o número de perguntas que você obtém corretas, mas também a quantidade de tempo que você leva para responder, que determina se você ganha. Se eu pudesse mostrar ao usuário a pergunta com antecedência, eles poderiam obviamente respondê-la muito mais rapidamente, uma vez que o próprio Trivia Crack mostra a pergunta.

então eu percebi que eu tinha uma pista e cavou os detalhes desta solicitação. Acontece que essa solicitação realmente forneceu uma “vantagem do trapaceiro” muito maior do que eu pensava…

2 – a vulnerabilidade em detalhes

usando Gargl para olhar para a “api.preguntados.com/api/users/<userID>/games / <gameID > ” request / response in detail, consegui confirmar que de fato fornece a pergunta a ser feita, bem como as possíveis respostas, na resposta. No entanto, fiquei surpreso ao descobrir que a resposta correta à pergunta também está embutida na resposta!

Usando Gargl para o registro de ações em Trivia Crack - a vulnerabilidade de resposta

Como você pode ver acima, a resposta a essa solicitação contém a pergunta, as respostas possíveis, e que o índice na matriz de respostas possíveis é a resposta correta. Então, se esses dados são realmente sobre a próxima pergunta, depois de clicar em “girar”, devo ser perguntado ” Qual dos seguintes países africanos não tem uma costa?”e a resposta correta deve ser respostas de cima, que é “todas elas fazem”. Clicando em “Spin” provou-se que esta hipótese correta:

Jogar Trivia o Crack, antes de selecionar uma resposta

Jogar Trivia Crack, selecionando a resposta correta

eu também usei o meu navegador para que as repetidas solicitações GET para “api.preguntados.com/api/users/<userID>/games / <gameID>” sempre dê a mesma resposta, até que você responda à pergunta que ela fornece. Isso significa que eu poderia solicitar este URL da minha própria ferramenta e ainda receber a mesma pergunta que o cliente Trivia Crack no Facebook receberia.

uma resposta contendo a resposta correta, quando o objetivo é que o Usuário deve determinar a resposta em si, está em conflito direto com a prática de programação de “programação defensiva” – particularmente o princípio de programação da web “nunca confie no cliente”. Como o servidor não tem controle sobre como o cliente Age, ele não pode assumir que o cliente não agirá de maneira maliciosa e, portanto, deve se proteger. A maneira correta de implementar o comportamento de verificação de respostas é fazê-lo no lado do servidor. Não envie a resposta correta para o cliente em nenhum momento e, em vez disso, faça com que o cliente envie a resposta do Usuário para o servidor, onde o servidor irá verificá-la quanto à correção e creditar o Usuário se estiver correto (e, claro, permitir que apenas uma resposta seja enviada por usuário por pergunta).

no entanto, Trivia Crack não fez isso e, em vez disso, confia no cliente. Agora era apenas uma questão de criar um cliente malicioso para aproveitar o fato de que a resposta correta é enviada na resposta. Idealmente, um que seria fácil para usuários não técnicos instalar e usar. Hmm … que tal uma extensão do Chrome que apenas adiciona um botão ao jogo Trivia Crack, quando jogado no Facebook, que quando clicado responde à pergunta atual corretamente automaticamente??

3 – aproveitando-se da vulnerabilidade

Como eu mencionei acima, Gargl permite que você tire os pedidos que você tinha que gravar, modificar e parametrizar-los conforme necessário e, em seguida, gerar automaticamente os módulos em uma linguagem de programação de sua escolha para fazer esses mesmos pedidos. Eu não vou entrar em detalhes do que o processo, já que você pode olhar para um dos meus Gargl posts do blog para encontrar essa informação, mas, essencialmente, eu gerado um Gargl arquivo de modelo para Curiosidades Crack várias solicitações de API, utilizando o Gargl extensão do Chrome e, em seguida, usou um Gargl gerador para transformar esse arquivo de modelo em uma Trivia Crack biblioteca de JavaScript. Usar Gargl para isso me permitiu criar uma biblioteca JavaScript que fala com os servidores do Trivia Crack, sem escrever uma linha de código para fazê-lo, e também ter um arquivo de modelo para o futuro, caso eu queira fazer a mesma coisa mais tarde para outra linguagem de programação.

uma Vez que eu tinha essa Curiosidades Crack biblioteca JavaScript, era uma simples questão de construção de uma extensão do google Chrome em JavaScript que é executado no domínio carregado na Trivia Crack Facebook a página do jogo iframe (preguntados.com), adiciona um botão para o HTML para o jogo, e quando esse botão é clicado pedidos “api.preguntados.com/api/users/<userID>/games / <gameID>” URL, analisa a resposta para a resposta correta e, em seguida, clica no botão Responder na página que representa a resposta correta.

Trivia Cracker rodando em Trivia Crack para responder a perguntas para mim

Write a Comment

O seu endereço de email não será publicado.