Aïe, comme une prémonition, le post du 23/02 sur la sécurité se trouve malheureusement très adapté à la situation :
3 failles de sécurité de type XSS, cross site scripting, viennent d’être révélées sur Security Focus ce jour à propos de Magento v1.2.0.
Numéro CVE : CVE-2009-0541
Numéro Bugtraq : 33872
En effet, trois failles de sécurité de type XSS (voir post du 23/02/2009 sur la sécurité) sont présentes dans Magento 1.2.0 et probablement dans les précédentes versions également. La primauté de cette découverte revient à Loukas Kalenderidis de Sens Of Security. Du coup, je me dis que ca vaudrait le coup de passer un test un peu en profondeur à la chasse d’autres XSS, sait on jamais. De toute façon, le « Web 2.0″ c’est une mine en terme de sécurité, si ca vous intéresse, ici, un article que j’ai publié il y a quelques années dans Hackin9 à ce sujet (il n’y a pas tout, notamment l’anti DNS pinning n’y est pas de mémoire, mais ce sont de bonnes bases).
Pas de panique, la très grande majorité de Magento repose sur Zend qui est un Framework solide donc on ne devrait pas en avoir des tonnes d’autres mais il va falloir être vigilant. De plus Varien a été prévenu par l’auteur de ces 3 failles le 21/01/2009. Yoav (Directeur Technique de Varien) a probablement lancé la chasse dans le reste du code mais Gabriel de Fragento nous indique que sur une 1.2.1.1 il a repéré le même XSS comme fonctionnel (voir commentaire). Le problème ne serait donc pas résolu malgré le fait que Sens Of Security a joué dans les normes visiblement, l’éditeur à été prévenu un mois avant la publication, ce qui semble un délai raisonnable.
Voila ce qui arrive quand on développe en dehors du framework Zend ou que l’on ne contrôle pas assez ses retours d’erreurs… Les risques de ce type, les XSS, principalement sur l’admin du backoffice, sont non négligeables.
Actions à mener rapidement
- Upgradez votre Magento ! Dès qu’une version corrigée sera disponible. Pour le moment, la dernière c’est la 1.2.1.1 au moment de la rédaction de ce billet, c’est donc une montée de version mineure si vous êtes déjà en 1.2.x, donc pas ou peu de problème (si vous n’avez pas codé dans le Core). Par contre si vous êtes en pré 1.2, ça risque d’être un peu plus sportif. De toute façon la version actuelle ne semble pas régler tout le problème.
- Mettez le bout de conf apache qui est en bas dans le fichier de virtualhost de votre site (ou faite le faire à votre hébergeur). Ça protégera votre backoffice, XSS ou pas.
- Sinon, vous pourrez prochainement appliquer le correctif logiciel qui nous sera fournit par Gabriel de Fragento
Les failles en elles mêmes
Vulnérabilité 1, page de login d’administration
Quand vous ratez un login, la valeur que vous allez entrer dans le champ « nom d’utilisateur » va être renvoyé à l’utilisateur sans encodage de la réponse :
- Allez sur la page d’administration (http://monmagento/index.php/admin ou quelque chose du genre si il y a un rewriting ou une autre racine du site, bref le /admin quoi)
- Entrez dans le champs « nom d’utilisateur » : « ><script>alert(123)</script>
(attention, le blog est susceptible d’encoder les caractères spéciaux, il faut donc le taper « à la main », le copier/coller ne marchera peut être pas) - Entez n’importe quoi dans le champ « mot de passe »
- Cliquez sur « Identifiant » et roohhhhh, une boite javascript qui vous confirme que le code dans le champ a été renvoyé sans encodage et donc exécuté par votre navigateur…
(j’ai également vérifié sur une version 1.0.x et ca marche donc il y a de grande chance que toutes les versions entre 1.0.x et 1.2.0 soient vulnérables)
Vulnérabilité 2, page « J’ai oublié mon mot de passe »
(déjà dans le principe, si tu oublie ton mot de passe admin du nackoffice, on se demande s’il est raisonnable que tu es accès à ce genre de fonction…)
- on se rend sur http://monmagento/index.php/admin/index/forgotpassword
- Dans la case email on met : « ><script>alert(123)</script>
(attention, le blog est susceptible d’encoder les caractères spéciaux, il faut donc le taper « à la main », le copier/coller ne marchera peut être pas) - on clique sur « retrieve password » et hop, une boite javascript qui annonce qu’on est vulnérable
Allez, quand on a un filon on le lâche pas,
Vulnérabilité 3, page « Magento Connect Downloader »
Là c’est directement dans l’URL qu’on peut encoder le XSS :
http://monmagento/downloader/?return=%22%3Cscript%3Ealert(123)%3C/script%3E
(attention, le blog est susceptible d’encoder les caractères spéciaux, il faut donc le taper « à la main », le copier/coller ne marchera peut être pas)
et vous connaissez l’histoire de la boite javascript tout ça tout ça…
Bon, allez je vous laisse, j’ai des clients à prévenir qu’il faut upgrader leurs Magento
Conclusion, comme d’habitude : la sécurité à un coût mais elle n’a pas de prix !
Les correctifs ont été déplacés dans un post dédié : ICI
février 24th, 2009 at 18 h 48 min
Eh ben… Je confirme la faille en 1.1.8 ;o
Pour tester bien s’assurer d’avoir un guillemet » (le blog met en forme le caractère), pareil pour l’apostrophe.
février 24th, 2009 at 23 h 12 min
Cette faille me fait réagi sur un point…
Est-il raisonnable d’avoir accès à l’interface d’administration de façon publique ? Question sécurité, j’aurais déjà tendance à blinder ce côté là (limitation par ip pour commencer).
février 25th, 2009 at 0 h 00 min
Je suis bien de ton avis Laurent… Personnellement je protège toujours l’admin de tous types de sites avec un .htaccess
Cependant, les XSS c’est dommage, le fait que ce soit sur le manque de filtrage des erreurs c’est un classique, moins dangereux, mais un classique quand même.
février 25th, 2009 at 1 h 32 min
http://demo-admin.magentocommerce.com/index.php/admin/
L’admin de démo est en 1.2.1.1 et pourtant la faille est toujours présente.
février 25th, 2009 at 1 h 48 min
Garanti sans montage :
http://img12.imageshack.us/img12/4579/magentoxss.jpg
février 25th, 2009 at 12 h 07 min
Rien à voir avec le problème remonté, mais cette page n’est pas complètement visible sous IE7 (http://www.wikigento.com/?p=406 : coupé à partir de l’étape 1).
février 25th, 2009 at 13 h 10 min
Je viens de corriger le problème. Un truc un peu bizarre de l’éditeur qui se comporte pas du tout pareil sous IE7 et FF3
Mais il était utile de toute façon de faire un article à part : http://www.wikigento.com/?p=458
février 25th, 2009 at 15 h 32 min
[...] failles Magento, on risque quoi plus précisément ? Pour les deux premières présentées dans cet article, pas grand-chose. Disons que le risque est présent mais que l’exploitation est complexe car [...]
février 25th, 2009 at 17 h 26 min
intéressant tout ça, merci pour ces infos…
A mon plus grand étonnement, je viens de regarder la notes de la nouvelle mise à jour de la version 1.2.1.1, et aucune mention en rapport à ce problème, et sous le backoffice, cette mise à jour est considérée comme mineur 8)
Et je ne sais pas si je suis le seul, mais après test de cette mise à jour à partir du sample-data.1.2.0, j’ai toujours un bug sur le javascript (sur le zoom des produits), le script permettant cela n’est même pas chargé… ?
Et pour les solutions pourquoi ne pas rajouter aussi le répertoire /downloader avec un .htaccess ?
février 25th, 2009 at 17 h 30 min
Autant pour moi pour le /downloader je ne voyais que l’étape 1 (FF 2.0)
février 25th, 2009 at 17 h 37 min
oui, j’ai eu la même info par une navigatrice sous IE7…? C’est bizarre ces soucis de présentations cross browsers, je vais jeter un œil.
février 26th, 2009 at 9 h 51 min
Je viens de tomber sur ce site et je crois que je vais revenir pour prendre des cours de sécurisation de site Magento.
Donc à bientôt !
février 26th, 2009 at 10 h 12 min
février 27th, 2009 at 11 h 34 min
A noter que le changement de chemin d’admin corrige 2 des 3 failles, plus celles-là qui vient d’être publié (et qui permet en autre d’effacer votre catalogue en 5min – testé en local):
http://artisansystem.com/blog/entry/33
février 28th, 2009 at 19 h 19 min
Le billet sur http://artisansystem.com/blog/entry/33 était intéressant mais l’auteur l’a retiré.
Pour une bonne raison : il a étalé l’info sans même prévenir auparavant la Core Team… et a présenté de plates excuses par la suite ;p
mars 10th, 2009 at 15 h 45 min
ça semble être résolu dans la version 1.2.1.2