Cómo instalar los parches de seguridad de Magento

, , ,

Es crucial tener nuestras tiendas de e-commerce debidamente actualizadas para evitar que los datos que tratamos sean comprometidos. Muchas veces estas webs no están actualizadas debido al desconocimiento de los administradores,  los cuales tampoco tienen por qué tener conocimientos informáticos. Para ello, lo mejor es siempre contar con profesionales que mantengan tu plataforma al día en términos de seguridad.

En este artículo vamos a repasar el proceso para instalar parches de seguridad en una tienda de comercio electrónico realizada en MAGENTO 1x. Magento publica periódicamente parches que solucionan errores de vulnerabilidad de su plataforma, así como actualizaciones de servicios como Paypal o sus métodos de envío. Es nuestra responsabilidad aplicar estos parches a nuestro desarrollo.

¿Estoy al día con los parches de seguridad?

Lo primero es saber si estás al día en cuestión de parches de seguridad. Si no tienes ni idea, lo más seguro es que no lo estés, salvo que acabes de instalar la última versión en este momento.

Para empezar, podemos hacer un análisis de nuestra web en https://www.magereport.com. Esta web hace un análisis superficial y te indica si tienes parches sin aplicar. Su resultado no es fiable 100%, ya que la web no es capaz de detectar todos los tipos de parches, pero los que sí detecta al menos ya sabes que los tienes instalados:

Parches de seguridad Magento

 

Si queremos tener información más detallada, debemos  consultar el fichero que se encuentra en la siguiente carpeta de Magento:

/app/etc/applied.patches.list

Cuando instalamos un parche de seguridad usando la línea de comandos,  se crea una entrada en este fichero, de modo que podemos consultarlo en un futuro si no recordamos que parches hemos instalado con anterioridad. En este punto se nos plantean 2 escenarios: que ese fichero exista, o que no exista.

  1. ¡No tengo ese fichero!

Si este fichero no existe, significa que nunca se han instalado parches usando la línea de comandos. Para saber que parches  tenemos que instalar, deberíamos:

  1. Averiguar la versión de Magento. Podemos verla en el pie del backend de nuestra tienda:

