Bonjour à tous,
Security Focus a révélé hier 3 failles de sécurité de type XSS sous Magento. Philippe de Wikigento a signalé ce rapport à travers
ce billet.
Brièvement, les risques relatifs liés à l'exploitation de ces failles sont multiples : vol d'identifiant de session, récupération des identifiants de l'administrateur, que du bon en somme !
Ces failles sont accessibles depuis 3 pages Magento :
1) Le Downloader : [chemindeMagento]/downloader
Pour tester, rendez-vous à l'url [chemindeMagento]/downloader?return=%22%3Cscript%3Ealert(xss)%3C/script%3E.
Et hop ! Une fenêtre d'alerte avec le contenu "xss" et une page "déformée".
(
Insertion d'une image potentiellement "piégée")
2) La page de login de l'administration : [chemindeMagento]/admin
Pour tester, entrez :
"><script>alert('xss')</script>
dans le champ "Nom d'utilisateur", mettez n'importe quoi en mot de passe, envoyez, au reload de la page vous verrez une fenêtre d'alerte avec le contenu "xss" et à nouveau une page "déformée".
3) La page de renvoi du mot de passe perdu pour l'administateur : [chemindeMagento]/admin/admin/index/forgotpassword/
Même procédure que 2).
Varien a été informé de l'existence de ces failles il y a près d'un mois mais j'ai téléchargé la 1.2.1.1 et ces failles sont toujours présentes dans cette version.
Correctifs
En attendant un correctif officiel, Fragento vous propose des patchs maison :
1) Correctif pour le Downloader
Dans le fichier : downloader\Maged\Model\Session.php
A la ligne n° 58
Remplacez le code :
if (!empty($_GET['return'])) {
$this->set('return_url', $_GET['return']);
}
Par :
if (!empty($_GET['return'])) {
$this->set('return_url', htmlentities($_GET['return']));
}
2) Correctif pour la page de login
A défaut de modifier le noyau - ce qui empêcherait toute mise à jour, modifiez le template de l'administration.
Dans le fichier : app\design\adminhtml\default\default\template\login.phtml
Ligne : 54
Remplacez le code :
value="<?php echo $username ?>"
par :
value="<?php echo htmlentities($username) ?>"
3) Correctif pour la page de renvoi du mot de passe
A défaut de modifier le noyau - ce qui empêcherait toute mise à jour, modifiez le template de l'administration.
Dans le fichier : app\design\adminhtml\default\default\template\forgotpassword.phtml
Ligne : 57
Remplacez le code :
value="<?php echo $email?>"
par :
value="<?php echo htmlentities($email) ?>"
Remarques :
Vous êtes fortement invités à diffuser le lien de ce sujet afin d'éviter des déconvenues aux utilisateurs de Magento ayant un site en production
Si vous copiez/collez les bouts de codes, assurez-vous que les guillemets sont conservés
D'une manière générale n'accédez jamais ni au Downloader ni à l'Administration via un lien fourni par une personne tierce, mais toujours par un accès direct, pour éviter tout risque de phising
Ces correctifs n'affectent pas les fonctionnalités de Magento
Tout avis d'un autre développeur sur ces correctifs "rapides & maison" est bienvenue ! Je n'ai pas la prétention que ces correctifs soient les seuls possibles, et je ne garantis pas leur efficacité pleine et totale (même si après test toute injection de code est demeurée vaine)
Sécurisation complémentaire ET la plus efficace au final
Il s'agit de protéger l'accès au chemin de l'administration et au Downloader par une authentification HTTP.
Vous trouverez un "mode d'emploi" réalisé par Philippe
ici.