NBS System : Advisory sur la faille Magento / PayPal Le 19/04/2012 par Antonin le Faucheux Versions affectées : EE pré 1.10.1 et CE pré 1.5, site proposants PayPal Faille PayPal sous Magento ou comment faire ses achats (presque) gratuitement La faille se situe dans le module de paiement PayPal de Magento, sachant que les deux sociétés font partis du même groupe, c est encore un peu plus étrange. Un de nos clients a été visé par la faille que nous allons détailler dans cet article. Heureusement, dans le cas de notre client, celui ci procédait à des vérifications manuelles systématiques qui lui ont permis de déjouer l attaque. Pourquoi publier un advisory sur cette faille, sachant que des personnes peu recommandables manient fort bien Google et vont finir par tomber dessus. La raison est simple : via diverses sources, nous savons que cette faille est activement exploitée depuis un certain temps et donc qu'elle représente bien une menace réelle. Les pirates sont donc déjà au courant mais pas les victimes. La faille a été remontée à Magento et est déjà corrigée dans les dernières versions (EE > 1.10.1 ou CE > 1.5). Hélas, Magento Inc. est adepte du «silent patching» qui se traduit en bon français par «corriger les problèmes de sécurité sans prévenir pour que nos clients continuent de croire que tout va bien». Donc, même si la faille est corrigée, aucune publication officielle de Magento Inc. n informera ses clients que cette faille existe et ne leur permettra de se prémunir. Le second, problème (et non des moindres) c est que Magento Inc. ne fournira pas de correctif pour les versions antérieures ce qui veut dire qu un grand nombre de boutiques sous Magento sont aujourd hui vulnérables sans le savoir mais surtout, sans solution. Cet article vise à expliquer cette faille et à proposer une solution pour les possesseurs de sites vulnérables. La faille nous a été révélée par un de nos clients en version Enterprise à l origine (qui ne souhaite pas voir son nom divulgué) et le correctif a été mis au point par l agence DnD (www.dnd.fr).
Exploitation de la faille Étape 1 : La commande Nous voici rendus sur notre boutique Magento favorite afin de réaliser un achat. Pour l exemple, nous allons acheter un seul article mais la faille reste exploitable avec plusieurs articles. Une fois notre article ajouté au panier et le transporteur choisi nous arrivons à un total TTC de 132,00.
Étape 2 : Interception et modification Une fois la validation passée, nous choisissons de payer avec PayPal et validons la requête. A ce stade nous interceptons tout le trafic http et https passant par notre navigateur via le proxy Burp Suite afin de pouvoir visualiser et modifier les échanges entre celui ci et les serveurs Web. Nous interceptons notamment la requête suivante vers PayPal. Cette requête semble contenir un certain nombre d informations mais la partie qui nous intéresse se situe à la fin. En effet, on peut y distinguer le prix de notre article 97,83 HT, la TVA et les frais de livraison.
Ces données étant envoyées depuis notre navigateur vers le site de PayPal, il nous est possible de les modifier afin de tenter d obtenir une «réduction». Nous avons maintenant un article à 1,50 TTC et une livraison à 0,50 TTC qui qui nous donne un prix total TTC de 2,00. Une réduction imbattable de plus de 98%... Aucune vérification d intégrité des informations n est faite par PayPal et les prix modifiées sont repris tels quels dans le récapitulatif de commande.
Étape 3 : Profit A ce stade, il ne reste plus qu à payer notre commande. De retour sur le site marchand, on nous confirme que notre commande à bien été payée. Le tableau de bord montre que la commande d un montant de 132 est en cours de traitement. Le détail de notre commande reprend bien les montants du site et non le montant payé sur PayPal. Il n est mentionné nulle part que nous n avons déboursé que 2 sur les 132 que coutait cet article.
Tout site n effectuant pas la double vérification des versements reçus sur le compte PayPal avant envoie pourra être victime, cela est encore plus vrai pour les très nombreux sites qui automatisent leurs envois. L exploitation de cette faille est donc particulièrement triviale et est à la portée de toute personne ayant des connaissances basiques en informatique. Tout ça est très intéressant me direz vous mais comment se protéger de cette faille?
Patcher la faille La solution est celle fournie par l agence de développement de l un de nos clients (Agence DnD, www.dnd.fr) qui a travaillé en relation avec PayPal. Il s agit en fait de chiffrer et de signer les informations qui vont être transférées entre PayPal et le site marchand afin d empêcher toute modification par l utilisateur. Une description générale de la protection est consultable sur le site PayPal : (https://cms.paypal.com/fr/cgi bin/marketingweb?cmd=_rendercontent&fli=true&content_id=developer/e_howto_html_encryptedwebpayments#id08a3i0p0b30) Étape 1 : Génération et téléchargement de la clé privée et certificat public Vous pouvez générer le certificat en ligne de commande avec openssl ou alors vous rendre sur le site suivant http://www.stellarwebsolutions.com/certificates/stellar_cert_builder.php pour générer le certificat en ligne. La commande openssl ou le site vont vous générer un couple clé publique / clé privée. Placez les fichiers dans le répertoire lib/paypal de votre installation Magento. PS : il est conseillé de garder (ou d ajouter) une partie aléatoire devant le nom de la clé privée afin d éviter qu un attaquant arrive à deviner le nom de votre clé privée et arrive potentiellement à la télécharger depuis son navigateur. Étape 2 : Configuration de PayPal pour utiliser les certificats 1. Connectez vous à votre compte PayPal. 2. Allez dans l onglet Profil. 3. Dans la colonne Preferences Du Vendeur, cliquez sur Certificats de paiement sur site marchand.
4. Cliquez sur Ajouter. 5. Cliquez sur Parcourir, et sélectionner votre certificat public (dans mon cas) "12345010577c235ac3b483a40518ghk pubcert.pem". 6. Une fois votre certificat public mis en ligne avec succès, celui ci doit apparaitre dans la rubrique «Vos certificats Publics». 7. Notez le Cert ID, car vous en aurez besoin pour la suite. 8. Téléchargez le cerficat public de PayPal Étape 3: Mise en place des certificats dans Magento 1. Placez le certificat public de PayPal que vous venez de télécharger dans le répertoire lib/paypal de Magento. 2. Editez le fichier app/code/local/mage/paypal/block/standard/redirect.php et ajouter le Cert ID récupéré sur le site de PayPal. Vérification du correctif Si l on tente de rejouer l attaque, on se rend compte que désormais les informations qui transitent vers PayPal sont chiffrées et ne sont plus modifiables par l utilisateur.