Especialistas en seguridad en la nube reportan el hallazgo de dos vulnerabilidades críticas en Apache Struts, la herramienta de soporte para el desarrollo de aplicaciones web del patrón MVC bajo la plataforma Java EE. Acorde al reporte, la explotación de estas fallas permitiría la ejecución de código malicioso y esquivar los controles de seguridad en las implementaciones afectadas.
A continuación se presenta una breve descripción de las fallas reportadas, además de sus respectivas claves de identificación y puntajes según el Common Vulnerability Scoring System (CVSS).
CVE-2019-0230: Al forzar los marcos de Apache Struts es posible realizar una doble evaluación de los valores de los atributos asignados a ciertos atributos de etiquetas (como id) por lo que es posible pasar un valor que se evaluará nuevamente cuando se muestren los atributos de una etiqueta, lo que los actores de amenazas podrían aprovechar para ejecutar código arbitrario en el sistema objetivo.
Acorde a los expertos en seguridad en la nube, es posible emplear una solicitud especialmente diseñada para completar el ataque, aunque el problema sólo se desencadena cuando se fuerza la evaluación de OGNL dentro de un atributo de etiqueta de Struts, cuando la expresión a evaluar hace referencia a una entrada sin validar y sin procesar, como se muestra a continuación:
Si un actor de amenazas puede modificar el atributo skillName en una solicitud de modo que una expresión OGNL sin procesar se pase a la propiedad skillName sin más validación, la expresión OGNL proporcionada contenida en el atributo skillName se evalúa cuando la etiqueta se representa como resultado de la solicitud.
Esta es una falla de gravedad alta que recibió un puntaje de 8.5/10.
En su reporte, los especialistas en seguridad en la nube mencionan: “Hemos identificado varios ejemplos de prueba de concepto (PoC) en GitHub para CVE-2019-0230. Sin embargo, es importante tener en cuenta que debido a que cada aplicación de Struts es única, la carga útil real necesaria para explotarla diferirá de una aplicación a otra. Además, la aplicación debería desarrollarse de tal manera que permita a un atacante proporcionar información no validada en un atributo utilizado dentro de una expresión OGNL”.
CVE-2019-0233: Los valores accesibles a la pila de tipo java.io.File y java.nio.File, así como otras clases de estos paquetes de bibliotecas estándar, no están protegidos adecuadamente por el marco, por lo que los actores de amenazas podrían desplegar una condición de denegación de servicio (DoS).
Cuando se realiza la carga de un archivo en una acción que expone el archivo con un captador, un hacker malicioso puede manipular la solicitud, como resultado, las acciones posteriores en el archivo mostrarán un error. También es posible configurar el directorio temporal del contenedor Servlet en solo lectura, por lo que las acciones de carga posteriores fallarán. La falla recibió un puntaje de 5.7/10, por lo que se le considera un riesgo de severidad media.
Las versiones de Apache Struts afectadas por estas fallas son: 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.0.7, 2.0.8, 2.0.9, 2.0.10, 2.0.11, 2.0.11.1, 2.0.11.2, 2.0.12, 2.0.13, 2.0.14, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6, 2.1.7, 2.1.8, 2.1.8.1, 2.2.0, 2.2.1, 2.2.1.1, 2.2.2, 2.2.3, 2.2.3.1, 2.3.1, 2.3.1.1, 2.3.1.2, 2.3.2, 2.3.3, 2.3.4, 2.3.4.1, 2.3.5, 2.3.6, 2.3.7, 2.3.8, 2.3.9, 2.3.10, 2.3.11, 2.3.12, 2.3.13, 2.3.14, 2.3.14.1, 2.3.14.2, 2.3.14.3, 2.3.15, 2.3.15.1, 2.3.15.2, 2.3.15.3, 2.3.16, 2.3.16.1, 2.3.16.2, 2.3.16.3, 2.3.17, 2.3.19, 2.3.20, 2.3.20.1, 2.3.20.2, 2.3.20.3, 2.3.21, 2.3.22, 2.3.23, 2.3.24, 2.3.24.1, 2.3.24.2, 2.3.24.3, 2.3.25, 2.3.26, 2.3.27, 2.3.28, 2.3.28.1, 2.3.29, 2.3.30, 2.3.31, 2.3.32, 2.3.33, 2.3.34, 2.3.35, 2.3.36, 2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4, 2.5.5, 2.5.6, 2.5.7, 2.5.8, 2.5.9, 2.5.10, 2.5.10.1, 2.5.12, 2.5.13, 2.5.14, 2.5.14.1, 2.5.16, 2.5.17, 2.5.18, 2.5.20.
Si bien estas vulnerabilidades pueden ser explotadas de forma remota por actores de amenazas no autenticados, los especialistas no han detectado intentos de explotación activa, aunque como se menciona anteriormente, existe un exploit disponible en GitHub. Los responsables de Apache Struts ya han lanzado las actualizaciones correspondientes, por lo que los administradores de implementaciones afectadas sólo deben verificar su correcta instalación.