Smi1e@卫兵实验室
将文件上传到存在
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-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。在高版本中对参数名的过滤除了上面的白名单正则还有一个黑名单正则,参数名需要满足白名单正则且不满足黑名单正则才会进行表达式解析。
该漏洞的描述为将文件上传到使用 getter
公开 file
对象的 action
时,攻击者可以构造请求将上传的文件副本设置为只读,甚至可以将文件上传的temp目录设置为只读,导致后续所有的文件上传操作都失败。
看下我们上传的 myFile
对象,本质其实是一个 java.io.File
对象。
OgnlValueStack
维护了2个核心对象: CompoundRoot
和 OgnlContext
,CompoundRoot
是一个 ArrayList
,它作为 Ognl
的 Root
对象存储了 Action
实例。我们通过表达式 myFile
可以直接访问 uploadFile
对象的 myFile
属性,不需要使用 #
。action
其实是一个 javabean
,访问 myFile
属性时相当于调用了其 getMyFile
方法。由于 myFile
是一个 java.io.File
对象,我们同样可以通过 ognl
表达式调用其 set
方法。
比如 myFile.writable=false
调用 setWritable
方法,将上传的tmp文件权限改为不可写。
改tmp目录权限只需要获取tmp文件的父目录即可,myFile.parentFile.writable=false
。
再回头看参数名的正则过滤会发现payload不受限制,并没有用到复杂的字符。该漏洞虽然不能获取服务器权限,但是会影响业务的文件上传功能且利用条件简单,建议尽快修复。
漏洞修复
-
升级Struts 2.5.22版本
-
在struts-default.xml的配置
struts.excludedPackageNames
中添加java.io.,java.nio.
-
通过安恒信息相关产品对该漏洞检测与防御
关于我们
人才招聘
安全研究工程师
工作地点:
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]
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论