...
Excerpt |
---|
Possible Remote Code Execution attack when using the Struts REST plugin with XStream handler to handle XML payloads |
Who should read this | All Struts 2 developers and users |
---|---|
Impact of vulnerability | A RCE attack is possible when using the Struts REST plugin with XStream handler to deserialise XML requests |
Maximum security rating | Critical |
Recommendation | Upgrade to Struts 2.5.13 or Struts 2.3.34 |
Affected Software | Struts 2.1. |
6 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12 | |
Reporter | Man Yue Mo <mmo at semmle dot com> (lgtm.com / Semmle). More information on the lgtm.com blog: https://lgtm.com/blog |
---|---|
CVE Identifier | CVE-2017-9805 |
Problem
The REST Plugin is using a XStreamHandler
with an instance of XStream for deserialization without any type filtering and this can lead to Remote Code Execution when deserializing XML payloads.
...
Disable handling XML pages and requests to such pages
Code Block xml xml <constant name="struts.action.extension" value="xhtml,,json" />
Override
getContentType
inXStreamHandler
Code Block language java public class MyXStreamHandler extends XStreamHandler { public String getContentType() { return "not-exitingexisting-content-type-@;/&%$#@"; } }
Register the handler by overriding the one provided by the framework in your
struts.xml
Code Block xml xml <bean type="org.apache.struts2.rest.handler.ContentTypeHandler" name="myXStreamHandmer" class="com.company.MyXStreamHandler"/> <constant name="struts.rest.handlerOverride.xml" value="myXStreamHandler"/>
...