Joe Blog Levy

Aggiornamento 2: Dopo aver scritto questo post, ho anche scoperto un’altra vulnerabilità in Trivia Crack che ha permesso per dare agli utenti vite illimitate/giri. A quel tempo, ho aggiunto questo come un’altra caratteristica di Trivia Cracker. Ieri (29/1/2016), Trivia Cracker ha iniziato a prevenire questa funzione (la risposta automatica alle domande continua a funzionare, come descritto in questo post). Ma ciò che è divertente è, oltre a prevenirlo, il server Trivia Crack mi chiama anche in modo specifico!

Errore Trivia Crack

Aggiornamento 1: Utilizzando tecniche simili al seguito, ho anche rilasciato un’estensione Chrome barare per Candy Crush. Portalo qui.

Come la stagione delle vacanze è iniziata un paio di settimane fa, ho iniziato a notare che una nuova applicazione, Trivia Crack, stava diventando popolare con i miei amici. Per quelli di voi che non sanno, Trivia Crack è un nuovo gioco per Android, iPhone e Facebook. La premessa del gioco è semplice, e molto simile a un’altra applicazione popolare dello scorso anno, QuizUp. In sostanza, si risponde a domande trivia di varie categorie,in competizione contro i tuoi amici per vantarsi. Nonostante la semplicità (o forse a causa di esso), Trivia Crack è diventato molto popolare come di ritardo – raccogliendo 5,3 milioni di Mi piace su Facebook e diventando il top app gratuita nel Google Play (Android) negozio.

Si potrebbe pensare che gli sviluppatori di un gioco così lucido e di successo potrebbero aver preso il tempo di implementarlo in un modo che è sicuro da barare, ma si scopre che scrivere un programma per imbrogliare a Trivia Crack è in realtà abbastanza semplice. Nel corso di un fine settimana, sono stato in grado di scrivere e rilasciare un’estensione Chrome, Trivia Cracker, che mi ha trasformato da un medico-at-best Trivia Crack player a un semidio apparentemente geniale. Puoi vedere Trivia Cracker in azione qui sotto:

Quindi cosa c’è di sbagliato nell’implementazione di Trivia Crack che mi ha permesso di costruire così facilmente uno strumento che consente a chiunque di imbrogliare? In breve-quando il client Trivia Crack richiede dal server Trivia Crack la prossima domanda da porre all’utente, il server risponde non solo con la domanda e le possibili risposte, ma invia anche quale risposta è la risposta corretta. I dettagli della vulnerabilità, come l’ho trovato e come ho costruito un’estensione Chrome per trarne vantaggio sono sotto.

1 – Trovare la vulnerabilità

Dopo aver perso ai miei amici in Trivia Crack una volta di troppo, ho deciso che volevo vedere se potevo vincere nel mio modo speciale. Mentre io non sono così bravo a curiosità casuali, io sono abbastanza bravo a reverse-engineering. Sospettavo che potrei essere in grado di trarre vantaggio dall’invio delle mie richieste ai server di Trivia Crack, o dall’utilizzo di alcuni dati nelle risposte dai server di Trivia Crack, per ottenere un vantaggio nel gioco. Così ho iniziato ricercando quali tipi di dati il Trivia Crack client e server passano avanti e indietro.

Per ispezionare questi dati, ho giocato Trivia Crack nel mio browser su Facebook, mentre registravo e ispezionavo le richieste e le risposte inviate tra il client e il server di Trivia Crack usando uno strumento che avevo creato in precedenza chiamato Gargl. Sì, so che avrei potuto usare Fiddler o gli strumenti di sviluppo di Chrome per fare lo stesso. Ho deciso di utilizzare Gargl invece perché oltre a consentirti di visualizzare richieste/risposte client/server, Gargl ti consente anche di modificare e parametrizzare queste richieste, e quindi di generare automaticamente moduli in un linguaggio di programmazione a tua scelta in modo da poter effettuare queste stesse richieste senza scrivere una riga di codice. Ne riparleremo piu ‘ tardi.

Comunque, dopo aver detto Gargl per avviare la registrazione e andare a Trivia Crack su Facebook nel mio browser, il primo passo è stato quello di capire quale delle molte richieste inviate su questa pagina di Facebook erano legati a Trivia Crack, contro Facebook stesso. L’ispezione dell’HTML sulla pagina ha mostrato che il contenuto di Trivia Crack è incorporato in Facebook tramite un iframe. L’elemento proprio sopra questo iframe era un modulo destinato a postare su un URL particolare- https://preguntados.com/game.

Utilizzo di Chrome Dev Tools per ispezionare l'HTML di Trivia Crack

La mia limitata conoscenza dello spagnolo mi ha ricordato che “pregunta” significa “domanda”, che sembra correlato a trivia, quindi sospettavo che questo fosse il dominio in cui è ospitato Trivia Crack. Andare all’URL https://preguntados.com/game ha confermato quel sospetto:

Giocare Trivia Crack su Preguntados.com

Il passo successivo è stato solo per iniziare a giocare a Trivia Crack, e di come ho giocato guardare le richieste Gargl rileva che la pagina sta facendo a qualsiasi url che contiene “preguntados.com”:

Utilizzando Gargl per registrare le azioni in Trivia Crack

Come ho risposto a Trivia Crack domande, ho notato una nuova richiesta sembrava essere rilasciato per ogni domanda. In realtà, la richiesta sembrava essere emessa prima ancora di “girare lo spinner” in Trivia Crack per determinare quale categoria sarebbe stata la prossima domanda:

Utilizzando Gargl per registrare le azioni in Trivia Crack

