Skip to main content

La sécurité de Magento nécessite un correctif supplémentaire pour corriger une vulnérabilité de nettoyage des données

Écrit par
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog feature security alert purple

24 février 2022

0 minutes de lecture

Dans le monde de la technologie, nous sommes souvent soumis à une forte pression pour corriger du code déployé, mettre à jour un composant d’infrastructure ou appliquer un correctif. Souvent, nous en sommes informés au dernier moment et il aurait même fallu le faire cinq minutes plus tôt. Avec toute intervention « sans délai », il faut trouver le juste équilibre entre se précipiter pour corriger immédiatement et prendre le temps de tester et de vérifier.

Récemment, un correctif critique a été publié pour Magento Ecommerce, Magento Open Source et les versions d’Adobe Commerce de Magento, après la découverte d’un problème critique par des chercheurs en sécurité sur la plateforme de commerce électronique très répandue. CVE-2022-24086 désignait une vulnérabilité permettant à un utilisateur non authentifié d’exploiter une injection SQL ou une injection d’objet PHP au moment du paiement.

Adobe Security a alors déployé un premier correctif, en réagissant rapidement pour proposer une solution. Quelques jours plus tard, des chercheurs ont découvert que le correctif ne suffisait pas à neutraliser le code vulnérable. Un nouveau CVE-2022-24087 a alors été publié et un second correctif déployé.

Un correctif pour la vulnérabilité nouvellement identifiée est disponible dans la dernière alerte de sécurité d’Adobe. Le nouveau correctif doit être appliqué après le correctif initial pour CVE-2022-24086.

Dans le domaine de la sécurité des applications, j’aime toujours vérifier avec soin les déploiements, les bibliothèques et tout ce qui peut avoir un impact sur les utilisateurs finaux d’une plateforme. Alors, examinons le dernier correctif et voyons ce qui a changé.

Examen du correctif CVE-20220-24087

Avant d’entrer dans le détail du nouveau correctif MDVA-43443, revenons sur le correctif initial MDVA-43395 pour comprendre son rôle.

Il est important de noter que les deux vulnérabilités concernent uniquement Magento Open Source et Adobe Commerce dans les versions supérieures ou égales à 2.3.4 et antérieures à 2.4.5-p1 ou 2.3.7-p2.

Le correctif initial (MDVA-43395) a ajouté un nettoyage sécurisé des données saisies par l’utilisateur pendant le processus de paiement, dans la logique de l’application de boutique Magento. /Email/Model/Template/transDirective et VarDirective.php ont tous deux été dotés de motifs preg_replace() et preg_match() pour aider à nettoyer les types de caractères indésirables saisis par l’utilisateur.

Extrait de code montrant une boucle preg_replace en PHP avec un motif d’expression régulière et une condition preg_match.

Après le déploiement du correctif, les chercheurs en sécurité ont découvert qu’il ne suffisait pas à neutraliser le vecteur d’attaque et qu’il ouvrait même la voie à l’apparition de vulnérabilités encore plus profondes dans le framework.

Le nouveau correctif (MDVA-43443) ajoute une fonction réutilisable au framework, appelée sanitizeValue(). Celle-ci étend \Magento\Framework\Filter\Template et effectue une vérification de nettoyage à l’aide de preg_replace.

Diff de code montrant une classe Filter de Magento avec une fonction sanitizeValue qui renvoie un booléen ou supprime les accolades d’une chaîne de caractères.

sanitizeValue() remplace ensuite le code de nettoyage preg_match() et preg_replace() ajouté par le correctif initial MDVA-43395.

Diff de code montrant le filtre de modèle Magento qui assainit le texte généré avant d’appliquer des modificateurs

La fonction sanitizeValue() est ensuite utilisée à plusieurs endroits dans la base de code, notamment pour charger les types de valeurs de configuration et personnalisées qui ont été nettoyées.

Diff de code PHP ajoutant des appels à sanitizeValue pour valider les paramètres HTTP de Magento et les valeurs des variables personnalisées

C’est dans blockDirective() qu’une nouvelle étape de nettoyage est effectuée : les correspondances de caractères et le nettoyage sont étendus dans le cœur de \Magento\Framework\FilterTemplate.

Extrait de code PHP définissant blockDirective et remplaçant les doubles accolades par des entités HTML

resolveBlockDirective passe d’une fonction publique à une fonction privée, et layoutDirective est remplacée par resolveLayoutDirective.

Le passage d’une fonction publique à une fonction privée est important pour la sécurité des applications PHP, car la déclaration d’une fonction privée signifie qu’elle ne peut être utilisée que depuis sa classe parente. Une fonction publique, elle, peut être appelée depuis n’importe quel endroit de l’application.

Différence de code montrant le renommage d’une fonction de directive de mise en page PHP de Magento en resolveLayoutDirective et la vérification des paramètres de la directive.

Les deux correctifs sont disponibles dans le bulletin de sécurité APSB22-12 d’Adobe. Vous pouvez les installer avec PHP Composer ou les fusionner dans une base de code issue d’un fork.

Pensez à effectuer des sauvegardes sécurisées avant d’appliquer les deux correctifs, et à tester le code avant son déploiement.

Inscrivez-vous à Snyk pour recevoir des alertes sur les nouvelles vulnérabilités

Pour les grands projets open source comme Magento, je surveille toujours le dépôt public depuis mon tableau de bord Snyk.

Cliquez sur Add Project, puis surveillez les dépôts GitHub publics.

Interface de recherche de projets affichant les résultats pour « magento », avec magento/magento2 sélectionné et des options d’ajout de projet pour GitHub, Cloud Foundry, Bitbucket Cloud et l’interface de ligne de commande.

C’est particulièrement utile pour les branches de développement d’un projet, car vous pouvez être alerté des problèmes potentiels pendant leur développement. Cela facilite aussi les contributions au projet : vous pouvez repérer les problèmes à corriger tant qu’il est encore en cours de développement.

Pour les projets de plateforme comme Magento, le processus de surveillance recherche les manifestes de packages, le code, les conteneurs et les configurations IaC afin d’analyser les problèmes potentiels et de les mettre en évidence. Mieux encore, il propose également des correctifs et vous guide dans l’examen des éléments détectés.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.