Skip to content

Patch di sicurezza SUPEE-10570 - Possibili problemi?

Vogliamo condividere con voi le migliori informazioni che troviamo online. Ci auguriamo che lo troviate molto utile e se potete dirci qualcosa che può aiutarci a migliorare, fatelo liberamente.

Soluzione:

Ecco l'elenco dei file modificati dalla patch SUPEE-10570:

app/Mage.php 
app/code/core/Mage/Admin/Helper/Data.php
app/code/core/Mage/Admin/Model/Block.php 
app/code/core/Mage/Admin/Model/Resource/Block.php 
app/code/core/Mage/Admin/Model/User.php 
app/code/core/Mage/Adminhtml/Block/Catalog/Category/Edit/Form.php 
app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php 
app/code/core/Mage/Adminhtml/Block/Newsletter/Template/Grid/Renderer/Sender.php 
app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php 
app/code/core/Mage/Adminhtml/Block/Sales/Order/View/Info.php 
app/code/core/Mage/Adminhtml/Block/System/Store/Edit/Form.php 
app/code/core/Mage/Adminhtml/Block/Tag/Assigned/Grid.php 
app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer/Store.php 
app/code/core/Mage/Adminhtml/Block/Widget/Tabs.php 
app/code/core/Mage/Adminhtml/Model/Config/Data.php 
app/code/core/Mage/Adminhtml/Model/System/Store.php 
app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php 
app/code/core/Mage/Adminhtml/controllers/CustomerController.php 
app/code/core/Mage/Adminhtml/controllers/System/BackupController.php
app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
app/code/core/Mage/Core/Model/Variable.php
app/code/core/Mage/Customer/Helper/Data.php
app/code/core/Mage/Customer/Model/Resource/Customer.php
app/code/core/Mage/Customer/controllers/AccountController.php
app/code/core/Mage/Customer/etc/config.xml
app/code/core/Mage/Customer/sql/customer_setup/upgrade-1.6.2.0.1.1.1-1.6.2.0.1.1.2.php
app/code/core/Mage/Downloadable/etc/config.xml
app/code/core/Mage/Downloadable/etc/system.xml
app/code/core/Mage/Downloadable/sql/downloadable_setup/upgrade-1.6.0.0.2.1.1-1.6.0.0.2.1.2.php
app/code/core/Mage/ImportExport/Model/Import.php
app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php
app/code/core/Mage/Shipping/Model/Info.php
app/code/core/Mage/Widget/controllers/Adminhtml/Widget/InstanceController.php
app/design/adminhtml/default/default/template/catalog/product/attribute/set/main.phtml
app/design/adminhtml/default/default/template/customer/tab/view.phtml
app/design/adminhtml/default/default/template/customer/tab/view/sales.phtml
app/design/adminhtml/default/default/template/dashboard/store/switcher.phtml
app/design/adminhtml/default/default/template/downloadable/product/composite/fieldset/downloadable.phtml
app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable/links.phtml
app/design/adminhtml/default/default/template/downloadable/sales/items/column/downloadable/creditmemo/name.phtml
app/design/adminhtml/default/default/template/downloadable/sales/items/column/downloadable/invoice/name.phtml
app/design/adminhtml/default/default/template/downloadable/sales/items/column/downloadable/name.phtml
app/design/adminhtml/default/default/template/newsletter/preview/store.phtml
app/design/adminhtml/default/default/template/report/store/switcher.phtml
app/design/adminhtml/default/default/template/sales/order/view/info.phtml
app/design/adminhtml/default/default/template/store/switcher.phtml
app/design/adminhtml/default/default/template/store/switcher/enhanced.phtml
app/design/adminhtml/default/default/template/system/convert/profile/wizard.phtml
app/design/adminhtml/default/default/template/tax/rate/title.phtml
app/design/adminhtml/default/default/template/widget/form/renderer/fieldset.phtml
app/locale/en_US/Mage_Catalog.csv
app/locale/en_US/Mage_ImportExport.csv
lib/Zend/Mail/Transport/Sendmail.php