Questo mi ha fatto pensare che, forse, le domande sono state predeterminate, e il “caso spinner”, infatti, è stato predeterminato per terra su una determinata categoria (e chiedere una certa domanda) in base alla risposta dal server “api.preguntados.com/api/users/<userID>/giochi/<gameID>” richiesta inviata prima di fare clic sul pulsante “Spin”. Per me, questo significava che probabilmente avrei potuto avvisare l’utente della domanda che stanno per essere poste prima del tempo, quindi avrebbero avuto tutto il tempo che volevano pensarci o cercarlo. Questo sarebbe un vantaggio perché in Trivia Crack, ottieni solo 30 secondi per rispondere a una domanda una volta mostrata la domanda, per impedire all’utente di cercare le risposte. Inoltre, in alcune modalità di gioco la sua non solo il numero di domande si ottiene corretto, ma anche la quantità di tempo necessario per rispondere, che determina se si vince. Se potessi mostrare all’utente la domanda prima del tempo, potrebbero ovviamente rispondere molto più rapidamente una volta che Trivia Crack mostra la domanda.

Quindi ho pensato di avere un vantaggio e ho scavato nei dettagli di questa richiesta. Si scopre che questa richiesta ha effettivamente fornito un “vantaggio dell’imbroglione” molto più grande di quanto pensassi

2 – La vulnerabilità in dettaglio

Usando Gargl per guardare l’api.preguntados.com / api / users/ < UserID >/games/< gameID> ” richiesta / risposta in dettaglio, sono stato in grado di confermare che effettivamente fornisce la domanda da porre, così come le possibili risposte, nella risposta. Tuttavia, sono rimasto sorpreso di scoprire che la risposta corretta alla domanda è anche incorporata nella risposta!

Utilizzo di Gargl per registrare azioni in Trivia Crack - la vulnerabilità di risposta

Come puoi vedere sopra, la risposta a questa richiesta contiene la domanda, le possibili risposte e quale indice nella matrice di possibili risposte è la risposta corretta. Quindi, se questi dati riguardano davvero la prossima domanda, dopo aver fatto clic su “Spin”, mi dovrebbe essere chiesto ” Quale dei seguenti paesi africani non ha una costa?”e la risposta corretta dovrebbe essere risposte dall’alto, che è “Tutti fanno”. Facendo clic su “Spin” dimostrato questa ipotesi corretta:

Giocare Trivia Crack, prima di selezionare una risposta

Giocando Trivia Crack, selezionando la risposta corretta

Ho anche usato il mio browser per scoprire che le richieste GET ripetute a “api.preguntados.com / api / users/ < UserID >/games / < gameID> ” dai sempre la stessa risposta, finché non rispondi alla domanda che fornisce. Ciò significa che potrei richiedere questo URL dal mio strumento e ricevere ancora la stessa domanda che il client Trivia Crack su Facebook riceverebbe.

Una risposta contenente la risposta corretta, quando l’obiettivo è che l’utente debba determinare la risposta stessa, è in conflitto diretto con la pratica della “Programmazione difensiva” della programmazione – in particolare il principio di programmazione web “never trust the client”. Poiché il server non ha alcun controllo su come agisce il client, non può presumere che il client non agirà in modo dannoso e quindi deve proteggersi. Il modo corretto di implementare il comportamento di controllo delle risposte è farlo sul lato server. Non inviare la risposta corretta al client in qualsiasi momento, e invece fare in modo che il client invii la risposta dell’utente al server, dove il server lo verificherà per correttezza e accrediterà l’utente se corretto (e, naturalmente, consentirà solo di inviare una risposta per utente per domanda).

Tuttavia, Trivia Crack non ha fatto questo, e invece si fida del cliente. Ora era solo una questione di creare un client dannoso per sfruttare il fatto che la risposta corretta viene inviata nella risposta. Idealmente, uno che sarebbe facile per gli utenti non tecnici da installare e utilizzare. Hmm how che ne dici di un’estensione Chrome che aggiunge solo un pulsante al gioco Trivia Crack, se giocato su Facebook, che quando si fa clic risponde correttamente alla domanda corrente automaticamente??

3 – Sfruttando la vulnerabilità

Come ho detto sopra, Gargl ti consente di prendere le richieste che hai registrato, modificarle e parametrizzarle secondo necessità, e quindi generare automaticamente moduli in un linguaggio di programmazione a tua scelta per effettuare queste stesse richieste. Non ho intenzione di entrare nei dettagli di quel processo dal momento che puoi guardare uno dei miei post sul blog Gargl per trovare quelle informazioni, ma in sostanza ho generato un file modello Gargl per le varie richieste API di Trivia Crack, usando l’estensione Gargl Chrome, e poi ho usato un generatore Gargl per trasformare quel file modello in una libreria JavaScript Trivia Crack. L’uso di Gargl per questo mi ha permesso di creare una libreria JavaScript che parla ai server di Trivia Crack, senza scrivere una riga di codice per farlo, e avere anche un file modello in giro per il futuro nel caso in cui voglio fare la stessa cosa in seguito per un altro linguaggio di programmazione.

Una volta che ho avuto questa libreria JavaScript Trivia Crack, è stata una semplice questione di costruire un’estensione Chrome in JavaScript che gira sul dominio caricato nella pagina di gioco Trivia Crack Facebook iframe (preguntados.com), aggiunge un pulsante all’HTML per il gioco, e quando si fa clic su quel pulsante richiede l’api.preguntados.com / api / users/<UserID>/games / < gameID > ” URL, analizza la risposta per la risposta corretta, quindi fa clic sul pulsante Rispondi nella pagina che rappresenta la risposta corretta.

 Trivia Cracker in esecuzione su Trivia Crack per rispondere alle domande per me

Write a Comment

Il tuo indirizzo email non sarà pubblicato.