CSIRTCV

Está usted visitando una publicación en la hemeroteca de CSIRT-CV.
Para acceder al portal y contenido actual, visite https://www.csirtcv.gva.es

11/01/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.

Riesgo: Alto

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.

Sistemas Afectados:

Apache Struts versiones 2.1.0 a 2.3.1

Referencias:

None

Solución:

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\.][()_']+";

Notas:

http://unaaldia.hispasec.com/2012/01/graves-vulnerabilidades-remotas-en.html
http://secunia.com/advisories/47393/
http://struts.apache.org/2.x/docs/s2-008.html
http://www.brucephillips.name/blog/index.cfm/2011/2/19/Struts-2-Security-Vulnerability--Dynamic-Method-Invocation

Fuente: Hispasec una-al-día

CSIRT-CV