Sin impuesto Con impuesto

Vulnerabilidad en ps_facetedsearch: el filtro de precio y de peso

En junio de 2026 se publicó un aviso de seguridad grave sobre ps_facetedsearch, el módulo de filtros de PrestaShop. Un valor manipulado en el filtro deslizante de precio o de peso acaba en un unserialize() y permite escribir un fichero PHP en el servidor. Aquí tienes qué tiendas están expuestas, qué revisar y qué hacer si sigues en 1.7.

Equipo Rekire
Actualizado: 03/06/2026 7
Vulnerabilidad en ps_facetedsearch: el filtro de precio y de peso
Compartir:

En junio de 2026 un compañero de la comunidad compartió el aviso de seguridad que PrestaShop publicó sobre ps_facetedsearch, el módulo de filtros que tienen casi todas las tiendas. La respuesta corta: si tu tienda muestra un filtro deslizante de precio o de peso, actualiza el módulo a la 4.0.4 o posterior hoy mismo y revisa que nadie te haya dejado ficheros PHP dentro de su carpeta.

Qué falla exactamente

El módulo reconstruye los filtros que ha elegido el visitante a partir de la URL. El valor del filtro deslizante (precio o peso) se toma de la URL sin validarlo lo suficiente, se guarda en una caché interna de bloques de filtro en forma serializada y después se vuelve a leer con la función nativa unserialize().

Manipulando ese valor, un atacante mete en la caché un objeto PHP serializado a su gusto. Al deserializarlo, una cadena de clases ya presentes en la tienda escribe un fichero PHP dentro del directorio del módulo. Ese fichero es una web shell: una puerta desde la que se ejecutan comandos en el servidor.

  • No hace falta usuario ni contraseña. Basta con una petición preparada.
  • Es remoto. Cualquiera puede lanzarlo contra cualquier tienda con la versión vulnerable.
  • El resultado es el control total de la tienda y, según el alojamiento, del servidor.

El aviso oficial, publicado el 3 de junio de 2026 (CVE-2026-54159, gravedad crítica), dice que afecta a las versiones 3.0.0 a 4.0.3 y que está corregido en la 4.0.4: GHSA-m5f5-28qr-9g9r.

A quién afecta

A cualquier tienda que tenga una versión vulnerable del módulo y muestre una plantilla de filtros con un control deslizante de precio o de peso. Si usas el filtro de precio en las categorías, que es lo más habitual, estás dentro.

Qué hacer hoy

  1. Mira qué versión tienes en el gestor de módulos: si está entre la 3.0.0 y la 4.0.3, estás afectado.
  2. Actualiza el módulo. Antes, una copia de ficheros y base de datos, como siempre.
  3. Si no puedes actualizar ahora mismo, el aviso propone parches de urgencia: quitar los deslizantes de precio y peso de las plantillas de filtros que se ven en la tienda, o cambiar a mano en src/Filters/Block.php la llamada a unserialize() por Tools::unSerialize(), que es la línea que Gustavo enlazó en el hilo desde el commit oficial. Ninguno sustituye a actualizar.
  4. Busca ficheros PHP que no sean del módulo dentro de modules/ps_facetedsearch/. Lo más fiable es comparar la carpeta con el ZIP oficial de la misma versión y fijarse en los ficheros con fecha de modificación reciente.
  5. Tras actualizar, vacía la caché de PrestaShop y la del propio módulo, que es donde se guardaba el valor manipulado.

Si encuentras un fichero extraño, no basta con borrarlo: da por hecho que alguien ha tenido acceso y revisa empleados, claves de API, módulos instalados y ficheros modificados en toda la tienda.

¿Y si sigo en PrestaShop 1.7?

Fue la primera pregunta del hilo. El módulo de filtros se actualiza aparte del núcleo, y la 4.0.4 declara compatibilidad desde PrestaShop 1.7.7.0: en una 1.7.7 o 1.7.8 puedes instalarla (pruébalo antes en una copia de la tienda). En versiones más antiguas te queda el cambio de una línea en Block.php o quitar los deslizantes.

Y otra pregunta del hilo: ¿y si actualizar «no es fácil»? Entonces el problema ya no es este fallo, sino que la tienda no puede recibir parches. Una 1.7 que no se puede tocar seguirá acumulando avisos como este; conviene poner fecha a la migración.

Para quien desarrolla módulos

El origen es un clásico: datos que llegan del visitante y terminan en unserialize(). Si tienes que guardar estructuras que vienen de la URL o de un formulario, usa JSON. Y si de verdad necesitas unserialize(), impide que cree objetos:

$datos = unserialize($cadena, ['allowed_classes' => false]);

Con allowed_classes a false, PHP convierte cualquier objeto en un objeto incompleto que no ejecuta nada al cargarse.

Si no sabes qué versión del módulo tienes o quieres que revisemos si alguien ha dejado algo en tu tienda, en Rekire lo hacemos dentro de un bono de horas de soporte.

Esto salió en @PrestashopEsp, la mayor comunidad PrestaShop de España en Telegram. Ver la conversación

Cargando...
Cookies
Volver arriba