La seguridad de Magento requiere un parche adicional para corregir una vulnerabilidad de sanitización
DeveloperSteve Coochin
24 de febrero de 2022
0 minutos de lecturaQuienes 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.

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.

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.

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.

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.

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.

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.

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.



