fév 25

Correctifs des XSS Magento

1°) Mettre à jour en 1.2.1.1 ne résoud pas le problème.

2°) Gabriel de Fragento a préparé un Patch correctif pour Magento

Voici une solution de la maison, en 3 étapes, qui fonctionne de suite si vous avez le moyen de modifier les réglages de votre VirtualHost Apache ou de le faire faire par votre hébergeur.

(De tête, mais ça devrait marcher sous la plupart des Linux, avec un shell root)

Etape 1 :

CTRL+C (copier) de ce qu’il y a ci-dessous :

<LocationMatch “/admin » >
AuthUserFile /var/www/htdocs/.htpasswd
AuthType Basic
AuthName “Magento Backoffice Login”
Require valid-user
</LocationMatch>


<LocationMatch “/downloader » >
AuthUserFile /var/www/htdocs/.htpasswd
AuthType Basic
AuthName “Magento Backoffice Login”
Require valid-user
</LocationMatch>

Insérez ca dans la configuration du virtualhost de votre site (par exemple)
cat >> /etc/apache2/sites-available/magento

CTRL+V (coller)
CTRL+D (ça stop la saisie dans le fichier et le sauve)

Remplacez /var/www/htdocs/.htpasswd par le bon chemin de votre site et /etc/apache2/sites-available/magento par le chemin vers le fichier de virtualhost de votre site.

Pouvoir le faire en .htaccess aurait été l’idéal car même sans être root sur la machine, vous auriez pu patcher le problème sur votre hébergement mutualisé, mais… La directive « LocationMatch » ne fonctionne pas en .htaccess… :-(

Etape 2 :

Créez un fichier .htpasswd :
htpasswd -c /var/www/htdocs/.htpasswd backoffice
chown root.root /var/www/htdocs/.htpasswd
chmod 644 /var/www/htdocs/.htpasswd


Le programme vous demande un mot de passe, mettez en un décent. (au moins 8 caractères dont deux spéciaux) et idem, remplacez par le bon chemin pour le site, le chown et le chmod mettent des droits raisonnables sur ce fichier htpasswd.

Etape 3 :

Redémarrez Apache : /etc/init.d/apache2 restart
(un reload suffit peut être d’ailleurs, je ne sais plus)

Vérification :

Retournez à votre Admin, vous devriez avoir une fenêtre qui vous demande un login & un pass, utilisez le login backoffice et le mot de passe que vous avez tapé. Ne pas faire « retenir mon mot de passe » dans votre browser.

PS : N’oubliez pas que dans la conf d’apache (généralement /etc/apache2/apache2.conf) il doit y avoir ça :
<Files ~ « ^\.ht »>
Order allow,deny
Deny from all
</Files>

Pour empêcher qu’on puisse télécharger vos fichiers .htaccess et .htpasswd (ceci dit ca y est par défaut normalement)

Ajout par Gabriel de Fragento.org

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 du sujet sur Fragento 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)

écrit par Philippe Humeau \\ tags:


6 commentaires sur “Correctifs pour les failles de sécurité de Magento”

  1. 1. Alerte : 3 failles de sécurité XSS dans Magento ! | Communauté Magento francophone Dit :

    [...] La “To Do List” juridique du E-Commerçant ! Correctifs pour les failles de sécurité de Magento fév [...]

  2. 2. Vincèn Dit :

    Euh oui sauf qu’il faut mettre quoi comme URL pour le locationmatch si j’ai dit à Magento que mon backoffice est à l’url toto et qu’en fait quand je tape /toto ça me redirige vers /index.php/toto ???
    Merci en tout cas pour ce super article :)

  3. 3. Philippe Humeau Dit :

    En fait dans , le “/admin » est une regexp (une regular expression) qui peut être remplacé par ce que vous voulez, le principe est même générique. Il faut éviter de mettre juste index car ca mettra un login/pass à votre home mais si votre backoffice n’est pas en /admin mais en /backoffice, il suffit de mettre ou dans votre exemple.

  4. 4. Les XSS comment ca marche ! | Communauté Magento francophone Dit :

    [...] Correctifs pour les failles de sécurité de Magento fév [...]

  5. 5. Magento : après les XSS les CSRF ? | Communauté Magento francophone Dit :

    [...] une belle vague de 3 Cross Site Scripting (XSS) à laquelle nous avons essayé d’apporter des solutions avec Gabriel, une nouvelle faille de type CSRF a été révélée, un peu sauvagement et un peu [...]

  6. 6. Procter Dit :

    Sous debian squeeze cette solution marche très bien avec magento 1.6.1.0. Seulement si activé, le chargement d’images n’est plus possible (Upload HTTP Error)

Poster une réponse