S2-060 拒绝服务漏洞分析

  • A+
所属分类:安全文章

[email protected]卫兵实验室


将文件上传到存在 File 对象属性且存在对应 getter 方法的 action 时,攻击者可以构造请求将上传的文件副本设置为只读,甚至可以将文件上传的temp目录设置为只读,导致后续所有的文件上传操作都失败。

影响范围

Struts 2.0.0 - Struts 2.5.20

漏洞分析

分析S2-060之前先回看一下S2-003、005、009。他们的问题都出现在拦截器 com.opensymphony.xwork2.interceptor.ParametersInterceptor ,在将请求的参数名和参数值添加进 OgnlValueStack 时会对参数名进行一次OGNL表达式解析。

S2-060 拒绝服务漏洞分析

S2-060 拒绝服务漏洞分析

在S2-003中参数名允许除了 ^,#:= 以外的所有可见字符,不过可以使用unicode编码或8进制进行绕过。S2-003的补丁禁止了静态方法调用以及类方法的执行并引入了 SecurityMemberAccess 对象,不过我们依然可以通过OGNL表达式访问到 context 对象和 SecurityMemberAccess 对象来取消这些限制。S2-005的补丁完善了过滤参数名的正则表达式 [a-zA-Z0-9.][()_'s]+ 来过滤  等特殊符号,从而无法使用unicode编码和8进制绕过字符限制,不过参数值并没有被过滤,如果当前action中接受了某个参数 example,这个参数将进入OGNL的上下文中,我们可以将OGNL表达式放在 example 参数值中,然后使用 /helloword.acton?example=ognlexpression&(example)('xxx')=1 的方法来执行它从而绕过过滤。S2-009的补丁再一次完善了正则表达式 w+((.w+)|([d+])|((d+))|(['w+'])|(('w+')))* ,不允许 (example)('xxx') 这种格式的参数名,在更高的版本正则表达式变成了 w+((.w+)|([d+])|((d+))|(['(w|[u4e00-u9fa5])+'])|(('(w|[u4e00-u9fa5])+')))* 。

接着来看S2-060。在高版本中对参数名的过滤除了上面的白名单正则还有一个黑名单正则,参数名需要满足白名单正则且不满足黑名单正则才会进行表达式解析。

S2-060 拒绝服务漏洞分析

S2-060 拒绝服务漏洞分析

S2-060 拒绝服务漏洞分析

该漏洞的描述为将文件上传到使用 getter 公开 file 对象的 action 时,攻击者可以构造请求将上传的文件副本设置为只读,甚至可以将文件上传的temp目录设置为只读,导致后续所有的文件上传操作都失败。

看下我们上传的 myFile 对象,本质其实是一个 java.io.File 对象。

S2-060 拒绝服务漏洞分析

OgnlValueStack 维护了2个核心对象: CompoundRoot 和 OgnlContextCompoundRoot 是一个 ArrayList,它作为 Ognl 的 Root 对象存储了 Action 实例。我们通过表达式 myFile 可以直接访问 uploadFile 对象的 myFile 属性,不需要使用 # 。action 其实是一个 javabean ,访问 myFile 属性时相当于调用了其 getMyFile 方法。由于 myFile 是一个 java.io.File 对象,我们同样可以通过 ognl 表达式调用其 set 方法。

S2-060 拒绝服务漏洞分析

比如 myFile.writable=false 调用 setWritable 方法,将上传的tmp文件权限改为不可写。

S2-060 拒绝服务漏洞分析

改tmp目录权限只需要获取tmp文件的父目录即可,myFile.parentFile.writable=false 。

S2-060 拒绝服务漏洞分析

再回头看参数名的正则过滤会发现payload不受限制,并没有用到复杂的字符。该漏洞虽然不能获取服务器权限,但是会影响业务的文件上传功能且利用条件简单,建议尽快修复。

漏洞修复

  • 升级Struts 2.5.22版本

  • struts-default.xml的配置 struts.excludedPackageNames 中添加 java.io.,java.nio.

  • 通过安恒信息相关产品对该漏洞检测与防御


关于我们

S2-060 拒绝服务漏洞分析

人才招聘

安全研究工程师

工作地点:

1.杭州;


岗位职责:
1.安全攻防技术研究,最新web应用及中间件漏洞挖掘研究;
2.跟踪分析国内外的安全动态,对重大安全事件进行快速响应;
3.公司WAF等安全防护产品的规则编写,对已有的规则进行优化维护;
4.针对公司的产品,进行全面详细的安全测试评估。

任职要求:
1.了解常见的网络协议(TCP/IP,HTTP,FTP等);
2.熟练使用Wireshark等抓包工具,熟悉正则表达式;
3.掌握常见漏洞原理,有一定的漏洞分析能力;
4.具备php、python、java或其他相关语言编码能力;
5.对常见waf绕过有一定的基础经验;
6.具备一定的文档编写能力,具备良好的团队共同能力;
7.对安全有浓厚的兴趣,工作细致耐心。




感兴趣的小伙伴请联系Nike,或将简历投送至下方邮箱。(请注明来源“研究院公众号”,并附带求职岗位名称)

联系人:Nike
邮箱:[email protected]




发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: