Patch SUPEE-6285, qu'est-ce qui a été changé?


26

OK, quelqu'un doit se demander ceci: aujourd'hui, 7/7/2015, un nouveau correctif de sécurité pour Magento <1.9.2 a été publié.

mettez à jour vos boutiques dès que possible!

Mais qu'est-ce qui a changé? Existe-t-il des exploits connus des problèmes de sécurité couverts? Quel est le pire qui aurait pu arriver?

Et y a-t-il quelque chose qui peut casser? Comme avec SUPEE-5994 où il n'était pas possible d'appliquer le patch si le répertoire du téléchargeur manquait ...


4
BEAUCOUP. Le fichier de correctif contient à lui seul plus de 1 100 lignes avec environ 350 ajouts et 100 suppressions. Les modifications manuelles des modèles devront être effectuées dans ~ 8 modèles frontaux si vous les avez remplacés dans votre package / thème
Ben Lessani - Sonassi

Réponses:


36

Comme déjà mentionné, les vulnérabilités corrigées sont décrites en détail sur cette page officielle (nouveaux documents marchands): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

Sommaire

Cet ensemble comprend une protection contre les problèmes de sécurité suivants:

  • Fuite d'informations client via RSS et escalade de privilèges
  • La demande de contrefaçon dans Magento Connect mène à l'exécution de code
  • Script intersite dans la liste de souhaits
  • Script intersite dans le panier
  • Divulgation du chemin d'accès au magasin
  • Autorisations sur les fichiers journaux trop larges
  • Script intersite dans Admin
  • Scriptage intersites dans les commandes RSS

Après avoir patché quelques boutiques, voici ce que j'ai rassemblé:

Patchs thématiques

Certains fichiers de thème ont été corrigés avec des échappements supplémentaires pour empêcher d'éventuelles attaques XSS:

  • checkout/cart.phtml
  • checkout/cart/noItems.phtml
  • checkout/onepage/failure.phtml
  • rss/order/details.phtml
  • wishlist/email/rss.phtml

Si vos thèmes contiennent l'un de ces modèles, ou si vous avez apporté des modifications directement dans base/default(bonne chance, vous êtes foutu), vous devez les corriger manuellement:

  1. dans les modèles de paiement, remplacez toutes les occurrences de

    $this->getContinueShoppingUrl()

    avec

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. dans wishlist/email/rss.phtml, remplacer

    $this->helper('wishlist')->getCustomerName()

    avec

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. Dans rss/order/details.phtml, remplacer

    <?php echo $this->__('Customer Name: %s', $_order->getCustomerFirstname()?$_order->getCustomerName():$_order->getBillingAddress()->getName()) ?><br />
    <?php echo $this->__('Purchased From: %s', $_order->getStore()->getGroup()->getName()) ?><br />
    

    avec

    <?php $customerName = $_order->getCustomerFirstname() ? $_order->getCustomerName() : $_order->getBillingAddress()->getName(); ?>
    <?php echo $this->__('Customer Name: %s', Mage::helper('core')->escapeHtml($customerName)) ?><br />
    <?php echo $this->__('Purchased From: %s', Mage::helper('core')->escapeHtml($_order->getStore()->getGroup()->getName())) ?><br />
    

Autorisations

.htaccessdes fichiers ont été ajoutés downloader/Magedet downloader/libinterdisent l'accès direct aux fichiers source. Si vous utilisez nginx, vous devez ajouter ces règles pour obtenir le même résultat (merci à Ben Lessani pour celui-ci):

location /downloader/Maged/ { deny all; }
location /downloader/lib/   { deny all; }

Mais je recommande d'exclure downloaderdes déploiements vers un système système en direct de toute façon, dans ce cas, vous n'avez pas besoin d'agir.

Privilèges d'administrateur (ACL)

Si vous utilisez des comptes d'administrateur restreints, certains menus d'extensions tierces peuvent ne plus fonctionner pour eux. La raison en est que la valeur de retour par défaut de Mage_Adminhtml_Controller_Action::_isAllowed()a été modifiée de trueà Mage::getSingleton('admin/session')->isAllowed('admin'). Les extensions qui ne remplacent pas cette méthode dans leurs contrôleurs d'administration car elles n'utilisent pas l'ACL, ont désormais besoin du privilège "ALL" .

La seule solution est de patcher les extensions et d'ajouter cette méthode à tous leurs contrôleurs d'administration:

protected function _isAllowed()
{
    return true;
}

Ou s'ils ont réellement une ressource ACL définie dans etc/adminhtml.xml:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

(vous pouvez voir que le patch fait la même chose Phoenix_Moneybookersdans les anciennes versions de Magento comme 1.7 où cette extension était incluse)

