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
04/06/2013
Una nova actualització de seguretat per al Projecte Apache Struts soluciona dues vulnerabilitats que podrien aprofitar-se per a executar codi remot en el servidor. Ja va haver-hi un intent de solucionar estes fallades en la versió immediatament anterior, encara que no es van arribar a cobrir tots els possibles vectors d’atac.
Struts en un entorn de treball de codi obert per al desenvolupament d'Aplicacions web a Java EE amb el patró MVC (Model Vista Controlador). Desenvolupat per l'Apache Software Foundation, en un primer moment formava part del Projecte Jakarta, i es va convertir en projecte independent en 2005. La versió 1 d'Struts va arribar al final del seu cicle de vida el passat abril, i la versió 2 és l’única suportada des de llavors.
L’actualització de seguretat soluciona dos fallades, amb identificadors CVE 2013-2115-i CVE 2013-1966-, que podrien ser aprofitats per a executar codi arbitrari en el servidor. Anteriorment, s’havia publicat el butlletí S2-013 que solucionava estes vulnerabilitats, però no en tots els vectors d’atac possibles, els quals han sigut publicats per l’investigador Jon Passki, de Coverity.
Struts utilitza el llenguatge OGNL (Object-Graph Navigation Language), un llenguatge d’expressions de codi obert per a Java. Els llenguatges d’expressions són utilitzats per a manejar propietats d’objectes Java de forma més senzilla, com la crida a mètodes, a més de conversió entre elements HTTP i objectes Java. Estos llenguatges solen ser vulnerables a avaluació doble. Quan s’avalua una expressió OGNL, el seu contingut es pot tornar a avaluar com una altra expressió OGNL independent.
En la configuració d'Struts es definix com arreplegar les crides a les accions quan estes no estan definides (en general, Struts permet l’ús de comodins per a capturar les crides a les accions):
<action name="*" class="tutorial2.example.ExampleSupport">
1. <result>/example/{1}.jsp</result>
2. </action>
Injectant codi OGNL entre els caràcters ${} (o %{}), i usant-lo com a nom d’acció, Struts avalua tant el contenidor ${} com el seu contingut, que pot ser, al seu torn, codi OGNL com el vist anteriorment. Per exemple:
http://127.0.0.1:8080/struts2-blank/example/$%7B%23context['xwork.methodaccessor.denymethodexecution']=%21%28%23_memberAccess['allowStaticMethod
Access']=true%29,%28@java.lang.Runtime@getRuntime%28%29%29.exec%28'touch%20aaa'%29.waitFor%28%29%7D.action/
Noteu que la URL acaba en .action. Este exemple canvia els valors dels camps xwork.methodaccessor.denymethodexecution i allowStaticMethodAccess, que són els que prevenen l’execució de codi remot.
L’arrel del problema radica en diverses crides encadenades a diversos mètodes de processament, des d'Struts ResultSupport.conditionalParse a TextparseUtil.translateVariables, que al seu torn crida OgnltextParser.evaluate, en què s’avalua el codi OGNL intern.
Hi ha un problema semblant en els mètodes HttpHeaderResult.execute i DefaultUrlHelper.translateVariable. Per exemple, en una configuració vulnerable podem definir que els accessos a l’acció HelloWorld incloguen el paràmetre missatge:
<s:url id="url" action="HelloWorld">
<s:param name="request_locale"><s:property vaig valorar="message"/></s:param>
</s:url>
En accedir a un servidor amb una petició els paràmetres dels quals estiguen especialment manipulats, es pot injectar codi OGNL en l’etiqueta param, que serà avaluada. Per exemple:
http://localhost:8080/struts2-blank/example/HelloWorld.action?message=${%23_memberAccess[%22allowStaticMethodAccess%22]=true,@java.lang.Runtime@getRuntime().exec('calc')}
Este codi serà usat com un paràmetre en una etiqueta s:url o s:a, que serà, al seu torn, avaluat com a OGNL i, finalment, executat. Este mètode és semblant al demostrat en el butlletí, amb la diferència que en este s’utilitza includeParam per a definir què es fa amb els paràmetres de la petició.
Sistemes Afectats:Totes les versions d'Struts anteriors a 2.3.14.2 són vulnerables, per la qual cosa es recomana la instal·lació del pedaç com més prompte millor.
Referències:CVE-2013-2115,CVE-2013-1966
Solució:Aplicar l'actualització del fabricatn el més prompte possible.
Notes:S2-014
http://struts.apache.org/release/2.3.x/docs/s2-014.html