Mathis Hammel Profile picture
Jan 15, 2022 19 tweets 7 min read Read on X
Hier soir, j'ai découvert un problème de sécurité sur l'app Elyze (numéro 1 des stores en France cette semaine) qui m'a permis d'apparaître comme candidat à la présidentielle sur le téléphone de plusieurs centaines de milliers de français.

Je vous explique ce qui s'est passé ⤵️ Image
Ça fait plusieurs jours que l'appli est sous le feu des critiques car le code n'est pas open source et plusieurs bugs y ont été relevés :

- En cas d'ex aequo, l'application favorise Emmanuel Macron

- Parfois, l'ordre affiché ne correspond pas au pourcentage ImageImage
Convaincu que ces problèmes ne proviennent pas d'une intention malveillante des créateurs de l'appli, j'ai décidé d'utiliser mes compétences en reverse engineering pour trouver l'origine des bugs et en faire un article.
Après avoir chargé l'appli dans mon outil de décompilation Android (j'utilise JADX), je vois que le cœur de l'application est quasiment vide alors que je devrais y trouver un paquet de fichiers Java. Image
En fait, comme plein d'applis récentes, Elyze est codé avec React Native, un framework JavaScript qui permet de publier la même appli sur Android et iOS sans avoir à la coder deux fois dans les langages respectifs de ces plateformes.
Tout le code de l'appli se retrouve dans un unique fichier de 9MB. Pour prendre moins de place le code est minifié, c'est à dire que la plupart des variables ont des noms très courts et les retours à la ligne sont retirés.

Autrement dit, c'est illisible. Image
Dites vous aussi que 9MB peut sembler assez peu, mais ici on travaille avec du texte : si le code devait être imprimé sur papier, ça prendrait 3000 pages !

Evidemment, seule une toute petite fraction est écrite par la team Elyze, le reste sert au fonctionnement de React Native.
En faisant des recherches, on tombe rapidement sur la liste qui nous permet de trouver le bug mettant toujours Macron en premier sur les ex-aequo : comme JavaScript utilise un algorithme de tri stable, en cas d'ex-aequo c'est l'ordre original dans la liste qui est retenu. ImageImage
L'autre bug m'a tenu éveillé pendant de longues heures, et le code illisible combiné à mon allergie au JavaScript ne m'a pas permis de comprendre ce comportement inattendu.

Mais dans mes recherches, j'ai plusieurs fois été attiré par quelque chose du coin de l'oeil.
Pour échanger des données avec le serveur, Elyze utilise principalement une base de données GraphQL qui semble contenir toutes les infos sur les propositions des candidats ainsi que les données utilisateur. Image
L'URL de la base de données se trouve aussi quelque part dans le code, avec un jeton d'authentification qui est le même pour tout le monde.