Pour une perspective plus détaillée sur ce problème et une explication sur la façon de définir les ressources ACL manquantes, voir: Erreurs d'accès refusé après l'installation de SUPEE-6285

Erreurs possibles lors de l'application du patch

  1. Message:

    can't find file to patch at input line 899
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git app/design/frontend/default/modern/template/checkout/cart.phtml app/design/frontend/default/modern/template/checkout/cart.phtml
    |index 982ad5a..2bf6b37 100644
    |--- app/design/frontend/default/modern/template/checkout/cart.phtml
    |+++ app/design/frontend/default/modern/template/checkout/cart.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    

    Raison: le default/modernthème a été supprimé de l'installation

    Solution: ajoutez à app/design/frontend/default/modernpartir d'un nouveau téléchargement Magento (devrait être la même version que votre boutique). Vous pouvez également utiliser ce miroir: https://github.com/firegento/magento . Ensuite, après avoir appliqué le correctif avec succès, vous pouvez à nouveau supprimer le thème.

  2. Message

    patching file downloader/Maged/.htaccess
    can't find file to patch at input line 915
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/Maged/Controller.php downloader/Maged/Controller.php
    |index aa9d705..32755d7 100644
    |--- downloader/Maged/Controller.php
    |+++ downloader/Maged/Controller.php
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    5 out of 5 hunks ignored
    can't find file to patch at input line 976
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/Maged/Model/Session.php downloader/Maged/Model/Session.php
    |index 18020eb..7013c94 100644
    |--- downloader/Maged/Model/Session.php
    |+++ downloader/Maged/Model/Session.php
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    2 out of 2 hunks ignored
    patching file downloader/lib/.htaccess
    can't find file to patch at input line 1020
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/connect/packages.phtml downloader/template/connect/packages.phtml
    |index 9cca5a6..f42e74e 100644
    |--- downloader/template/connect/packages.phtml
    |+++ downloader/template/connect/packages.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    3 out of 3 hunks ignored
    can't find file to patch at input line 1049
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/connect/packages_prepare.phtml downloader/template/connect/packages_prepare.phtml
    |index f74c3df..86aa51b 100644
    |--- downloader/template/connect/packages_prepare.phtml
    |+++ downloader/template/connect/packages_prepare.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    can't find file to patch at input line 1061
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/login.phtml downloader/template/login.phtml
    |index 6e4cd2c..dbbeda8 100644
    |--- downloader/template/login.phtml
    |+++ downloader/template/login.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    can't find file to patch at input line 1073
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/settings.phtml downloader/template/settings.phtml
    |index 13551ac..47ab411 100644
    |--- downloader/template/settings.phtml
    |+++ downloader/template/settings.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    

    Raison: le downloaderrépertoire a été supprimé de l'installation

    Solution: ajoutez à downloaderpartir d'un nouveau téléchargement Magento (devrait être la même version que votre boutique). Vous pouvez également utiliser ce miroir: https://github.com/firegento/magento . Ensuite, après avoir appliqué le patch avec succès, vous pouvez à nouveau supprimer le répertoire.

  3. Message: quelque chose de similaire à

    checking file app/design/frontend/base/default/template/checkout/cart.phtml
    Hunk #1 FAILED at 97 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/checkout/cart/noItems.phtml
    Hunk #1 FAILED at 31 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/checkout/onepage/failure.phtml
    Hunk #1 FAILED at 29 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/rss/order/details.phtml
    Hunk #1 FAILED at 31 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/wishlist/email/rss.phtml
    Hunk #1 FAILED at 25 (different line endings).
    1 out of 1 hunk FAILED
    

    Raison: les fichiers sont stockés avec \r\n(CRLF, saut de ligne Windows) ou \r(CR, saut de ligne Mac) au lieu de \n(LF, saut de ligne Unix).

    Solution: Convertissez simplement les sauts de ligne, votre éditeur de texte ou IDE devrait en être capable.


Comme cela semble être un correctif majeur, seriez-vous d'accord pour dire que les magasins exécutant 1.9.x feraient mieux de passer à la version 1.9.2.0 qui inclut ce correctif?
paj

1
Je n'ai pas encore mis à jour de boutique en 1.9.2.0 mais il semble qu'il y ait des pièges supplémentaires et que les mises à jour devraient être testées plus attentivement de toute façon. Je recommanderais tout de même d'installer le correctif en premier.
Fabian Schmengler

Dans notre équipe, nous avons développé une extension juste pour notre utilisation et après ce correctif, j'ai réalisé que certains contrôleurs d'administration n'implémentaient pas la _isAllowedméthode. Heureusement, nous avions ACL dans le module et aucune action supplémentaire n'était requise à part l'ajout de la méthode. De plus, j'ai rencontré ce premier message d'erreur avec le default/modernthème qui avait été déplacé (j'ai aussi trouvé le coupable grâce à Git). +1 pour cela
Vic

