SUPEE-6285 patch, cosa è stato modificato?


26

OK, qualcuno deve chiederlo: oggi, 7/7/2015 è stata rilasciata una nuova patch di sicurezza per Magento <1.9.2.

aggiorna i tuoi negozi al più presto!

Ma cosa è cambiato? Esistono exploit noti dei problemi di sicurezza coperti? Qual è il peggio che sarebbe potuto succedere?

E c'è qualcosa che può rompersi? Come con SUPEE-5994 dove non era possibile applicare la patch se mancava la directory del downloader ...


4
UN SACCO. Il file patch da solo è oltre 1.100 righe con circa 350 aggiunte e 100 rimozioni. Le modifiche ai modelli manuali dovranno essere eseguite in ~ 8 modelli frontend se le hai sovrascritte nel pacchetto / tema
Ben Lessani - Sonassi

Risposte:


36

Come già accennato, le vulnerabilità patchate sono descritte in dettaglio in questa pagina ufficiale (nuovi documenti commerciali): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

Sommario

Questo pacchetto include la protezione contro i seguenti problemi di sicurezza:

  • Perdita di informazioni sul cliente tramite RSS e escalation di privilegi
  • La richiesta di falsificazione in Magento Connect porta all'esecuzione del codice
  • Scripting tra siti nella lista dei desideri
  • Scripting tra siti nel carrello
  • Divulgazione del percorso di archiviazione
  • Autorizzazioni per i file di registro troppo ampie
  • Scripting cross-site in Admin
  • Scripting tra siti negli ordini RSS

Dopo aver rattoppato alcuni negozi, questo è quello che ho raccolto:

Patch a tema

Alcuni file di temi sono stati corretti con l'escaping aggiunto per prevenire possibili attacchi XSS:

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

Se i tuoi temi contengono uno di questi modelli o se hai apportato modifiche direttamente base/default(buona fortuna, sei fregato), allora devi correggerli manualmente:

  1. nei modelli di checkout, sostituisci tutte le occorrenze di

    $this->getContinueShoppingUrl()

    con

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

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

    con

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

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

    con

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

permessi

.htaccessi file sono stati aggiunti downloader/Magede downloader/libper impedire l'accesso diretto ai file di origine. Se usi nginx, devi aggiungere queste regole per ottenere lo stesso risultato (grazie a Ben Lessani per questo):

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

Ma consiglio comunque di escludere downloaderdalle distribuzioni su un sistema live, in questo caso non è necessario agire.

Privilegi di amministratore (ACL)

Se si utilizzano account di amministratore con restrizioni, alcuni menu di estensioni di terze parti potrebbero non funzionare più per loro. Il motivo è che il valore di ritorno predefinito di Mage_Adminhtml_Controller_Action::_isAllowed()è stato modificato da truea Mage::getSingleton('admin/session')->isAllowed('admin'). Le estensioni che non sostituiscono questo metodo nei loro controller di amministrazione perché non usano l'ACL, ora hanno bisogno del privilegio "TUTTO" .

L'unica soluzione è patchare le estensioni e aggiungere questo metodo a tutti i loro controller di amministrazione:

protected function _isAllowed()
{
    return true;
}

O se in realtà hanno una risorsa ACL definita in etc/adminhtml.xml:

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

(puoi vedere che la patch fa lo stesso per Phoenix_Moneybookersle versioni precedenti di Magento come la 1.7 in cui era inclusa questa estensione)

Per una prospettiva più dettagliata su questo problema e una spiegazione su come definire le risorse ACL mancanti, vedere: Accesso agli errori negati dopo l'installazione di SUPEE-6285

Possibili errori durante l'applicazione della patch

  1. Messaggio:

    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

    Motivo: il default/moderntema è stato rimosso dall'installazione

    Soluzione: aggiungi app/design/frontend/default/modernda un nuovo download di Magento (dovrebbe essere la stessa versione del tuo negozio). Puoi anche usare questo mirror: https://github.com/firegento/magento . Quindi, dopo aver applicato correttamente la patch, è possibile rimuovere nuovamente il tema.

  2. Messaggio

    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

    Motivo: la downloaderdirectory è stata rimossa dall'installazione

    Soluzione: aggiungi downloaderda un nuovo download di Magento (dovrebbe essere la stessa versione del tuo negozio). Puoi anche usare questo mirror: https://github.com/firegento/magento . Quindi, dopo aver applicato correttamente la patch, è possibile rimuovere nuovamente la directory.

  3. Messaggio: qualcosa di simile a

    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

    Motivo: i file vengono archiviati con \r\n(CRLF, interruzione di riga di Windows) o \r(CR, interruzione di riga di Mac) anziché \n(LF, interruzione di riga Unix).

    Soluzione: converti semplicemente le interruzioni di riga, il tuo editor di testo o IDE dovrebbe essere in grado di farlo.


Poiché questa sembra essere una patch importante, concorderesti che i negozi che eseguono 1.9.x ora starebbero meglio aggiornando a 1.9.2.0 che include questa patch?
paj