EDIT

Infine, dopo la distribuzione sul mio sito prod (CE 1.7.0.2), ho notato un problema critico di blocco (processo di checkout bloccato).

Il contesto:
dopo l'indirizzo del passo 1, creo e registro direttamente il cliente, che dovrebbe vedere solo il passo successivo del checkout.

Il problema:
dopo supee-10570, il processo di checkout è interrotto dopo il passo 1 (in caso di creazione dell'account) e il cliente viene reindirizzato alla homepage (con il carrello vuoto + il logout) = impossibile realizzare il suo checkout.

La soluzione di emergenza:
Se si riscontra un problema simile con la sessione di checkout/cliente, commentare le righe 414-430 da app/code/core/Mage/Core/Model/Session/Abstract/Varien.php (quelle aggiunte dalla patch, vedere sotto).

//         if ($this->useValidateSessionPasswordTimestamp()
//             && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
//             && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
//             && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
//             > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
//         ) {
//             return false;
//         }

//         if ($this->useValidateSessionExpire()
//             && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
//             && $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] < time() ) {
//             return false;
//         } else {
//             $this->_data[self::VALIDATOR_KEY][self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP]
//                 = $validatorData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP];
//         }

MODIFICA (2)

Credo che la seguente condizione restituisca sempre false (Mage_Core_Model_Session_Abstract_Varien alle righe 414-419, in particolare alle righe 417+418).

if ($this->useValidateSessionPasswordTimestamp()
            && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
            && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
            && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
            > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
        ) {
        return false;

VALIDATOR_PASSWORD_CREATE_TIMESTAMP sarà sempre maggiore di VALIDATOR_SESSION_EXPIRE_TIMESTAMP. Il timestamp di "scadenza" della sessione viene ridefinito alla creazione dell'account, quindi è inevitabilmente più vecchio dell'inizio della sessione.

Quindi, ad esempio, se si crea il cliente durante il checkout, questo restituirà false e il cliente sarà semplicemente cacciato (= fine del checkout, reindirizzamento alla homepage e carrello vuoto). Piuttosto brutto.

Ho segnalato questo problema al team di magento.
Darò un feedback qui al più presto.


EDIT (3)

Una nuova patch è stata inviata (nella pagina di download della patch di magento è scritto "SUPEE-10570 for CE 1.7.0.0 - UPDATED PATCH EXPECTED, DO NOT USE (0.06 MB)").


MODIFICA (4) ~1 mese dopo la segnalazione del problema di blocco iniziale

Ciao! Spero che tu stia bene (e spero che tu non abbia mantenuto lo stato iniziale della patch fino ad ora, a meno che le tue entrate commerciali non siano diminuite seriamente^^).

Ho notato la seguente frase dalla pagina ufficiale: "Magento sta ora fornendo una patch aggiornata (SUPEE-10570v2) che non causa più questo problema. Si noti, tuttavia, che questa nuova patch non protegge più da due problemi di sicurezza a basso rischio legati alla gestione delle sessioni che la patch SUPEE-10570 proteggeva." dalla pagina ufficiale supee-10570.

Nella pagina del rilascio possiamo finalmente trovare il file v2 (PATCH_SUPEE-10570_CE_v1.7.0.2_v2-2018-03-29-08-52-37.sh).

Ho esaminato le modifiche in dettaglio.
Alla fine sembra che il team di magento abbia deciso di eliminare una parte di sicurezza della patch.
Spero che questa falla di sicurezza non causi gravi danni (è poco critica secondo la nota ufficiale).

Dopo aver ripristinato la v1 + applicato la v2, si prega di fare attenzione che i seguenti file vengano ripristinati come lo stato iniziale (prima dell'applicazione della v1):

app/code/core/Mage/Adminhtml/controllers/CustomerController.php
app/code/core/Mage/Customer/controllers/AccountController.php
app/code/core/Mage/Customer/Helper/Data.php
app/code/core/Mage/Customer/Model/Resource/Customer.php

PS: ovviamente anche altri file sono stati modificati, si prega di controllare di conseguenza.

(non sono sicuro che questo fosse nelle note di rilascio fin dall'inizio)

Problemi noti

Questi due problemi noti sono associati all'uso di tag HTML all'interno dell'attributo SKU di un prodotto:

  • Se si tenta di importare prodotti che contengono tag HTML nell'attributo SKU, Magento visualizza questo errore nella fase di convalida dei dati (cioè quando si fa clic su Verifica dati):
 Invalid value in SKU column. HTML tags are not allowed.
  • Se si tenta di creare o modificare un prodotto nel pannello di amministrazione e il valore dell'attributo SKU del prodotto contiene tag HTML, Magento lancia questo errore quando si tenta di salvare il prodotto: HTML tags are not allowed in SKU attribute.

Dalle note della patch:

Se la patch non si applica durante la patch lib/Zend/Mail/Transport/Sendmail.phppotrebbe significare che l'installazione di Magento è stata precedentemente patchata con SUPEE-9652v1 invece che con SUPEE-9652v2. La soluzione consigliata è quella di ripristinare la patch SUPEE-9652v1 e applicare SUPEE-9652v2 prima di applicare SUPEE-10570.

Ho avuto lo stesso problema di @DarkCowboy dopo aver applicato la patch a Magento CE 1.7.0.2.

Dopo aver scelto di registrarsi come nuovo cliente durante il checkout, l'ordine crea sia l'ordine che il cliente, ma invece di visualizzare la pagina di successo dell'ordine vengo reindirizzato alla homepage e disconnesso.

La soluzione che ho trovato è invertire l'ordine dei blocchi di codice nelle modifiche a app/code/core/Mage/Core/Model/Session/Abstract/Varien.php.

Confrontando la versione patchata con lo stesso file in Magento CE 1.9.3.8, ho scoperto che i nuovi blocchi per convalidare la scadenza della sessione e il timestamp della password sono in un ordine diverso.

Magento CE 1.9.3.8 - Linee 476-491:

    if ($this->useValidateSessionExpire()
        && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
        && $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] < time() ) {
        return false;
    } else {
        $this->_data[self::VALIDATOR_KEY][self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP]
            = $validatorData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP];
    }
    if ($this->useValidateSessionPasswordTimestamp()
        && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
        && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
        && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
        > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
    ) {
        return false;
    }

Magento CE 1.7.0.2 - Linee 414-430:

    if ($this->useValidateSessionPasswordTimestamp()
        && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
        && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
        && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
        > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
    ) {
        return false;
    }

    if ($this->useValidateSessionExpire()
        && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
        && $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] < time() ) {
        return false;
    } else {
        $this->_data[self::VALIDATOR_KEY][self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP]
            = $validatorData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP];
    }

Il risultato è il valore di $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP] è maggiore di $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime(), il che significa che il metodo restituisce sempre false e la validazione fallisce.

La modifica del codice in Magento CE 1.7.0.2 per adattarlo alla versione di Magento CE 1.9.3.8 risolve il problema.

Il codice risultante per Magento CE 1.7.0.2 - Linee 414-430:

​
    if ($this->useValidateSessionExpire()
        && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
        && $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] < time() ) {
        return false;
    } else {
        $this->_data[self::VALIDATOR_KEY][self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP]
            = $validatorData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP];
    }
    if ($this->useValidateSessionPasswordTimestamp()
        && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
        && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
        && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
        > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
    ) {
        return false;
    }

Suggerirei di creare un proprio file di patch e di applicarlo direttamente al file del core (questo è il modo in cui normalmente affronto la correzione dei bug nel core). In questo modo sarebbe facile tornare indietro se Magento rilascia una versione 2 della patch.

Sezione recensioni e valutazioni



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.