CVE-2024-58248: une vulnérabilité de type race condition expose nopCommerce à une attaque par paquet unique
J’ai récemment découvert une vulnérabilité intéressante de type race condition dans le logiciel e-commerce nopCommerce, lors d’une nouvelle mission SWAT (SWAT est notre solution de Pen Testing as a Service proposée par Outpost24). Cette vulnérabilité, référencée sous le code (CVE-2024-58248) concerne nopCommerce, une plateforme e-commerce open source développée en C#, conçu pour aider les développeurs à créer des boutiques en ligne. Une fois exploitée, elle permet à un utilisateur malveillant de réutiliser un code de carte cadeau plusieurs fois en utilisant une technique appelée “attaque par paquet unique” (single packet attack). Bien exécutée, cette attaque permettait à l’utilisateur malveillant de recevoir des articles gratuitement.
Je vais vous expliquer comment j’ai découvert cette CVE spécifique et vous partager ce qu’il faut savoir concernant les vulnérabilités de type race condition ainsi que les attaques à paquet unique.
Comment la vulnérabilité CVE-2024-58248 est-elle exploitée ?
Un hacker est capable d’ajouter des articles au panier dans deux sessions différentes, puis d’entrer le même code de carte cadeau dans chacune des sessions. Il peut ensuite poursuivre le processus de paiement dans chaque session jusqu’à ce qu’il atteigne la page contenant le bouton “Confirmer”. À ce stade, si le cybercriminel intercepte la requête sortante envoyée vers /checkout/OpcConfirmOrder/, il peut alors lancer une attaque à paquet unique. Lorsque les deux requêtes sont traitées en parallèle, elles vérifient chacune le solde de la carte cadeau avant qu’il ne soit mis à jour avec la nouvelle valeur, ce qui entraîne une race condition.
Chronologie des événements
- 07/08/2024 : Date de découverte de la vulnérabilité
- 08/08/2024 : Premier contact établi avec l’éditeur
- 21/08/2024 : Rédaction complète envoyée à l’éditeur
- 29/08/2024 : L’éditeur confirme la vulnérabilité
- Janvier 2025 : Signalement à MITRE
- Avril 2025 : Attribution du numéro CVE par MITRE
À noter que l’éditeur a indiqué avoir corrigé la vulnérabilité en décembre 2024. Cependant, notre analyse montre que la vulnérabilité existe toujours. Nous en avons informé l’éditeur.
Qu’est-ce qu’une vulnérabilité de type race condition ?
Une race condition (condition de concurrence) se produit lorsque deux ou plusieurs threads, processus ou acteurs externes accèdent et manipulent simultanément la même ressource partagée (comme la mémoire, un fichier ou un périphérique matériel) et que le résultat final dépend de l’ordre exact d’exécution de leurs opérations. Puisque cet ordre d’exécution étant non déterministe, vous pouvez obtenir un comportement inattendu (voire incorrect).
Une race condition est fondamentalement une question de timing et d’accès concurrent à des données. Lorsque plusieurs acteurs interagissent avec le même état mutable partagé sans coordination, leurs actions peuvent se chevaucher de manière imprévisible, ce qui peut entraîner des erreurs logiques, des incohérences, des crashs ou même des failles de sécurité. Une synchronisation rigoureuse (ou mieux encore, concevoir des systèmes sans état mutable partagé) est la meilleure défense.
Comment fonctionne une race condition
Un exemple simple dans une application web : prenons le cas d’une application web qui organise un concours où chaque utilisateur ne peut participer qu’une seule fois. L’application garde une trace de la participation d’un utilisateur à l’aide de la variable has_participated, initialisée à false, puis mise à true lorsqu’un utilisateur participe au concours. Le flux classique lors d’une inscription pourrait ressembler à ceci :
- Vérifier si l’utilisateur a déjà participé
- Inscrire l’utilisateur au concours
- Définir la variable has_participated sur true
Si aucun mécanisme de synchronisation ou de verrouillage n’est en place, cela créera une race condition dans le cas où deux ou plusieurs requêtes provenant du même utilisateur sont traitées en parallèle. Ces requêtes “s’affrontent” pour passer la vérification décrite à l’étape 1.
Pourquoi les race conditions sont-elles difficiles à détecter ?
- Non-déterminisme : elles ne se produisent souvent que dans des conditions de timing ou de charge spécifiques, de sorte que les tests peuvent réussir 999 fois, puis échouer de manière imprévisible à la 1000e fois.
- Heisenbugs : le simple fait d’ajouter des logs ou de déboguer peut modifier suffisamment le timing pour masquer le bug.
- Échelle : dans les systèmes distribués, la latence du réseau et le décalage d’horloge introduisent un non-déterminisme supplémentaire.
Qu’est-ce qu’une attaque par paquet unique ?
L’attaque par paquet unique (single packet attack) est une technique développée par James Kettle chez PortSwigger, qui permet de faire en sorte que deux ou plusieurs requêtes parviennent au serveur et soient traitées quasi simultanément. Pour ce faire, elle envoie une partie de chaque requête, tout en retenant les derniers octets de chacune. Ensuite, dans un seul paquet TCP (d’où le nom), les derniers octets restants de chaque requête sont envoyés. Cela signifie que le serveur ne commence pas à traiter les requêtes tant qu’il n’a pas reçu le paquet contenant les derniers octets. Cela permet ainsi de traiter les requêtes en parallèle.
Grâce à cette technique, la gigue réseau et d’autres facteurs externes deviennent quasi nuls, rendant les requêtes parfaitement synchronisées. Cela ouvre la porte à des attaques par synchronisation temporelle et à des race conditions qui étaient jusqu’ici considérées comme irréalisables en conditions réelles.
Trouvez les vulnérabilités avec SWAT
Testez vos applications en temps réel pour détecter les dernières vulnérabilités. SWAT assure une surveillance continue des applications web accessibles depuis Internet via une solution SaaS. Entièrement personnalisable selon vos besoins, ce qui minimise la charge inutile ou les risques pour les environnements sensibles. La plupart des vulnérabilités sont détectées par notre équipe interne d’experts, puis vérifiées par un expert pentest confirmé. Vous pouvez également interagir directement avec nos experts en sécurité pour confirmer les détections et obtenir des recommandations de remédiation, le tout via le portail. Réservez votre démonstration en direct dès aujourd’hui.