Descripción
Inyección de objetos PHP en la caché de la búsqueda por facetas que permite RCE sin autenticación
Impacto
Una vulnerabilidad de inyección de objetos PHP afecta al módulo de PrestaShop ps_facetedsearch.
El módulo reconstruye los filtros de búsqueda seleccionados a partir de la URL de la petición. El valor de un filtro deslizante (precio o peso) se toma de la URL sin la validación suficiente, se guarda en una caché interna del bloque de filtros, donde se serializa, y más tarde se vuelve a leer con un unserialize() nativo sin protección. Manipulando ese valor, un atacante puede colar un objeto PHP serializado malicioso en la caché. Al deserializarse, una cadena de gadgets escribe un fichero PHP arbitrario dentro del directorio del módulo, que después se usa como webshell para ejecutar comandos en el servidor.
A quién afecta
A cualquier tienda que use una versión vulnerable de ps_facetedsearch y muestre una plantilla de filtros con un filtro deslizante (precio o peso). La explotación es remota y sin autenticación: basta una sola petición manipulada al front office, y conduce a la ejecución remota de código y al compromiso total de la tienda y de su servidor.
Versiones afectadas: de la 3.0.0 a la 4.0.3 (todas desde la 3.0.0, incluida la última publicada).
Parches
Actualiza el módulo ps_facetedsearch a la versión corregida. Actualizar el módulo es la mejor medida, porque elimina la vulnerabilidad.
Si no es posible, puedes aplicar la corrección a mano en el fichero src/Filters/Block.php:
En el método getFromCache(), sustituye la llamada nativa a unserialize():
```php // Antes if (!empty($row)) { return unserialize(current($row)); }
// Después if (!empty($row)) { return \Tools::unSerialize(current($row)); } ```
Mientras no actualices el módulo:
- Quita los filtros deslizantes de precio y peso de las plantillas de filtros expuestas en el front office.
- Vacía la caché de filtros de la búsqueda por facetas y revisa el directorio
modules/ps_facetedsearch/en busca de ficheros PHP que no deberían estar. - Vigila las peticiones de búsqueda en busca de patrones de serialización PHP (
O:,;i:, referencias a clases comoMonolog\…) y bloquéalas en el WAF.
Referencias
- Gracias a Frédéric Moreau (Antadis) y Gilles Caudal (Datalinx) por reportar esta vulnerabilidad.
Texto original de NVD (NIST), dominio público. Traducción de PrestaShield.
Métricas CVSS 3.1
Fuente: security-advisories@github.com · secondaryCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HReferencias
¿Has encontrado una vulnerabilidad?
Escribe al equipo de seguridad del core de PrestaShop:
security-core@prestashop.com