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. -- Apache Struts 民间平安告示(参考1)
2017年9月5日,Apache Struts宣布最新平安通知布告,Apache Struts2的REST插件存在长途代码履行的高危破绽,该破绽由lgtm.com的平安研究员报告请示,破绽编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化破绽,应用XStream组件对XML格局的数据包停止反序列化操纵时,未对数据内容停止有用验证,存在平安隐患,可被长途进击。
Struts2启用了rest-plugin后并编写并设置了XStreamHandler后,能够招致长途敕令履行这一重大成绩。
0x01 破绽影响面
影响面
肯定CVE-2017-9805为高危破绽。 现实场景中存在必定局限性,必要满意必定前提,非struts自己默许开启的组件。
影响版本
Version 2.5.0 to 2.5.12
Version 2.3.0 to 2.3.33
修复版本
Struts 2.5.13
Struts 2.3.34
0x02 破绽概况
技巧细节
文件/org/apache/struts2/rest/ContentTypeInterceptor.java
在struts2 rest-plugin 中的处置逻辑里接遭到对应格局的新闻时,会挪用曾经注册的对应handler的 handler.toObject办法对其停止实例化,在这里传入的xml新闻,以是就会跳转到曾经界说的XStreamHandler的toObject办法
在颠末此处的fromXML办法后招致实例化的歹意对象被履行,招致歹意代码履行
随即看到计算器被胜利弹出
破绽修复
新版本中增加了XStreamPermissionProvider
而且对本来有成绩的createXStream停止重写,增加了校验,回绝不平安的类履行
0x03 破绽应用验证
0x04 修复倡议
1.民间倡议设置插件处置的数据范例限定为json
2.升级Struts到2.5.13版本或2.3.34版本
3.在XStreamHandler中停止数据校验或反省