Vulnerabilidad PolyShell en Magento: qué es y cómo protegerlo
¿Qué es PolyShell y cómo funciona?
PolyShell (asociada al boletín APSB25-94) es una vulnerabilidad de subida de archivos no autenticada que permite la ejecución remota de código (RCE). El problema radica en la API REST/GraphQL de Magento, específicamente en la funcionalidad que permite a los usuarios subir archivos como parte de las «opciones personalizadas» de un producto en el carrito de compra.
Un atacante no necesita credenciales de administrador; solo requiere un ID de carrito de invitado (Guest Cart) y el SKU de un producto para lanzar el ataque. El proceso es el siguiente:
El atacante sube un archivo «políglota»: un archivo diseñado para engañar a los validadores del sistema, pareciendo una imagen legítima (como un
.gifo.png), pero que esconde código PHP malicioso en su interior.Al no validar correctamente la extensión frente al contenido real del archivo, Magento almacena el script en el directorio público
pub/media/.Si no está bloqueada la ejecución de scripts dentro de las carpetas de medios, el atacante puede llamar al archivo directamente, tomar el control del sitio web, inyectar malware o ejecutar scripts de credit card skimming para robar datos de pago.
¿Cómo protegerse?
Si se actualiza la versión de Magento a las que Adobe hace mención, ya quedaría solventado:
2.4.9-alpha3 para 2.4.9-alpha2
2.4.8-p3 para 2.4.8-p2 y anteriores
2.4.7-p8 para 2.4.7-p7 y anteriores
2.4.6-p13 para 2.4.6-p12 y anteriores
Si no se actualiza, otra forma sería bloquear la ejecución de código en las carpetas de medios. Para eso, desde el panel nos dirigimos a Directivas Apache del sitio web (aquí encontrarás como realizarlo).
E introducimos lo siguiente:
# Bloquear ejecución PHP en todo pub/media
<Directory /var/www/clients/client1/web1/web/pub/media>
<FilesMatch «\.php$|\.php\.|\.phtml|\.phar»>
Require all denied
</FilesMatch>
</Directory># Bloquear acceso completo a customer_address
<Directory /var/www/clients/client1/web1/web/pub/media/customer_address>
Require all denied
</Directory>
Importante corregir el client1 y web1 por lo correspondiente de vuestro sitio web. Un poco más arriba de Directivas Apache, en PHP open_basedir se puede ver el clientX y webX.
Más info: https://helpx.adobe.com/es/security/products/magento/apsb25-94.html
📩 Si tienes dudas o quieres implementar esta capa de protección sobre tu alojamiento web, contacta con nosotros y lo vemos contigo.
Gracias por confiar en okITup.
Nosotros vigilamos tu infraestructura. Tú sigues con tu negocio.