Vulnerabilidades de riesgo alto y medio abordadas en Apache Struts 2

A modo de contextualizar la descripción de las vulnerabilidades, una breve definición de:

  • Apache Struts 2, es un framework web de código abierto utilizado para el desarrollo de aplicaciones web Java EE (Enterprise Edition). Este framework hace uso de la API Java Servlet para animar a los desarrolladores a adoptar el modelo-vista-controlador (MVC).
  • OGNL (Object-Graph Navigation Language), es un lenguaje de expresión (EL) de código abierto para Java que permite obtener y asignar propiedades (a través de métodos definidos set y get), además de la ejecución de métodos pertenecientes a las clases de Java.

¿Qué pasó?

Recientemente fueron abordadas 2 vulnerabilidades que afectan al framework Apache Struts 2 desde la versión 2.0.0 hasta la 2.5.20, las mismas han sido identificadas con los CVE-2019-0230 y CVE-2019-0233. A continuación se detallan brevemente ambas vulnerabilidades:

El CVE-2019-0230 de riesgo alto, trata de una vulnerabilidad de OGNL Expression Injection, y se da debido a que Struts realiza una evaluación OGNL doble forzada de la entrada de datos del usuario dentro de un atributo de etiqueta Struts. Un atacante remoto podría explotar este fallo inyectando una expresión OGNL maliciosa en un atributo utilizado dentro de la expresión OGNL que luego será evaluado, llevando a la ejecución remota de código. Un atacante podría modificar el atributo de etiqueta con una solicitud, de modo a que una expresión OGNL maliciosa sea inyectada sin validación alguna. Cuando la etiqueta sea representada como resultado de la solicitud, esta expresión será evaluada, permitiendo al atacante evaluar expresiones OGNL arbitrarias.

Por otro lado el CVE-2019-0233 de riesgo medio, trata de una vulnerabilidad de denegación de servicios (DoS), y se da debido a una anulación del permiso de acceso durante la carga de un archivo. Sabiendo esto, un atacante remoto podría modificar la solicitud durante la operación de carga de archivos, de tal manera a que este archivo se establezca con acceso de solo lectura, y como resultado provocar que todas las acciones posteriores realizadas en el archivo provoquen errores. Además este fallo podría permitir a un atacante configurar el directorio temporal del contenedor Servlet con acceso de solo lectura, esto con el fin de provocar errores en las operaciones posteriores de carga de archivos, resultando en una denegación de servicios (DoS).

Recomendaciones:

  • Actualizar Apache Struts 2 a la versión 2.5.22 o posterior, desde la página oficial de Apache.
  • En caso de no ser posible la actualización, como medidas de mitigación se recomienda:
    • Validar siempre los valores de los parámetros entrantes al reasignarlos a ciertos atributos de etiquetas Struts;
    • No utilizar la sintaxis %{…} o ${…} que haga referencia a la entrada modificable por el usuario en atributos de etiqueta;
    • Activar la Proactive OGNL Expression Injection Protection;
    • Agregar java.io. y java.nio. al atributo de valor de la constante struts.excludedPackageNames ubicada en el archivo struts-default.xml.

Referencias:

Compartir: