Skip to main content

La seguridad de Magento requiere un parche adicional para corregir una vulnerabilidad de sanitización

Escrito por
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog feature security alert purple

24 de febrero de 2022

0 minutos de lectura

Quienes trabajamos en tecnología solemos estar bajo mucha presión para corregir código ya implementado, actualizar un componente de infraestructura o aplicar un parche. A menudo, con poco aviso y con urgencia: había que hacerlo hace cinco minutos. El riesgo de cualquier solución «inmediata» está en la prisa por corregirlo ya, en vez de tomarse el tiempo para probar y verificar.

Hace poco, se publicó un parche crítico para Magento Ecommerce, Magento Open Source y las versiones de Magento para Adobe Commerce, después de que investigadores de seguridad descubrieran un problema crítico en la plataforma de comercio electrónico ampliamente adoptada. CVE-2022-24086 identificó una vulnerabilidad que permitía aprovechar una inyección SQL o una inyección de objetos PHP durante el proceso de pago sin necesidad de autenticación.

Esto llevó a Adobe Security a implementar un parche inicial, actuando rápidamente para poner una solución en marcha. Unos días después, los investigadores descubrieron que el parche no bastaba para mitigar el problema en el código. Como resultado, se publicó un nuevo CVE-2022-24087 y se implementó un segundo parche.

Hay un parche disponible para la vulnerabilidad recién identificada en la última alerta de seguridad de Adobe. El nuevo parche debe aplicarse sobre el parche original de CVE-2022-24086.

Algo que siempre me gusta hacer en el ámbito de la seguridad de aplicaciones es verificar minuciosamente las implementaciones, las bibliotecas y todo lo que pueda afectar a los usuarios finales de una plataforma. Así que veamos en detalle el último parche y qué cambió.

Un vistazo al parche del parche CVE-20220-24087

Antes de profundizar en el nuevo parche, MDVA-43443, volvamos al parche original MDVA-43395 para entender qué hacía.

Es importante tener en cuenta que ambas vulnerabilidades solo afectan a las versiones de Magento Open Source y Adobe Commerce iguales o posteriores a la 2.3.4 e inferiores a la 2.4.5-p1 o la 2.3.7-p2.

El parche original (MDVA-43395) agregó una nueva sanitización segura de los datos de entrada del usuario durante el proceso de pago de la lógica de la aplicación de la tienda Magento. Tanto /Email/Model/Template/transDirective como VarDirective.php incorporaron patrones de preg_replace() y preg_match() para ayudar a sanitizar tipos de caracteres no deseados en los datos de entrada del usuario.

Fragmento de código que muestra un bucle preg_replace en PHP con un patrón de expresión regular y una condición preg_match.

Tras implementarse el parche, los investigadores de seguridad descubrieron que no bastaba para mitigar el vector de ataque y que, de hecho, abría la posibilidad de que aparecieran vulnerabilidades aún más profundas en el framework.

El nuevo parche (MDVA-43443) agrega una función reutilizable del framework llamada sanitizeValue(), como extensión de \Magento\Framework\Filter\Template, que realiza una comprobación de sanitización y coincidencia mediante preg_replace.

Diferencia de código que muestra una clase Filter de Magento con una función sanitizeValue que devuelve un valor booleano o elimina las llaves de una cadena.

Luego se utiliza sanitizeValue() para reemplazar el código de sanitización con preg_match() y preg_replace() que agregó el parche original MDVA-43395.

Diferencia de código que muestra el filtro de plantilla de Magento saneando el texto renderizado antes de aplicar los modificadores

Luego, la función sanitizeValue() se utiliza en varios lugares del código, por ejemplo, al cargar valores de configuración y valores personalizados ya sanitizados.

Diferencia de código PHP que agrega llamadas a sanitizeValue para validar parámetros HTTP de Magento y valores de variables personalizadas

En blockDirective() ocurre más magia de sanitización: se amplían las coincidencias de caracteres y la sanitización como parte del núcleo de \Magento\Framework\FilterTemplate.

Fragmento de código PHP que define blockDirective y reemplaza las llaves dobles por entidades HTML

resolveBlockDirective pasa de ser una función pública a una privada, y layoutDirective se migra a resolveLayoutDirective.

El cambio de una función pública a una privada es importante para la seguridad de las aplicaciones PHP, porque la declaración de función privada significa que solo se puede usar desde esta clase principal. En cambio, se podría acceder a una función pública desde cualquier parte de la aplicación.

Diferencia de código que muestra una función de directiva de diseño de Magento PHP renombrada como resolveLayoutDirective y la verificación de los parámetros de la directiva.

Ambos parches están disponibles en el Boletín de seguridad APSB22-12 de Adobe, ya sea para instalarlos con PHP Composer o para integrarlos en una base de código bifurcada.

Recuerda hacer copias de seguridad seguras antes de aplicar ambos parches y probar el código antes de implementarlo.

Regístrate en Snyk para recibir alertas sobre nuevas vulnerabilidades

Algo que siempre hago con grandes proyectos de código abierto como Magento es monitorear el repositorio público desde mi panel de Snyk.

Haz clic en Add Project y monitorea repositorios públicos de GitHub.

Interfaz de búsqueda de proyectos que muestra resultados para «magento», con magento/magento2 seleccionado y opciones para agregar un proyecto desde GitHub, Cloud Foundry, Bitbucket Cloud y la CLI.

Esto es especialmente útil en las ramas de desarrollo de un proyecto, porque puedes recibir alertas sobre posibles problemas mientras aún se están desarrollando. También ayuda a contribuir al proyecto, ya que puedes identificar posibles problemas que corregir mientras sigue en desarrollo.

En proyectos de plataforma como Magento, el proceso de monitoreo busca manifiestos de paquetes, código, contenedores y configuraciones de IaC para analizarlos y destacar posibles problemas. Lo mejor es que también sugiere posibles soluciones y te ayuda a revisar paso a paso lo que detectó.

Empieza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.

Leer más

illustration hero ai
Blog

PHP corrige dos vulnerabilidades críticas de RCE sin autenticación (CVE-2026-109618, CVE-2026-109619): actualiza ahora

Dos fallas críticas en el ciclo de solicitudes de PHP pueden permitir la ejecución remota de código sin autenticación. Actualiza a una versión corregida o instala una corrección retroportada por un proveedor para las versiones anteriores.

blog feature ai lilac
Blog

Convierte tu backlog de vulnerabilidades en pull requests con la remediación agéntica

Evo Remediation Agent ya está disponible en Open Preview e incorpora la resolución automatizada de dependencias a Evo Agentic AppSec. Ahora, los equipos de AppSec pueden ejecutar campañas de remediación continuas

AI Background min crop
Blog

La IA activa todos los riesgos que has aceptado: siete ideas del panel de seguridad de IA sin filtros

La IA hace que los ataques sean más baratos y rápidos, y deja al descubierto riesgos que las organizaciones ya enfrentan. Cuatro líderes de seguridad explican por qué la defensa a velocidad de máquina y la corrección más rápida son esenciales.