En los últimos días muchas tiendas nos han informado que han sido víctimas de un hackeo que afecta los sistemas basados en PrestaShop. Y aunque ninguno de nuestros clientes ha sido afectado, nuestro equipo a tomado cartas en el asunto y nos hemos propuesto resolver el problema para que todas las tiendas puedan eliminar este virus (malware) que les afectan.
Paso 1: ¿Han hackeado tu tienda?
Antes que nada, preguntarnos si hemos sido víctimas de este hack. Hemos detectado dos simples pasos para saber si ha ocurrido:
1. ¿En la página de pago de tu tienda aparece un formulario para agregar información de tarjeta de crédito?
Si la respuesta es SÍ, entonces tu tienda está infectada. Ten en cuenta que debes abrir la página en otro navegador del que usualmente usas o usar el modo incógnito, pues el virus oculta el formulario a los usuarios que ya han visitado la tienda.
Si tal vez no puedes ver el formulario, también puedes buscarlo directamente en las herramientas de desarrollador en la sección Sources, si encuentras un código similar a este, es porque tu sitio está infectado:
2. ¿Puedes iniciar sesión en tu panel administrativo (Backoffice)?
Si la respuesta es NO, entonces estás infectado. El virus incluye una modificación en el código de inicio de sesión que no permite acceder a los usuarios y estos siempre serán redireccionados al login.
Paso 2: Detectar archivos infectados.
Luego de saber si estás infectado (o bien puedes intentar buscar archivos incluso si no cumples con las respuestas del punto anterior), debes buscar cuales son los archivos que se han infectado. Para ello hemos desarrollado un pequeño script que te permite buscar archivos que contienen el código malicioso.
Crea un archivo llamado fix.php en el directorio raíz de tu tienda PrestaShop y agrega el código anterior, guárdalo y podrás acceder a él en la ruta dominiodetutienda.com/fix.php
<?php
// Función que busca en los archivos recursivamente
function searchFiles($dir, $searchString, $extensions)
{
// Abre el directorio
$handle = opendir($dir);
// Recorre todos los archivos y carpetas dentro del directorio
while (false !== ($file = readdir($handle))) {
// Si el archivo o carpeta no es "." o ".."
if ($file != "." && $file != "..") {
// Si es un directorio, realiza una búsqueda recursiva dentro del directorio
if (is_dir($dir . "/" . $file)) {
if (in_array($dir, array('.//img', './/cache', './/mails', './/var'))) {
continue;
}
searchFiles($dir . "/" . $file, $searchString, $extensions);
}
// Si es un archivo, busca en el archivo si contiene la cadena buscada y si tiene la extensión adecuada
else {
$fileInfo = pathinfo($file);
$extension = $fileInfo['extension'];
if (in_array($extension, $extensions) && $file !== 'fix.php') {
$filePath = $dir . "/" . $file;
$content = file_get_contents($filePath);
if (strpos($content, $searchString) !== false) {
echo "Cadena encontrada en el archivo: " . $filePath . "<br>";
}
}
}
}
}
// Cierra el directorio
closedir($handle);
}
// Llama a la función de búsqueda
echo 'Archivos con formulario malicioso:<br/>';
searchFiles('./', "id=\"myform\"", array("tpl"));
echo '<br/>Archivos con código malicioso:<br/>';
searchFiles('./', "];if(@$", array("php"));
echo '<br/>Archivos con inclusiones maliciosas:<br/>';
searchFiles('./', "jschecks", array("php"));
Al ejecutar este script podrás ver un listado de archivos que contienen unas palabras clave que nos ayudan a identificar que cargan código malicioso:
En cada sección aparecerá la ruta del archivo infectado.
Paso 3: Limpiar tu tienda.
Llegó el momento de ponerse manos a la obra y empezar a modificar los archivos.
En seguida tendrás dos opciones para limpiar el código. Con cualquiera de las dos opciones tendrás que subir archivos a tu servidor, para ello puedes usar FileZilla, Cyberduck o los administradores de archivos de cPanel o Plesk (o cualquier otra herramienta que utilices).
Opción 1 - Editar los archivos manualmente.
Con esta opción te recomendamos tener mucho cuidado. Lo recomendamos solo para personas con conocimientos técnicos, pues un mal procedimiento puede causar que la tienda deje de funcionar.
En la parte final de los archivos encontrarás códigos incomprensible, este código es el malicioso y tendrás que borrarlo. Ejemplo:
En este caso, el código malicioso se encuentra fuera de las llaves de la clase ( } ) y generalmente se encuentran en la última linea. Si tienes dudas, puedes verificar el archivo original de PrestaShop (te lo explicamos a continuación)
Opción 2 - Reemplazar por los archivos originales (recomendada)
Para tener más seguridad, puedes reemplazar los archivos con los archivos originales de la instalación de PrestaShop. Para eso debes saber primero cuál es la versión instalada en tu tienda. Para saberlo puedes ir al inicio de sesión del BackOffice y en la parte de arriba te mostrará la versión:
Otra forma de saberlo es en el archivo app/AppKernel.php, recuerda que las rutas que usamos en estos ejemplos tienen como base la carpeta de instalación de PrestaShop.
Luego de saber la versión, puedes navegar al repositorio oficial de PrestaShop en Github: https://github.com/PrestaShop/PrestaShop y seleccionar la versión de tu tienda. Por ejemplo, si tu tienda es la versión 1.7.6.5, debes dar clic aquí:
A continuación, debes buscar los archivos que te han salido marcados en el script fix.php, por ejemplo, uno de los archivos que suele ser infectado es:
Cuando lo abras, verás el código original y debes reemplazarlo en el archivo de tu tienda, guardarlo y subirlo.
Paso 4: Más archivos a editar.
Además de estos archivos con el código malicioso, existe otro que usualmente es alterado y es la causa del por qué no puedas iniciar sesión: el controlador del Login en el Admin.
Para corregir este problema, ve al repositorio oficinal de PrestaShop, selecciona la versión de tu tienda (tal como hiciste en el paso 3, opción 2) y busca el siguiente archivo: /controllers/admin/AdminLoginController.php, recuerda que este archivo está ubicado en la raíz de tu tienda. Reemplaza todo el contenido, guárdalo y súbelo.
Paso 5: Cambio de contraseñas.
En el paso 4 cambiaste el archivo de inicio de sesión, ahora podrás iniciar sin ningún problema. De todas formas, hay otra tarea por hacer: cambiar los accesos. Resulta que has tenido que cambiar este archivo por una simple razón: el malware inserta un código que te roba el usuario, la contraseña y la URL de administración. Por lo tanto tu sitio ya no es seguro, pues los hackers tienes acceso a tu tienda. Por lo tanto ahora debes cambiar las contraseñas de todos los usuarios administrativos de tu tienda.
Para eso, debes ir a Parámetros avanzados > Equipo, en la administración de PrestaShop, editar a cada usuario y cambiar su contraseña.
Por último en este paso, aconsejamos ampliamente cambiar la URL de tu BackOffice, es decir, si antes ingresabas al administrador como dominiodetutienda.com/admin, ahora debes cambiarlo por otro nombre que sea más seguro. Para ello debes ir a tu administrador de archivos (Filezilla, cPanel, etc) y cambiar el nombre de esa carpeta.
Paso 6: Prevenir futuros hackeos
Finalmente, para prevenir futuros hackeos, recomendamos eliminar (o comentar) el siguiente código en el archivo config/smarty.config.inc.php:
Ten en cuenta que es este condicional que valida el cacheo modo mysql, ya que tu archivo puede ser algo diferente si ha tenido modificaciones o según la versión de PrestaShop.
También recomendamos dejar de usar códigos iframe en tu tienda, por lo tanto puedes ir a Parámetros de la tienda > Configuración y desactivar la opción de Permite iframes en los campos HTML.
Conclusiones
Es bastantes complejo realizar todos estos pasos, pero con ellos podrás eliminar este malware que se ha instalado en tu tienda virtual. Recuerda revisar periódicamente tu tienda en todos los pasos de la compra para verificar que no hayan realizado otro ataque y te hayan instalado otro malware.
Si estos pasos te parecen muy complejos y deseas utilizar nuestros servicio técnico para ayudarte a resolver el problema, contáctanos por medio de nuestras redes sociales o whatsapp.
Comentarios (0)