Theodo France

Theodo France

IT / Digital, Logiciels

Paris, Casablanca, London, Lyon, Nantes

Explorez leurs posts

Parcourez les posts publiés par l’entreprise pour une immersion dans leur culture et leurs domaines d’expertise.

Petit Poucet : le concours étudiants entrepreneurs, repris par les fondateurs de Theodo, entre dans une nouvelle ère

Depuis plus de 20 ans, Petit Poucet soutient l’entrepreneuriat étudiant en accompagnant les jeunes créateurs et créatrices d’entreprise qui veulent changer le monde. C’est une orga…

21/03/2025

La recette du Big Hack

Et si vous pouviez commander un menu chez McDonald’s pour 1 centime ? Ou encore vous faire livrer la commande d’un autre utilisateur ? C’est ce qu’a réussi Eaton Zveare sur le site…

28/03/2025

Comment bêta-tester son produit pour assurer son adoption ?

En octobre dernier, en tant que Lead PM pour Bpifrance, j’ai contribué à la mise en production d’un nouveau parcours visant à optimiser le temps des collaborateurs sur la banque en…

26/03/2025

Tech Radar mobile

Inspiré du retour d’expérience de notre quotidien et co-construit par notre comité de contenu composé de 13 experts, notre Tech Radar est le premier à présenter un focus 100% mobil…

28/03/2025

La méthode OKR, la solution miracle des PM pour prioriser ?

En novembre dernier, mon équipe et moi nous sommes retrouvés face à un dilemme, alors que nous travaillions sur la roadmap de fin d’année : les deux objectifs de notre produit, hau…

26/03/2025

How user-centric product design helped me craft a great product from afar

This summer, I had the unique opportunity to work on a project in Costa Rica. For the first time in my career, I found myself literally an ocean away from my users. This geographic…

26/03/2025

Les Observables en 2025 : Guide de Plomberie Moderne

Découvrez pourquoi les Observables restent indispensables à l'ère des Signals, et maîtrisez leurs concepts clés (subscribe, pipe, switchMap) pour une gestion efficace des flux de d…

28/03/2025

Une organisation “product-led”, ça veut dire quoi ?

Quel est le point commun entre Airbnb, Google, Spotify et Blablacar ? Ces entreprises ont décidé de mettre le produit au coeur du fonctionnement de leur organisation. Et ces entrep…

26/03/2025

La recette du Big Hack

Theodo France

La recette du Big Hack

Et si vous pouviez commander un menu chez McDonald’s pour 1 centime ? Ou encore vous faire livrer la commande d’un autre utilisateur ? C’est ce qu’a réussi Eaton Zveare sur le site de McDonald’s Inde dans le cadre d’un programme de bug bounty. Ce type de programme, mis en place par certaines entreprises, récompense les chercheurs en cybersécurité qui découvrent et leur signalent des failles.

Seule l’application utilisée dans la moitié sud-ouest de l’Inde était concernée par ces vulnérabilités, et, sauf preuve du contraire, il n’a jamais été possible de les exploiter en France.

⚙️ Un peu de contexte

De nombreuses failles ont été découvertes, nous allons seulement en aborder une dans cette newsletter. Grâce à cette vulnérabilité, il était possible de changer le prix d’une commande avant de payer.

Pour l’exploiter, le chercheur commence par ajouter plusieurs produits à son panier, pour un total de ₹5681 (~62€).

Capture d’écran 2025-03-28 à 14.49.38.png

Au moment de confirmer la commande et avant de passer au paiement, le navigateur envoie une requête "POST" sur la route "/order". Celle-ci contient tous les détails de la commande. Notamment, le montant total de la commande (dans le champ "amount").

Capture d’écran 2025-03-28 à 14.50.18.png

Puisque le champ "amount" est présent dans la requête, le chercheur essaie de le modifier en rejouant l’appel à la route "POST /order". L’attaque échoue, parce que, sur cette route spécifique, un mécanisme de signature empêche la modification du payload.

Cependant, une autre route attire l’attention du chercheur. La route "PUT /cart/:cartId" existe pour modifier l’entité “Cart” (le panier). C’est cette route qui est appelée lorsqu’un produit est ajouté au panier par exemple.

Lorsque le navigateur appelle cette route, il reçoit une réponse du serveur avec le format suivant :

Capture d’écran 2025-03-28 à 14.51.19.png

Cette réponse semble inclure tous les champs de l’entité Cart, et on y retrouve certains champs qui étaient présents dans le payload de la requête, tels que la quantité des articles. Et, ici aussi, on retrouve le prix (gross_price). On peut donc supposer que ce champ fait partie de l’entité Cart également. Serait-il possible de le modifier lui aussi ?

Le chercheur tente alors d’appeler cette route PUT en passant un prix de 1 rupee dans le champ "gross_price". Et contre toute attente, la requête fonctionne :

Capture d’écran 2025-03-28 à 14.52.06.pngCapture d’écran 2025-03-28 à 14.53.30.pngCapture d’écran 2025-03-28 à 14.53.59.png

Le chercheur réussit donc à payer et à valider sa commande (désormais de seulement 1 rupee, soit environ 0.11€). Étant un hacker éthique, il l’annule après ses tests.

Capture d’écran 2025-03-28 à 14.54.28.pngCapture d’écran 2025-03-28 à 14.54.53.png

🕵️ Explication de la faille

Cette faille, appelée “Mass Assignment” survient souvent lorsqu’il y a un couplage entre les champs attendus pour une requête HTTP et les entités métiers (telles qu’elles sont stockées dans la base de données).

Prenons l’exemple d’une application dans laquelle existe une entité “Order”. Imaginons que les développeurs ont prévu une fonctionnalité de mise à jour de la date de livraison. Dans la requête en question, seul le champ deliveryDate est normalement présent.

Capture d’écran 2025-03-28 à 14.55.21.png

Si les développeurs valident uniquement que l’utilisateur a le droit de modifier une commande, sans vérifier les champs qui ont effectivement été modifiés, on a un bon exemple de Mass Assignment.

Un attaquant peut donc modifier plusieurs champs de la base de données auxquels il n’est pas censé avoir accès.

Capture d’écran 2025-03-28 à 14.55.49.png

🛡️️ Comment se protéger

Une bonne pratique est de séparer l’entité de la base de données des objets sérialisés pour les requêtes et les réponses (appelées DTO pour Data Transfer Object). Ainsi, pour une fonctionnalité de modification de date uniquement, le serveur va ignorer ou va renvoyer une erreur à la présence de tout champ non spécifié par les développeurs.

Dans certains langages, la possibilité de modifier ou non un champ via l’API peut être mis comme propriété du champ. C’est le cas de NestJS par exemple avec les propriétés "whitelist" et "forbidNonWhitelisted".

Une autre solution serait de recalculer le prix de la commande dans le back au moment du paiement à partir des prix des articles.

🏹 Pour aller plus loin

Vous pourrez trouver plus d'informations et de ressources sur cette faille ici :

Article rédigé parGhali El Alaoui El Abdellaoui