Skip to content

Danger sur le site de rencontres OKCupid : usurpation de données mise en avant par Check Point

Release Date: 30 Jul 2020

Des vulnérabilités ont été découvertes dans l’application de rencontres

29 juillet 2020

Avec plus de 50 millions d'utilisateurs enregistrés depuis son lancement, et dont la majorité a entre 25 et 34 ans, OkCupid est l'une des plateformes de rencontres les plus populaires au monde. En 2004, quatre amis de Harvard ont créé le premier site de rencontres en ligne gratuit. Il se targue de plus de 91 millions de connexions par ans, et 50 000 rencontres par semaine. En 2012, il est devenu le premier grand site de rencontres à créer une application mobile.

Les applications de rencontres permettent de se connecter avec les autres utilisateurs de manière agréable, accessible et immédiate. En analysant les préférences personnelles dans n'importe quel domaine à l’aide d’un algorithme sophistiqué, l'application amène les utilisateurs vers des personnes partageant les mêmes idées, et ils peuvent immédiatement commencer à communiquer par messagerie instantanée.

Pour créer toutes ces connexions, OkCupid établit des profils personnels de tous ses utilisateurs, afin de pouvoir établir la ou les meilleures correspondances en fonction des précieuses informations personnelles de chaque utilisateur.

Bien entendu, ces profils personnels détaillés n'intéressent pas seulement les amoureux potentiels. Elles sont également très prisées par les pirates, car elles constituent la « référence » en matière d'informations, soit pour les utiliser dans des attaques ciblées, soit pour les vendre à d'autres groupes de pirates, car elles permettent aux tentatives d'attaque d'être très convaincantes pour des cibles peu méfiantes.

Comme nos chercheurs ont découvert des vulnérabilités dans d'autres plateformes et applications de réseaux sociaux populaires, nous avons décidé d'examiner l'application OkCupid afin de voir si nous pouvions trouver quelque chose correspondant à nos intérêts. Et nous avons trouvé plusieurs choses qui nous ont amenés à pousser la relation plus en avant (purement professionnellement, bien sûr). Les vulnérabilités que nous avons trouvées dans OkCupid et que nous décrivons dans cette étude auraient pu permettre à des pirates de :

  • Exposer les données sensibles des utilisateurs stockées sur l'application.
  • Effectuer des actions au nom de la victime.
  • Voler le profil et les données privées des utilisateurs, leurs préférences et leurs caractéristiques.
  • Voler le jeton d'authentification des utilisateurs, leurs identifiants et d'autres informations sensibles telles que les adresses email.
  • Envoyer les données recueillies au serveur des pirates.

Check Point Research a informé les développeurs de OkCupid des vulnérabilités exposées dans cette étude et une solution a été déployée de manière responsable pour garantir que ses utilisateurs puissent continuer d’utiliser l'application OkCupid en toute sécurité.

Okcupid1

Plateforme mobile

