SUPEE-6285 Patch, was wurde geändert?

26

OK, das muss sich jemand fragen: Heute, dem 07.07.2015, wurde ein neuer Sicherheitspatch für Magento <1.9.2 veröffentlicht.

Aktualisieren Sie Ihre Shops so schnell wie möglich!

Aber was hat sich geändert? Gibt es bekannte Exploits der abgedeckten Sicherheitsprobleme? Was ist das Schlimmste, das passieren konnte?

Und gibt es irgendetwas, das kaputt gehen kann? Wie bei SUPEE-5994, wo es nicht möglich war, den Patch anzuwenden, wenn das Download-Verzeichnis fehlte ...

Fabian Schmengler
quelle
4
VIEL. Allein die Patch-Datei umfasst über 1.100 Zeilen mit etwa 350 Hinzufügungen und 100 Entfernungen. Manuelle Änderungen an Vorlagen müssen in ~ 8 Frontend-Vorlagen vorgenommen werden, wenn Sie sie in Ihrem Paket / Thema überschrieben haben
Ben Lessani - Sonassi
5
Hier ist ein guter Artikel blog.philwinkle.com/supee-6285-broken-down
Steve Robbins

Antworten:

36

Wie bereits erwähnt, werden die behobenen Sicherheitslücken auf dieser offiziellen Seite (neue Händlerdokumente) ausführlich beschrieben: http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

Zusammenfassung

Dieses Bundle enthält Schutz vor den folgenden sicherheitsrelevanten Problemen:

  • Kundeninformationsleck via RSS und Privilegieneskalation
  • Fälschung in Magento Connect anfordern führt zur Ausführung von Code
  • Cross-Site Scripting in der Wunschliste
  • Cross-Site Scripting im Warenkorb
  • Pfadangabe speichern
  • Berechtigungen für Protokolldateien zu breit
  • Siteübergreifende Skripterstellung in Admin
  • Cross-Site Scripting in Bestellungen RSS

Nach dem Patchen einiger Läden habe ich Folgendes gesammelt:

Theme-Patches

Einige Designdateien wurden mit Escape-Zeichen versehen, um mögliche XSS-Angriffe zu verhindern:

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

Wenn Ihre Designs eine dieser Vorlagen enthalten oder wenn Sie Änderungen direkt in vorgenommen haben base/default (viel Glück, Sie sind fertig), müssen Sie diese manuell patchen:

  1. Ersetzen Sie in den Checkout-Vorlagen alle Vorkommen von

    $this->getContinueShoppingUrl()

    mit

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. in wishlist/email/rss.phtmlersetzen

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

    mit

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. In rss/order/details.phtmlersetzen

    <?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 />

    mit

    <?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 />

Berechtigungen

.htaccessDateien wurden hinzugefügt downloader/Magedund downloader/libzu verbieten den direkten Zugriff auf Quelldateien. Wenn Sie nginx verwenden, müssen Sie diese Regeln hinzufügen, um dasselbe zu erreichen (danke an Ben Lessani für diese):

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

Ich empfehle aber auszuschließen downloader von Bereitstellungen auf einem Live-Systemsystem In diesem Fall müssen Sie keine Maßnahmen ergreifen.

Administratorrechte (ACL)

Wenn Sie eingeschränkte Administratorkonten verwenden, funktionieren einige Menüs von Erweiterungen von Drittanbietern möglicherweise nicht mehr für diese. Der Grund dafür ist , dass der Standardrückgabewert Mage_Adminhtml_Controller_Action::_isAllowed()wird von geändert truezu Mage::getSingleton('admin/session')->isAllowed('admin'). Erweiterungen, die diese Methode in ihren Admin-Controllern nicht überschreiben, weil sie die ACL nicht verwenden, benötigen jetzt "ALL". .

Die einzige Lösung besteht darin, die Erweiterungen zu patchen und diese Methode allen Administratoren hinzuzufügen:

protected function _isAllowed()
{
    return true;
}

