La patch Magento chiamata SUPEE-6285 è stata rilasciata il 7 luglio 2015 e comprende un buon numero di fix di sicurezza di cui il più importante relativo ad un bug che permetteva ad un eventuale attaccante di avere accesso al feed degli ultimi ordini, con tutti i dati dei clienti e dell’ordine, che potenzialmente possono essere poi usati per dare seguito ad altri tipo di attacchi.
Tra gli altri fix ci sono:
- Esecuzione di codice tramite Magento Connect
- Cross-site Scripting nella Wishlist
- Cross-site Scripting nel Carrello
- Disclosure del Path dello store
- Permessi troppo ampi per i file di log
- Cross-site Scripting nell’admin
- Cross-site Scripting nell’rss degli ordini
Studiando la documentazione e vedendo materialmente la patch per applicarla ai nostri clienti, si nota che ci sono stati dei cambiamenti che meritano un minimo di approfondimento: le modifiche alle ACL e al template che possono influenzare profondamente estensioni e temi di terze parti.
Admin Privileges (ACL)
In certi casi può essere impossibile accedere ad alcuni menu di plugin di terze parti con un utente del backend che non gode di privilegi di amministratore. L’accesso risulta in un errore di Access Denied.
Questo succede perché in precedenza il metodo
Mage_Adminhtml_Controller_Action::_isAllowed()
del controller del backend di Magento restutiva come valore di default true nel caso in cui non ci fosse un controllo esplicito di una ACL.
Adesso il valore restituito di default è
Mage::getSingleton('admin/session')->isAllowed('admin')
pertanto un utente non amministratore non ha accesso a meno di effettuare un override del metodo con un controllo appropriato della ACL.
Il problema può essere risolto implementando il controllo di una risorsa ACL specifica in tutti i controller che creano problemi:
protected function _isAllowed() { return Mage::getSingleton('admin/session')->isAllowed('RISORSA ACL'); }
Patch del template
La patch modifica i seguenti file del template base inserendo l’escape delle variabili che possono essere soggette ad attacchi:
- checkout/cart.phtml
- checkout/cart/noItems.phtml
- checkout/onepage/failure.phtml
- rss/order/details.phtml
- wishlist/email/rss.phtml
È quindi necessario verificare nei template di terze parti se viene fatto l’override di questi file phtml e, eventualmente, applicare queste modifiche anche ai file del template:
- Nei file del chechout sostituire tutte le occorrenze della chiamata
$this->getContinueShoppingUrl()
con
Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
- su wishlist/email/rss.phtml, sostituire
$this->helper('wishlist')->getCustomerName()
con
Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
- In rss/order/details.phtml, sostituire
<?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 />
Htaccess
Infine un accenno anche al fatto che la patch introduce il blocco tramite htaccess all’accesso alle directory seguenti:
- downloader/Maged
- downloader/lib
Se si utilizza Nginx come webserver è quindi necessario aggiungere le direttive seguenti per avere lo stesso funzionamento:
- location /downloader/Maged/ { deny all; }
- location /downloader/lib/ { deny all; }
Mettete in sicurezza il vostro negozio Magento
Naturalmente, al netto di queste considerazioni, vale sempre la regola di applicare quanto prima le patch di sicurezza, e in generale di gestire correttamente la sicurezza di magento e di tutto il server che lo ospita. Se avete bisogno di aiuto non esitate a contattarci!
Referenze
- Elenco delle vulnerabilità corrette e delle modifiche applicate con la Patch SUPEE-6285
http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html - Soluzioni proposte per la risoluzione dei problemi connessi alla la Patch SUPEE-6285
http://magento.stackexchange.com/questions/73481/supee-6285-patch-what-has-been-changed/73631#73631