Nous avons commencé notre étude par le désassemblage de l'application mobile Android OkCupid (v40.3.1 sur Android 6.0.1). Au cours du processus de rétro-ingénierie, nous avons découvert que l'application ouvre une fenêtre WebView (et permet à JavaScript de s'exécuter dans le contexte de la fenêtre WebView) et charge des URL distantes telles que https://OkCupid.com, https://www.OkCupid.com, https://OkCupid.onelink.me et autres.

Des liens profonds permettent d’invoquer les intentions des pirates

Durant le processus de rétro-ingénierie de l'application OkCupid, nous avons constaté qu'elle inclut une fonctionnalité de « liens profonds », permettant d'invoquer des intentions dans l'application via un lien de navigateur.

Les intentions écoutées par l'application sont le schéma « https://OkCupid.com », le schéma personnalisé « OkCupid:// » et plusieurs autres schémas :

ok-2

Un pirate peut envoyer un lien personnalisé contenant les schémas mentionnés ci-dessus. Comme le lien personnalisé contiendra le paramètre « section, » l'application mobile ouvrira une fenêtre WebView (navigateur) : l'application mobile OkCupid. Toute requête sera envoyée avec les cookies des utilisateurs.

À des fins de démonstration, nous avons utilisé le lien suivant :

ok-3

L'application mobile ouvre une fenêtre WebView (navigateur) avec JavaScript activé

Vulnérabilité XSS réfléchie

Au fil de notre étude, nous avons découvert que le domaine principal d’OkCupid, https://www.OkCupid.com, est vulnérable à une attaque XSS.

Le point d'injection de l'attaque XSS a été trouvé dans la fonctionnalité des paramètres utilisateur.

La récupération des paramètres du profil de l'utilisateur s'effectue au moyen d'une requête HTTP GET envoyée au chemin suivant :

Le paramètre section est injectable et un pirate pourrait l'utiliser afin d'injecter du code JavaScript malveillant.

Pour les besoins de la démonstration, nous avons ouvert une fenêtre d'alerte vide.
Remarque : Comme nous l'avons indiqué ci-dessus, l'application mobile ouvre une fenêtre WebView, et le code XSS est exécuté dans le contexte d'un utilisateur authentifié utilisant l'application mobile OkCupid

ok-4
Okcupid5

.

Exposition des données sensibles et réalisation d'actions au nom de la victime

Jusqu'à présent, nous pouvions lancer l'application mobile OkCupid en utilisant un lien profond, OkCupid://, contenant du code JavaScript malveillant dans le paramètre section.La capture d'écran suivante montre le code malveillant XSS final qui charge jQuery puis le code JavaScript depuis le serveur des pirates : (Veuillez noter que la section supérieure contient le code XSS, et que la section inférieure est le même code mais avec encodage URL) :

Okcupid6

La capture d'écran suivante montre une requête HTTP GET contenant le code XSS final (paramètre section) :

Okcupid7

Le serveur réplique le code envoyé précédemment dans le paramètre section et le code JavaScript injecté est exécuté dans le contexte de la WebView.

Okcupid8

Comme mentionné précédemment, le code XSS final charge un fichier JavaScript depuis le serveur des pirates. Le code JavaScript chargé sera utilisé pour l'exfiltration. Il contient 3 fonctions 

  1. steal_token : vole le jeton d'authentification des utilisateurs, oauthAccessToken, et l'identifiant des utilisateurs, userid. Les informations sensibles des utilisateurs (IPI), telles que l'adresse électronique, sont également exfiltrées.
  2. steal_data : vole le profil et les données privées des utilisateurs, leurs préférences, les caractéristiques des utilisateurs (par ex. les réponses données lors de l'inscription), et plus encore.
  3. send_data_to_attacker : envoyer les données recueillies dans les fonctions 1 et 2 au serveur des pirates.

Fonction steal_token :

ok-9

La fonction crée un appel API vers le serveur. Les cookies des utilisateurs sont envoyés au serveur puisque le code malveillant XSS est exécuté dans le contexte de la WebView de l'application.

ok-10

Le serveur répond avec un JSON contenant l'identifiant de l'utilisateur et le jeton d'authentification :

ok-11

Fonction steal_data :

ok-12

La fonction crée une requête HTTP vers la destination https://www.OkCupid.com:443/graphql.

Sur la base des données exfiltrées dans la fonction steal_token, la requête est envoyée avec le jeton d'authentification et l'identifiant de l'utilisateur.

ok-13

Le serveur répond avec toutes les informations concernant le profil de la victime, y compris son adresse email, son orientation sexuelle, sa taille, sa situation familiale, etc.

ok-14

Fonction send_data_to_attacker :

ok-15

La fonction crée une requête POST vers le serveur des pirates contenant toutes les informations récupérées dans les appels de fonction précédents (fonctions steal_token et steal_data).

La capture d'écran suivante montre une requête HTTP POST envoyée au serveur des pirates. Le corps de la requête contient toutes les informations sensibles de la victime :

ok-16

L'exécution d'actions au nom de la victime est également possible grâce à l'exfiltration de son jeton d'authentification et de son identifiant. Ces informations sont utilisées dans le code JavaScript malveillant (tout comme dans la fonction steal_data).

Un pirate peut exécuter des actions telles que l'envoi de messages et la modification des données du profil grâce aux informations exfiltrées dans la fonction steal_token :

  1. Le jeton d'authentification, oauthAccessToken, est utilisé dans l'en-tête de l'autorisation (valeur du détenteur).
  2. L’identifiant de l'utilisateur, userId, est ajouté au besoin.

Remarque : Un pirate ne peut prendre complètement le contrôle du compte puisque les cookies sont protégés par HTTPOnly.

Vulnérabilités de la plateforme web

Une mauvaise configuration de la politique CORS (partage de ressources entre origines multiples) entraîne une exposition des données sensibles

Au cours de l’étude, nous avons constaté que la politique CORS du serveur API api.OkCupid.com n'est pas configurée correctement et permet à n'importe quelle origine d’envoyer des requêtes au serveur et de lire ses réponses.

À des fins de démonstration, la requête suivante est envoyée au serveur API depuis l'origine http://OkCupidmeethehacker.com :

ok-17

Le serveur ne valide pas correctement l'origine et répond avec les informations demandées. De plus, la réponse du serveur contient l'option Access-Control-Allow-Origin: http://OkCupidmeethehacker.com et les en-têtes Access-Control-Allow-Credentials: true :

ok-18

Nous avons alors réalisé que nous pouvions envoyer des requêtes au serveur API depuis notre domaine (OkCupidmeethepirate.com) sans être bloqués par la politique CORS.

Dès qu'une victime est authentifiée sur l'application OkCupid et se rend sur l'application web des pirates (http://OkCupidmeethehacker.com), une requête HTTP GET est envoyée à https://api.OkCupid.com/1/native/bootstrap contenant les cookies de la victime. Le serveur répond avec un JSON contenant le jeton d'authentification (oauth_accesstoken) et le user_id de la victime.

ok-19

Nous avons trouvé des données encore plus utiles dans l'API de bootstrap, une API sensible du serveur d’API :

ok-20

La capture d'écran suivante montre l'exfiltration de données sensibles à partir de la destination /profil/, en utilisant le user_id de la victime et l’access_token :

ok-21

La capture d'écran suivante montre l'exfiltration des messages de la victime à partir de la destination /1/messages/, en utilisant le user_id de la victime et l’access_token :

ok-22

Conclusion

Le monde des applications de rencontres en ligne s'est développé rapidement au fil des ans et a atteint sa maturité actuelle avec la transition vers le monde digital, en particulier au cours des six derniers mois depuis l'apparition du Coronavirus. La « nouvelle normalité » telle que la « distanciation sociale » a poussé les gens à ne compter que sur les outils digitaux pour faciliter leurs rencontres.

L’étude présentée ici montre les risques associés à l'une des applications les plus anciennes et les plus populaires de ce secteur. Le besoin urgent de protection de la vie privée et des données devient bien plus crucial lorsque tant d'informations privées et intimes sont stockées, gérées et analysées dans une application. L'application et la plateforme ont été créées pour rassembler les gens, mais bien sûr, là où vont les gens, les criminels suivent, à la recherche de proies faciles.

Afin de préserver la sécurité de leurs données, nous invitons les utilisateurs d'OkCupid à (faire tout le nécessaire pour mettre à jour leur application).

adding all to cart
False 0
File added to media cart.