Oder wenn tatsächlich eine ACL-Ressource definiert ist in etc/adminhtml.xml:

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

(Sie können sehen, dass der Patch dasselbe tut für Phoenix_Moneybookers Wie in älteren Magento-Versionen wie 1.7, in denen diese Erweiterung enthalten war.)

Ausführlichere Informationen zu diesem Problem und eine Erläuterung zum Definieren fehlender ACL-Ressourcen finden Sie unter: Fehler bei Zugriff verweigert nach der Installation von SUPEE-6285

Mögliche Fehler beim Anwenden des Patches

  1. Botschaft:

    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

    Grund: Das default/modernTheme wurde aus der Installation entfernt

    Lösung: Hinzufügen app/design/frontend/default/modernvon einem neuen Magento-Download (sollte die gleiche Version wie Ihr Shop sein). Sie können diesen Spiegel auch verwenden: https://github.com/firegento/magento . Nachdem Sie den Patch erfolgreich angewendet haben, können Sie das Design wieder entfernen.

  2. Botschaft

    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

    Grund: Das downloaderVerzeichnis wurde aus der Installation entfernt

    Lösung: Hinzufügen downloadervon einem neuen Magento-Download (sollte die gleiche Version wie Ihr Shop sein). Sie können diesen Spiegel auch verwenden: https://github.com/firegento/magento . Nachdem Sie den Patch erfolgreich installiert haben, können Sie das Verzeichnis wieder entfernen.

  3. Nachricht: Etwas Ähnliches wie

    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

    Grund: Die Dateien werden mit \r\n(CRLF, Windows-Zeilenumbruch) oder \r(CR, Mac-Zeilenumbruch) anstelle von \n(LF, Unix-Zeilenumbruch) gespeichert .

    Lösung: Konvertieren Sie einfach die Zeilenumbrüche. Ihr Texteditor oder Ihre IDE sollten dazu in der Lage sein.

Fabian Schmengler
quelle
Da dies ein wichtiger Patch zu sein scheint, sind Sie sich einig, dass Shops, in denen 1.9.x ausgeführt wird, jetzt besser daran sind, ein Upgrade auf 1.9.2.0 durchzuführen, das diesen Patch enthält?
Paj
1
Ich habe noch keinen Shop auf 1.9.2.0 aktualisiert, aber es scheint einige zusätzliche Fallstricke zu geben, und Updates sollten auf jeden Fall sorgfältiger getestet werden. Ich würde trotzdem empfehlen, zuerst den Patch zu installieren.
Fabian Schmengler
In unserem Team haben wir eine Erweiterung speziell für unsere Zwecke entwickelt und nach diesem Patch stellte ich fest, dass einige der Administrator-Controller die _isAllowedMethode nicht implementierten . Glücklicherweise hatten wir ACL im Modul und außer dem Hinzufügen der Methode waren keine weiteren Aktionen erforderlich. Außerdem ist mir die erste Fehlermeldung mit dem default/modernverschobenen Thema begegnet (ich habe den Schuldigen auch dank Git gefunden). +1 dafür
Vic
Einige exzellente Sachen hier. Als ich meine cart.phtml-Datei aktualisierte, verglich ich meine Version mit der in base und stellte fest, dass Ihre Bearbeitung etwas falsch zu sein scheint. Die neue Zeile aus der Patch-Datei lautet: <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 -> __ ('Einkauf fortsetzen')?> </ span> </ span> </ button>. Könntest Du das erläutern?
PedroKTFC
7

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

Im Allgemeinen muss dazu eine _isAllowed protected-Methode hinzugefügt werden, die einen Booleschen Wert zurückgibt. Manchmal ist dieser Boolesche Wert das Ergebnis einer ACL-Überprüfung, wie beim Update auf Adminhtml / controller / Catalog / Category / WidgetController. Manchmal ist dies wie bei Adminhtml / controller / AjaxController.php fest auf true programmiert