Quelques excellentes choses ici. Lorsque je suis allé mettre à jour mon cart.phtml, j'ai comparé ma version avec celle de base et j'ai remarqué que votre modification semble légèrement erronée. La nouvelle ligne du fichier correctif est: <button type = "button" title = "<? Php echo Mage :: helper ('core') -> quoteEscape ($ this -> __ ('Continue Shopping'))??> "class =" button btn-continue "onclick =" setLocation ('<? php echo Mage :: helper (' core ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this -> __ ('Continuer les achats')?> </span> </span> </button>. Pouvez-vous clarifier?
PedroKTFC

7

Via @ http://blog.philwinkle.com/supee-6285-broken-down/

Généralement, cela implique l'ajout d'une méthode protégée _isAllowed qui renvoie un booléen. Parfois, ce booléen est le résultat d'une vérification de l'ACL, comme pour la mise à jour vers Adminhtml / controllers / Catalog / Category / WidgetController. Parfois, cela est codé en dur à vrai, comme avec Adminhtml / controllers / AjaxController.php

Après avoir ajouté:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('system/config');
}

À l'un des contrôleurs tiers, la section d'administration a recommencé à "fonctionner" ...

Nous aurons donc bientôt un autre patch Magento? Cela semble être un problème plus important ...


Veuillez voir ma réponse. Donner aux rôles restreints le privilège "Dashboard" permettra à nouveau d'accéder aux sections tierces sans propre ressource ACL.
Fabian Schmengler

Magento 1.8 : vérifié que (avait "ON" de ce droit) - même histoire: accès refusé . Oui, je dois d'abord me déconnecter et me connecter après :)
Piotr Siejczuk

Désolé, j'ai mal interprété la configuration de "admin", elle ne renvoie en fait vrai que pour les utilisateurs avec tous les privilèges. Il est vrai que de nombreuses extensions devront être corrigées. Mis à jour ma réponse en conséquence.
Fabian Schmengler

Ceci ou comme j'ai écrit @ magento.stackexchange.com/questions/73646/… nous pourrions avoir besoin d'écrire Override général dans app / code / local pour Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> fonction protégée _isAllowed () {return Mage :: getSingleton ('admin / session') -> isAllowed ('system / config'); } </pre>
Piotr Siejczuk

1
Si "system / config" comme autorisation par défaut fonctionne pour vous .. cela dépend du marchand je suppose
Fabian Schmengler

3

Si vous avez beaucoup d'extensions communautaires / locales, vous voudrez porter une attention particulière à ce changement dans SUPEE-6285 qui affecte app/code/core/Mage/Adminhtml/Controller/Action.phpet se situe autour de la ligne 666 en fonction de la version de votre patch (il s'agit du fichier de patch EE 1.14.0.1):

protected function _isAllowed()
    {
-        return true;
+        return Mage::getSingleton('admin/session')->isAllowed('admin');
    }

Tous les modules personnalisés qui n'implémentent pas leurs propres ressources d'administration sont affectés par la modification ci-dessus et l'accès sera refusé à moins que l'utilisateur administrateur en question ne dispose des privilèges d'administrateur complets.

Si vous regardez ailleurs dans le correctif, vous verrez qu'un grand nombre des modules de base inclus ont été mis à jour, mais cela est susceptible d'affecter un grand nombre de modules tiers, alors faites particulièrement attention à tester toutes les extensions tierces dans votre site après le correctif pour vérifier vous pouvez toujours y accéder!


1

Il semble que la page de publication du correctif ait été mise à jour avec des informations sur ce qu'elle affecte.

Je n'ai pas encore installé sur un site de production et testé


3
Je l'ai installé sur le serveur de développement et cela a bien fonctionné, alors je l'ai poussé en production. Tout semblait bien fonctionner, jusqu'à ce que certains de nos administrateurs produits et commerciaux essaient d'utiliser l'administrateur Magento - ces utilisateurs ont des autorisations de rôle restreintes via `` l'éditeur de rôle utilisateur '' dans Magento, ils ont été fréquentés avec des erreurs d'accès refusé sur certaines zones du site Web de la zone d'administration qui utilisent des plugins tiers. Mon compte d'administrateur principal fonctionne toujours bien sur tous ces éléments ... J'y cherche toujours
Ricky Odin Matthews

0

La liste complète des fichiers modifiés après application du patch est également disponible dans app/etc/applied.patches.list


0

Dans mon cas pour les modules tiers, l'ajout de code ci-dessous aux contrôleurs adminhtml a fonctionné:

protected function _isAllowed()

{
     return true;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.