Avec l'outil GraphQLmap de l'ami @pentest_swissky, je récupère en deux commandes la structure de la base de données : ImageImage
Avoir un accès direct à GraphQL n'est pas une faille en soi : certes, c'est mieux de passer par une API qui se charge des requêtes, mais si les permissions sont bien configurées on peut se débrouiller sans.
Mais le souci justement, c'est que les permissions étaient mal configurées. Tout ce qui touchait aux candidats était autorisé en lecture et en écriture, notamment la fonction permettant d'ajouter ou de modifier une proposition... ImageImage
Les développeurs ont été réactifs pour rectifier ça (merci à @GuillaumeRozier et son carnet d'adresses immense) et j'ai passé une partie de la nuit à les aider, il n'y a pas eu à ma connaissance d'autre exploitation de cette vulnérabilité à des fins de manipulation politique.
Heureusement, les autres parties de la base de données n'ont pas été affectées : ça aurait été vraiment terrible d'avoir une fuite des données utilisateur (date de naissance, code postal, intentions de vote en 2017 et 2022, résultat de chaque swipe sur l'app) Image
On peut d'ailleurs se demander si l'engagement de confidentialité est bien respecté : à mon avis, la date de naissance et le code postal permettent assez facilement d'identifier une personne directement... Image
En résumé, le chemin d'attaque était relativement simple à exploiter :
- récupération du fichier .apk
- extraction du bundle.js
- récupération de l'endpoint GraphQL et de la clé API
- identification de la faiblesse de configuration

En tout, j'en ai eu pour environ 3 heures.
Pour conclure, je pense que les développeurs d'Elyze devraient rendre l'application open source.

On voit bien que la sécurité par l'obscurité n'empêche absolument pas les attaques, et la transparence algorithmique est nécessaire dans un contexte d'élections.
Ce thread reprend un peu d'activité aujourd'hui donc je me permets une mise à jour liée à l'actu :

Le créateur d'Elyze, qui s'est toujours revendiqué apartisan, vient de rejoindre le cabinet de la porte-parole du gouvernement. (Info Mediapart)

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Mathis Hammel

Mathis Hammel Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @MathisHammel

Mar 29
THREAD - les manipulations illicites du classement lors de la compétition la plus chère d'Europe.

Cette semaine, l'équipe de l'European Cyber Cup a trafiqué arbitrairement son scoreboard pour favoriser certaines équipes qui lui faisaient pression. 1/14 Image
Je suis coach de 10 étudiant·es de @Guardia_School qui ont participé cette semaine aux épreuves de l'European Cyber Cup.

Cette compétition est organisée par le forum InCyber (anciennement FIC, qui a discrètement changé de nom à cause de quelques casseroles).
Le prix d'inscription n'est pas rendu public, mais en 2021 je me souviens que mon entreprise avait dû payer 10.000€ pour nous inscrire, sachant que le cash prize pour l'équipe gagnante est de 5.000€ 🙃 Image
Read 16 tweets
Feb 8
J'ai besoin de votre aide pour m'aider à entraîner l'équipe de France de cybersécurité !

Quelques détails ci-dessous, merci de partager au maximum 🙏
En janvier, j'ai eu l'honneur d'être nommé entraîneur des compétiteurs français en cybersécurité, pour la prestigieuse compétition WorldSkills qui opposera 65 pays cette année.
Contrairement aux excellentes compétitions FCSC/ECSC qui sont très orientées CTF, le challenge WorldSkills va plutôt demander des compétences métier, appliquées à des environnements réalistes.
Read 6 tweets
Nov 8, 2023
THREAD

Je me suis intéressé à la cybersécurité de Crush, l'appli de rencontres pour 10-21 ans qui fait beaucoup de bruit.

J'y ai découvert un réseau de sociétés fictives qui récolte activement les données de dizaines de milliers de mineur·es. Explications ⤵️ Capture de l'appli "Crush, trouve ton crush secret" sur le store iOS.
PARTIE 1. Le fonctionnement de l'appli

Crush est une appli dont le but est de découvrir ses admirateurs secrets au collège/lycée.

Elle a été renommée "Friendzy, sondages entre amis" depuis son bad buzz.
Le principe est simple : après avoir ajouté vos amis sur l'appli, vous répondez à des questions sur vos liens d'amitié.

Dans un autre onglet, vous pouvez savoir ce que les gens ont répondu sur vous, sans voir leur nom. Sondage "La discrétion est son superpouvoir" avec 4 choix parmi mes amis sur l'appli (j'ai masqué deux noms qui appartiennent potentiellement à des vraies personnes)
Read 24 tweets
Aug 1, 2023
Droite au Coeur est toujours en maintenance, mais j'ai réussi à contourner la fermeture de l'authentification donc j'ai toujours accès au site.

La vulnérabilité initiale a été corrigée, je peux donc légalement vous expliquer la pire faille de sécurité du monde. 🧵1/9
L'interface de Droite au Coeur, comme beaucoup de sites web depuis ~2010, est dynamique.

Cela signifie que votre navigateur va d'abord télécharger le code qui gère l'affichage de la page, mais sans télécharger le contenu.

Pendant qq secondes, la page ressemble en gros à ça : Image
C'est ce squelette de page qui va ensuite faire d'autres requêtes pour récupérer le contenu, ici les profils de dating.

Pour ça, l'interface va utiliser une API : c'est un programme hébergé côté serveur, qui va récupérer et formater les données qu'on lui demande. Image
Read 10 tweets
Jul 17, 2023
🧶THREAD - Un programme de 15 lignes de code Python arrive à rivaliser avec les meilleures intelligences artificielles !

Cette drôle de découverte vient d'être publiée par une équipe de chercheurs canadiens, et risque de bouleverser le monde du Machine Learning.

Explications ⤵️ "Qui gagne ?"  À gauche, un réseau de neurones ultra perfectionné avec 340 millions de paramètres  À droite, 15 lignes de Python
La classification de texte est l'un des domaines de recherche les plus actifs en intelligence artificielle : elle consiste à trier automatiquement des textes courts dans un ensemble de catégories pré-définies. Quelques phrases classées par catégorie :  Le briquet a été inventé 3 ans avant l'allumette (Histoire)  Les crocodiles ne peuvent pas tirer la langue (Nature)  Le miel ne périme jamais (Cuisine)  Les amandiers et les pêchers sont dans la même famille d'arbres (Nature)  (Instant culture inutile : toutes ces phrases sont vraies)
Pour évaluer la performance d'un modèle, on va travailler avec des datasets spécifiques.

L'un des plus connus est basé sur 1.4 millions de questions posées sur le site Yahoo Answers, réparties en 10 catégories : Plusieurs questions triées dans un tableau par catégorie. Voici par exemple les questions de la catégorie "Société" :  Comment ont été inventés les gros mots ? Comment devenir gothique ? SI DIEU NOUS A FAIT QUI A FAIT DIEU !? Est-ce que bisexuel est plus fun ? Croyez-vous en le nouvel an chinois ? Sens de la vie ?  (oui, ces questions existent vraiment dans le dataset)
Read 33 tweets
Jul 7, 2023
Bon, j'ai trouvé une manière de cracker le nouveau shadowban Twitter 🥳

Déroulez pour + de détails ⤵️ Image
Vous le savez peut-être, certains mots sont devenus "interdits" sur Twitter : les mentionner appliquera sur vos tweets un facteur qui pénalisera généralement votre visibilité de 80% en moyenne.
Sans surprise, parmi ces termes bannis on retrouve
ВIuеsky et Τhrеads, deux réseaux sociaux concurrents de Twitter.

Normal de vouloir éviter que les utilisateurs se barrent chez la concurrence, mais Musk n'aurait pas besoin de faire ça si Twitter était en bonne santé... Image
Read 9 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(