jueves, 5 de enero de 2012

Graves vulnerabilidades remotas en Apache Struts

Se han anunciado cuatro vulnerabilidades en Apache Struts (versiones 2.1.0 a 2.3.1), que podrían permitir a un atacante remoto ejecutar código Java o sobreescribir archivos arbitrarios en el sistema objetivo.

Struts es una herramienta gratuita de código abierto para el desarrollo de aplicaciones Web Java EE bajo el patrón de arquitectura de software Modelo-Vista-Controlador (MVC). Anteriormente se desarrollaba como parte del proyecto Jakarta de la Apache Software Foundation, pero actualmente es un proyecto independiente conocido como Apache Struts.

El primero de los problemas de ejecución remota afecta a versiones menores a 2.2.1.1 y está relacionado con "ExceptionDelegator". Cuando se produce una excepción mientras se aplican los valores de los parámetros a propiedades, el valor puede ser evaluado como una expresión OGNL. Como los valores no se filtran una atacante puede abusar de la potencia del lenguaje OGNL para ejecutar código Java arbitrario.

Otro problema se debe a que la lista blanca de caracteres para nombres de parámetros no se aplica a "CookieInterceptor". Cuando Struts está configurado para tratar nombres de cookies, un atacante puede ejecutar comandos del sistema arbitrarios mediante métodos estáticos Java.

Por ultimo, determinadas entradas no son limpiadas adecuadamente por ParameterInterceptor antes de emplearse para crear archivos. Un atacante podría emplear esto para crear archivos arbitrarios.
En el aviso oficial, también se incide en un problema, aunque no se trata de una vulnerabilidad por sí misma. Se informa que las aplicaciones que se ejecutan en modo desarrollador y usan "DebuggingInterceptor" están expuestas a una ejecución remota de comandos.

Se recomienda actualizar a Struts 2.3.1.1 y aplicar el filtro "acceptedParamNames" más fuerte a "ParameterInterceptor" y "CookieInterceptor":
acceptedParamNames = "[a-zA-Z0-9\.][()_']+";

Más información:

Remote command execution and arbitrary file overwrite, Strict DMI does not work correctly

Struts 2 Security Vulnerability - Dynamic Method Invocation


Antonio Ropero
Twitter: @aropero

No hay comentarios:

Publicar un comentario en la entrada