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.

Theodo Named 2025 Google Cloud Services Partner of the Year

Las Vegas, April 8, 2025 Theodo today announced that it has received the 2025 Google Cloud Services Partner of the Year. Theodo is being recognized for its achievements in the Goog…

04/07/2025

REX après la migration d’une feature Android/iOS vers KMP

Dans un premier article, nous avons exploré comment migrer progressivement une application native Android/iOS vers Kotlin Multiplatform (KMP). Si vous avez suivi ce guide, vous ave…

04/07/2025

ShedLock : Gérer efficacement les tâches planifiées dans une architecture multi-instances

Introduction Pour les applications d'entreprise, en 2025 l’exécution de tâches planifiées est un besoin courant : génération de rapports, traitements par lots, synchronisation de d…

04/07/2025

Comment diviser par 2 votre temps de CI grâce à ces simples astuces

Chez Theodo HealthTech, notre politique est de créer un code de qualité tout en respectant nos délais de livraison. Cependant, pendant trois sprints consécutifs, nous avons livré d…

08/04/2025

How QRQC helps me better manage bugs on my project?

As a software developer, you spend most of your time delivering code and then fixing bugs you introduced in your code. The Pareto principle is a great way to represent our day-to-d…

04/07/2025

How we migrated from AWS Glue to Snowflake and dbt

Today, I’ll tell you about our ETL migration from AWS Glue to the Snowflake and dbt modern data stack. My team’s mission is to centralize and ensure data reliability from multiple…

04/07/2025

Sécuriser les partages Notion : guide pour tous

Chez Theodo Fintech, nous avons fait de Notion notre QG digital. Documentation produit, projets tech, comptes rendus, référentiels clients ou financiers… tout y passe. Et c’est bie…

04/07/2025

Construire un produit Gen AI : le guide de survie pour les PMs

Bienvenue dans l'ère de l'IA générative, où les machines créent du contenu de manière autonome. Pour les product managers (PMs), cela représente une révolution autant qu'un défi. L…

08/04/2025

Qu’est-ce que le scaling ?

Une bonne application est une application qui tient sa charge d’utilisateurs, notamment grâce à un scaling controlé. Dans cet article nous aborderons ce sujet, et plus particulière…

04/07/2025

How LLM Monitoring builds the future of GenAI ?

Discover how Langfuse offers secure, open-source monitoring for LLM and GenAI solutions. Large Language Models (LLMs) are popping up everywhere and are more accessible than ever. W…

04/07/2025

Les annotations java custom pour respecter l’architecture hexagonale

Le problème que l’on veut résoudre Lorsque l’on développe une API avec Spring Boot, il est fréquent d’utiliser les annotations fournies par le framework, telles que @Service, @Comp…

04/07/2025

Le kit de survie du Product Manager responsable en 4 étapes

Alors que j’étais tranquillement en train de me laisser charmer par la dégustation gratuite de tofu fumé de mon Biocoop l’année dernière, une soudaine prise de conscience a heurté…

08/04/2025

Faites des Plugins pas la Guerre: REX sur ma bataille pour écrire un plugin

Imaginez commencer chaque projet avec tous les outils configurés et prêts à l’emploi. Le rêve, non ? En tant que développeur Android, j’ai toujours eu à portée de main les outils n…

04/07/2025

Don’t use Langchain anymore : Atomic Agents is the new paradigm !

Introduction Since the rise of LLMs, numerous libraries have emerged to simplify their integration into applications. Among them, LangChain quickly established itself as the go-to…

04/07/2025

Optimize Your Google Cloud Platform Costs with Physical Bytes Storage Billing

In today's data-driven world, cloud providers are essential for efficiently managing, processing, and analyzing vast amounts of data. When choosing one such provider, Google Cloud…

08/04/2025

Tech Radar Cloud

Ce Tech radar regroupe une cinquantaine de technologies Cloud et DevOps éprouvées par les experts de Theodo Cloud durant plus de 4 ans de projets. Téléchargez le 2ème volume de not…

08/04/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