Summary
Excerpt |
---|
A vulnerability introduced by wildcard matching mechanism or double evaluation of OGNL Expression allows remote command execution. |
Who should read this | All Struts 2 developers and users |
---|---|
Impact of vulnerability | Remote command execution, remote server context manipulation, injection of malicious client side code |
Maximum security rating |
Critical | |
Recommendation | Developers should immediately upgrade to Struts 2.3.14.3 |
---|---|
Affected Software | Struts 2.0.0 - Struts 2.3.14.2 |
Reporter | Jon Passki from Coverity Security Research Laboratory reported directly to security@struts.a.o and via blog post |
CVE Identifier |
Problem
Struts 2 allows define action mapping base on wildcards, like in example below:
...
Wildcard matching
- Run struts2-blank app
Open the following url, resulting in dynamic action name resolution based on passed value of
#foo
Code Block http://localhost:8080/example/%24%7B%23foo%3D%27Menu%27%2C%23foo%7D
Code Block http://localhost:8080/example/${#foo='Menu',#foo}
...
Double evaluation of an expression
Open example.xml present in the Struts Blank App and change result of HelloWorld action to one below:
Code Block xml xml <result type="httpheader"> <param name="headers.foobar">${message}</param> </result>
Open HelloWorld.java and change
execute()
method as below:Code Block java java public String execute() throws Exception { return SUCCESS; }
- Run struts2-blank app
Open the following url (you must have a tool to check response headers)
Code Block http://localhost:8080/example/HelloWorld.action?message=%24{%25{1%2B2}}
Code Block http://localhost:8080/example/HelloWorld.action?message=${%{1+2}}
- Check value of
foobar
header, it should be3
...