Avisos 10 de January, 2012

Actualització Apache Struts

La fundació Apache ha publicat una actualització associada al seu Framework de desenvolupament web Struts. La nova versió soluciona 4 vulnerabilitats que permetrien a un atacant remot, no autenticat, executar codi Java i sobreescriure arxius.

Recursos afectats:



Productes afectats:
 

• Programari web desenvolupat amb Framework Struts versió 2.1.0 fins a 2.3.1
 

Impacte:



Execució de codi, sobre escriptura de fitxers ubicats a servidor web.

Solució:


Actualitzar les aplicacions web desenvolupades amb versions antigues del Framework afectat, amb la nova versió del Framework  versió 2.3.1.1 de Struts.
 



Si la aplicació ja està actualitzada a la versió 2.3.1 de Struts, és possible mitigar l'explotació aplicant un filtre acceptedParamNames, més restrictiu si apliquem a  ParameterInterceptor i CookieInterceptor:
 



acceptedParamNames = "[a-zA-Z0-9 \\ .][()_']+"
 



També és possible des habilitar la invocació dinàmica de mètodes (DMI o Dynamic Method Invocation), a través de la qual es podrien explotar les vulnerabilitats, mitjançant una de les següents opcions:
 
o Al fitxer struts.xml, incloure:
 




 



o Al fitxer struts.properties:
 



struts.enable.DynamicMethodInvocation = false
 



o Al fitxer web.xml incloure aquest node en el filtre Struts 2:
 




 
struts.enable.DynamicMethodInvocation
 
false
 

 



Encara que s'utilitzi una versió actualitzada, és convenient des habilitar la invocació dinàmica de mètodes si no és necessària per al funcionament normal de l'aplicació, aquesta permet que tots els mètodes públics de les classes puguin ser invocats des de peticions externes.
 

Detall:


Execució remota de comandes a Struts <= 2.2.1.1 (ExceptionDelegator): Quan es produeix una excepció en el moment que s'apliquen els valors dels paràmetres a propietats, el valor pot ser avaluat com una expressió de tipus OGNL. Com els valors no es filtren, un atacant pot abusar de la potència del llenguatge OGNL per a executar codi Java de forma arbitraria.
 



Aquest problema estava notificat i es va fixar a la versió de Struts 2.2.3.1. No obstant, la capacitat d'execució arbitrària de codi en Java no estava contemplada.
 



Execució remota de comandes a Struts <= 2.3.1 (CookieInterceptor): la llista blanca de caràcters per a noms de paràmetres no s'aplica a "CookieInterceptor". Quan  el Framework Struts està configurat per tractar noms de cookies, la opció allowStaticMethodAccess es pot establir en true dins la petició HTTP. Per tant, un atacant pot executar comandes de sistema de forma arbitraria mitjançant mètodes estàtics de Java.
 



Sobre escriptura d'arxius arbitraris a Struts <= 2.3.1 (ParameterInterceptor): determinades entrades no son netejades adequadament per ParameterInterceptor. Un atacant pot tenir accés a constructors públics amb un sol paràmetre de tipus String per crear nous objectes Java, i accedir al seu setter amb un sol paràmetre de tipus String. Això pot ser objecte d'abús, com per exemple per crear i sobre escriure arxius arbitraris. Amb la finalitat d'injectar caràcters prohibits en un nom d'arxiu es pot utilitzar una propietat string no inicialitzada.
 



Execució remota de comandes a Struts <= 2.3.1 (DebuggingInterceptor): No és una vulnerabilitat de seguretat,  però s'ha de tenir present  que les aplicacions que s'executen en mode desenvolupador i fan servir "DebuggingInterceptor", estan exposades a execució remota de comandes. Els desenvolupadors han de ser conscients que deixar-ho activat a codi a producció, no només té problemes de rendiment (com es documenta), sinó també te un impacte de seguretat a nivell crític.
 






Referències
 



•    Article original de l'investigador de seguretat
 
http://www.brucephillips.name/blog/index.cfm/2011/2/19/Struts-2-Security-Vulnerability--Dynamic-Method-Invocation
 



•    Avís de seguretat de la Fundació Apache
 
http://struts.apache.org/2.x/docs/s2-008.html

Publicat a: Avisos