1
Non ho ancora aggiornato alcun negozio alla 1.9.2.0, ma sembrano esserci alcune insidie ​​aggiuntive e gli aggiornamenti dovrebbero essere testati più attentamente comunque. Consiglierei comunque di installare prima la patch.
Fabian Schmengler,

Nel nostro team abbiamo sviluppato un'estensione solo per il nostro uso e dopo questa patch ho capito che alcuni dei controller di amministrazione non implementavano il _isAllowedmetodo. Fortunatamente avevamo ACL nel modulo e non era richiesta alcuna azione aggiuntiva oltre all'aggiunta del metodo. Inoltre, ho riscontrato quel primo messaggio di errore con il default/moderntema che era stato spostato (ho anche trovato il colpevole grazie a Git). +1 per quello
Vic

Alcune cose eccellenti qui. Quando sono andato ad aggiornare il mio cart.phtml, ho confrontato la mia versione con quella in base e ho notato che la tua modifica sembra leggermente sbagliata. La nuova riga dal file patch è: <button type = "button" title = "<? Php echo Mage :: helper ('core') -> quoteEscape ($ this -> __ ('Continue Shopping'))?> Pulsante "class =" btn-continue "onclick =" setLocation ('<? php echo Mage :: helper (' core ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this -> __ ('Continua lo shopping')?> </span> </span> </button>. Puoi chiarire?
PedroKTFC,

7

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

Generalmente ciò comporta l'aggiunta di un metodo protetto _isAllowed che restituisce un valore booleano. A volte questo valore booleano è il risultato di un controllo ACL, come con l'aggiornamento a Adminhtml / controller / Catalog / Category / WidgetController. A volte questo è hard-coded su true, come con Adminhtml / controller / AjaxController.php

Dopo aver aggiunto:

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

Per uno dei controller di terze parti, questa sezione di amministrazione ha ricominciato a "funzionare" ...

Quindi avremo presto un'altra patch Magento? Questo sembra essere un problema più grande ...


Si prega di vedere la mia risposta. Assegnare ai privilegi limitati il ​​privilegio "Dashboard" consentirà di accedere nuovamente a sezioni di terze parti senza la propria risorsa ACL.
Fabian Schmengler,

Magento 1.8 : controllato che (aveva "ON" di quel diritto) - stessa storia: accesso negato . Sì, ho effettuato prima il logout e il login dopo :)
Piotr Siejczuk

Spiacenti, ho interpretato erroneamente la configurazione di "admin", in realtà restituisce true solo per gli utenti con tutti i privilegi. È vero che molte estensioni dovranno essere patchate. Aggiornato di conseguenza la mia risposta.
Fabian Schmengler,

Questo o come ho scritto @ magento.stackexchange.com/questions/73646/… potrebbe essere necessario scrivere Override generale in app / code / local per Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> funzione protetta _isAllowed () {return Mage :: getSingleton ( 'admin / session') -> isAllowed ( 'sistema / config'); } </pre>
Piotr Siejczuk l'

1
Se "system / config" come autorizzazione predefinita funziona per te .. dipende dal commerciante, credo
Fabian Schmengler

3

Se hai molte estensioni di comunità / locali vorrai prestare particolare attenzione a questo cambiamento in SUPEE-6285 che influenza app/code/core/Mage/Adminhtml/Controller/Action.phpe si trova intorno alla linea 666 a seconda della versione della tua patch (questo è EE 1.14.0.1 patchfile):

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

Tutti i moduli personalizzati che non implementano le proprie risorse di amministrazione sono interessati dalla modifica precedente e l'accesso verrà negato a meno che l'utente in questione non disponga dei privilegi di amministratore completi.

Se guardi altrove nella patch vedrai che molti dei moduli core inclusi sono stati aggiornati, tuttavia è probabile che ciò influisca su molti moduli di terze parti, quindi presta particolare attenzione a testare eventuali estensioni di terze parti nella patch post del tuo sito per verificare puoi ancora accedervi!


1

Sembra che la pagina di rilascio della patch sia stata aggiornata con informazioni su ciò che interessa.

Devo ancora installare su un sito di produzione e testare


3
L'ho installato sul server Dev e ha funzionato bene, quindi l'ho spinto alla produzione. Sembrava che tutto funzionasse bene, fino a quando alcuni dei nostri amministratori di prodotti e vendite non hanno provato a utilizzare Magento admin - questi utenti hanno limitato i permessi di ruolo tramite 'editor ruoli utente' in Magento, sono stati frequentati con errori di accesso negato in alcune aree del sito Web dell'area di amministrazione che utilizzano plug-in di terze parti. Il mio account amministratore principale funziona ancora bene su tutti questi ... ci sto ancora esaminando
Ricky Odin Matthews

0

L'elenco completo dei file modificati dopo aver applicato la patch è disponibile anche in app/etc/applied.patches.list


0

Nel mio caso per i moduli di terze parti, l'aggiunta del codice seguente ai controller adminhtml ha funzionato:

protected function _isAllowed()

{
     return true;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.