Nachdem ich hinzugefügt habe:

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

Für einen der Controller von Drittanbietern begann der Admin-Bereich wieder zu "arbeiten" ...

Also werden wir bald einen weiteren Magento Patch bekommen? Dies scheint ein größeres Problem zu sein ...

Piotr Siejczuk
quelle
Bitte sehen Sie meine Antwort. Wenn Sie den eingeschränkten Rollen das Privileg "Dashboard" erteilen, können Sie erneut auf Abschnitte von Drittanbietern ohne eigene ACL-Ressource zugreifen.
Fabian Schmengler
Magento 1.8 : Überprüft, dass (hatte das Recht "ON") - gleiche Geschichte: Zugriff verweigert . Ja, ich muss mich zuerst
ausloggen
Entschuldigung, ich habe die Konfiguration für "admin" falsch interpretiert. Sie gibt nur für Benutzer mit allen Berechtigungen "true" zurück. Es ist wahr, dass viele Erweiterungen gepatcht werden müssen. Meine Antwort wurde entsprechend aktualisiert.
Fabian Schmengler
Dies oder wie ich @ magento.stackexchange.com/questions/73646/… schrieb, müssen wir möglicherweise einen allgemeinen Override in app / code / local für Mage_Adminhtml_Controller_Action :: _isAllowed () <pre> protected function _isAllowed () {return Mage :: schreiben. getSingleton ('admin / session') -> isAllowed ('system / config'); } </ pre>
Piotr Siejczuk
1
Ob "system / config" als Standardberechtigung für Sie funktioniert, hängt vom Händler ab, denke ich
Fabian Schmengler
3

Wenn Sie viele Community- / lokale Erweiterungen haben, sollten Sie dieser Änderung in SUPEE-6285, die sich auf die app/code/core/Mage/Adminhtml/Controller/Action.phpZeile 666 auswirkt und von dieser abhängt, besondere Aufmerksamkeit schenken (dies ist die Patchdatei von EE 1.14.0.1):

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

Alle benutzerdefinierten Module, die keine eigenen Administratorressourcen implementieren, sind von der obigen Änderung betroffen, und der Zugriff wird verweigert, es sei denn, der betreffende Administrator verfügt über vollständige Administratorrechte.

Wenn Sie an anderer Stelle im Patch nachschauen, werden Sie feststellen, dass viele der enthaltenen Kernmodule aktualisiert wurden. Dies wirkt sich jedoch wahrscheinlich auf viele Module von Drittanbietern aus. Achten Sie daher besonders darauf, etwaige Erweiterungen von Drittanbietern in Ihrem Site-Post-Patch zu überprüfen Sie können immer noch darauf zugreifen!

simonyoung
quelle
1

Offenbar wurde die Patch-Release-Seite mit Informationen zu den Auswirkungen aktualisiert.

Ich muss noch auf einer Produktionsstätte installieren und testen

Goose84
quelle
3
Ich habe es auf dem Dev-Server installiert und es hat gut funktioniert. Alles schien gut zu funktionieren, bis einige unserer Produkt- und Vertriebsadministratoren versuchten, Magento Admin zu verwenden. Diese Benutzer haben eingeschränkte Rollenberechtigungen über den 'Benutzerrollen-Editor' in Magento. In einigen Bereichen der Admin-Bereichswebsite wurde ihnen der Zugriff verweigert die Plugins von Drittanbietern verwenden. Mein Hauptadministratorkonto funktioniert bei all diesen weiterhin einwandfrei ... Ich sehe mir das noch an
Ricky Odin Matthews
0

Die vollständige Liste der geänderten Dateien nach dem Anwenden des Patches finden Sie auch in app/etc/applied.patches.list

gopherIT
quelle
0

In meinem Fall für Module von Drittanbietern hat das Hinzufügen des folgenden Codes zu den AdminHTML-Controllern funktioniert:

protected function _isAllowed()

{
     return true;
}
Ankur Jain
quelle