Versión de Magento

  1. Vamos a la página de descarga de Magento (https://magento.com/tech-resources/download), pinchamos en ‘Release Archive’, y hacemos scroll hasta encontrar nuestra versión de Magento:

Descarga de Magento

Aquí ya podemos ver cuál es el último parche que viene con esta versión de Magento (SUPEE-5344), por lo que ya podríamos ir al listado de parches y buscar el siguiente parche publicado:

Último parche

En este caso sería el parche SUPEE-5994.

  1. Sí, ese fichero existe

Si tenemos ese fichero, lo abrimos y nos dará la información que estamos buscando. En este fichero podemos ver un resultado como este:

2016-11-24 08:23:43 UTC | SUPEE-6482 | CE_1.9.2.0 | v1 |  | Tue Jul 14 14:17:04 2015 +0300 |
patching file app/code/core/Mage/Api/Model/Server/AdapteroSoap.php
Hunk #1 succeeded at 209 (offset -24 lines).
patching file app/code/core/Mage/Catalog/Model/Product/Api/V2.php

2016-11-24 08:23:55 UTC | SUPEE-7616 | CE_1.9.2.2-CE_1.8.0.0 | v1 | 1609c0d0be86473d357346fa51f93c12b365d7a1 | Tue Dec 8 12:53:31 2015 +0200 | e1fc3c59c9587427b8a9c88655715f27afbfe970..1609c0d0be86473d357346fa51f93c12b365d7a1
patching file app/code/core/Mage/Usa/Model/Shipping/Carrier/Usps.php

2017-02-14 17:26:19 UTC | SUPEE-9652 | EE_1.14.3.1 | v1 | 4038f0785d828794083f53f10c01aaa6af403523 | Tue Jan 24 15:03:12 2017 +0200 | 9586981e6ca8b255014b242d50b68b88525b0754..4038f0785d828794083f53f10c01aaa6af403523
patching file lib/Zend/Mail/Transport/Sendmail.php

En él podemos ver el identificador del parche (lo he marcado en negrita) y la fecha de instalación. Si se ha seguido un orden cronológico en la instalación de los parches, podemos anotar el último parche del fichero, en este caso sería el SUPEE-9652, e irnos a la web de descargas de Magento y buscar el siguiente:

Descargas de Magento

En este caso instalaríamos el parche SUPEE-9767. Pero si leemos la descripción, veremos que este parche es obsoleto (Deprecated), por lo que nos instan a instalar el parche SUPEE-9767 v2 en su lugar. Es muy importante que leamos la descripción del parche antes de instalarlo, ya que a veces se sustituyen unos parches por otros, por lo que si aún no lo hemos instalado, nos evitamos trabajo.

Ya tengo el fichero, ¿y ahora qué?

Ya tenemos el fichero correspondiente al parche de seguridad, por lo que vamos a proceder a instalarlo. El único requisito es que tengamos acceso al Shell de nuestro servidor. Para ello, lo subiremos a nuestro servidor, y ejecutaremos el siguiente comando desde un terminal ssh:

sh nombredelfichero

Si no hay ningún problema,  nos saldrá un mensaje como el siguiente:

Mensaje 1

Esto quiere decir que el parche se ha instalado correctamente. Pero como sabemos que la informática no es un mundo mágico con unicornios y piruletas, es muy probable que salga algo parecido a esto:

Mensaje 2

Esto quiere decir que no ha podido instalar el parche.

¡Socorro!

Tranquilo, tiene solución. Esto es, porque el sistema de parches de Magento funciona haciendo un diff sobre el fichero a modificar, por lo que si el fichero tiene cambios con respecto a como Magento entiende que debería ser, te informará que no puede efectuar esa actualización.

Esto suele pasar porque hay modificaciones en el código base de Magento, debidas a un mal desarrollador, o a que el archivo es de una versión de Magento distinta a la indicada en el parche.

Por suerte, en el mensaje de error nos dice que fichero(s) tienen el problema, y en qué línea ha encontrado el error, por lo que podemos hacer un parche manual:

Abrimos con un editor de texto el fichero del parche, y buscamos donde aparece el error:

Fichero del parche

Las modificaciones de un archivo siempre empiezan con este formato:

diff –git ……..

Aquí nos indica el fichero a modificar. Las líneas que empiezan con @@ indican la línea del archivo a consultar.

Procedemos a abrir el fichero ubicado en app/code/core/Mage/Payment/Model/Method/Cc.php, buscamos la línea 688, y vemos que hay. Con suerte, el problema sólo sea de un salto de línea, por lo que borrándolo, el fichero quedaría tal cual quiere el parche. Volveríamos a ejecutar el parche a ver si ahora no dan problemas.

Si no es el caso, significa que este archivo tiene modificaciones en el código por lo que no va a coincidir nunca. En este caso, podemos efectuar nosotros a mano las modificaciones del parche.

Instalando el parche manualmente

Abrimos el fichero del parche con un editor de texto. Las líneas que empiezan con un + son líneas a añadir al fichero de Magento, y las que empiezan con un -, son líneas a borrar. Tendremos que identificar en que sección del código tenemos que insertar/quitar estas líneas. Para ello, el fichero del parche te suministra unas pocas líneas de código antes y después de la modificación, por lo que podemos localizarlo fácilmente. Ejemplo:

Fichero del parche:

$ccType = ‘OT’;

+                $discoverNetworkRegexp = ‘/^(30[0-5]\d{13}|3095\d{12}|35(2[8-9]\d{12}|[3-8]\d{13})|36\d{12}’

+                    . ‘|3[8-9]\d{14}|6011(0\d{11}|[2-4]\d{11}|74\d{10}|7[7-9]\d{10}|8[6-9]\d{10}|9\d{11})’

+                    . ‘|62(2(12[6-9]\d{10}|1[3-9]\d{11}|[2-8]\d{12}|9[0-1]\d{11}|92[0-5]\d{10})|[4-6]\d{13}’

+                    . ‘|8[2-8]\d{12})|6(4[4-9]\d{13}|5\d{14}))$/’;

–              $ccc=0;

$ccTypeRegExpList = array(

Fichero magento:

$ccType = ‘OT’;

$ccc=0;

$ccTypeRegExpList = array(

Una vez que apliquemos los cambios, el fichero se nos quedará así:

$ccType = ‘OT’;

$discoverNetworkRegexp = ‘/^(30[0-5]\d{13}|3095\d{12}|35(2[8-9]\d{12}|[3-8]\d{13})|36\d{12}’

. ‘|3[8-9]\d{14}|6011(0\d{11}|[2-4]\d{11}|74\d{10}|7[7-9]\d{10}|8[6-9]\d{10}|9\d{11})’

. ‘|62(2(12[6-9]\d{10}|1[3-9]\d{11}|[2-8]\d{12}|9[0-1]\d{11}|92[0-5]\d{10})|[4-6]\d{13}’

. ‘|8[2-8]\d{12})|6(4[4-9]\d{13}|5\d{14}))$/’;

$ccTypeRegExpList = array(

Ahora que ya sabemos que este fichero está actualizado, procedemos a borrar este trozo de código del fichero del parche (lo he resaltado en rojo), para que no intente actualizarlo cuando volvamos a ejecutar el fichero del parche.

__PATCHFILE_FOLLOWS__

diff –git app/code/core/Mage/Payment/Model/Method/Cc.php app/code/core/Mage/Payment/Model/Method/Cc.php

index 4ee5bcd..809bb7b 100644

— app/code/core/Mage/Payment/Model/Method/Cc.php

+++ app/code/core/Mage/Payment/Model/Method/Cc.php

@@ -688,6 +688,10 @@ class Mage_Payment_Model_Method_Cc extends Mage_Payment_Model_Method_Abstract

|| ($this->OtherCcType($info->getCcType()) && $this->validateCcNumOther($ccNumber))) {

 

$ccType = ‘OT’;

+                $discoverNetworkRegexp = ‘/^(30[0-5]\d{13}|3095\d{12}|35(2[8-9]\d{12}|[3-8]\d{13})|36\d{12}’

+                    . ‘|3[8-9]\d{14}|6011(0\d{11}|[2-4]\d{11}|74\d{10}|7[7-9]\d{10}|8[6-9]\d{10}|9\d{11})’

+                    . ‘|62(2(12[6-9]\d{10}|1[3-9]\d{11}|[2-8]\d{12}|9[0-1]\d{11}|92[0-5]\d{10})|[4-6]\d{13}’

+                    . ‘|8[2-8]\d{12})|6(4[4-9]\d{13}|5\d{14}))$/’;

$ccTypeRegExpList = array(

//Solo, Switch or Maestro. International safe

/*

diff –git js/prototype/validation.js js/prototype/validation.js

index a2dad07..2520326 100644

— js/prototype/validation.js

+++ js/prototype/validation.js

@@ -668,17 +668,17 @@ Validation.addAllThese([

return true;

Guardamos el fichero, y lo volvemos a ejecutar por consola. Si volvieran a salir errores, seguiríamos de nuevo el paso anterior. En el momento en que no se detecten más errores, Magento parcheará todos los ficheros que no dan problemas, y procederá a actualizar el fichero /app/etc/applied.patches.list

Evidentemente para seguir esta guía deberías tener un perfil técnico, y saber en todo momento qué estas haciendo. Si necesitas ayuda, en Gsoft tenemos un equipo de profesionales especializados en Magento que harán todas estas tareas por ti.