来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] 2014-05-03,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:从漏洞简要描述来看,确定是对之前S2-021的补充。其实在S2-...
2014-05-03,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:
从漏洞简要描述来看,确定是对之前S2-021的补充。
其实在S2-021漏洞的修补过程可以看出官方已经意识到了cookie拦截器也存在和参数拦截器类似的问题,并且无法使用struts-default.xml配置文件进行正则拦截。主要原因在于如果应用配置某个action使用通配符‘*’接受cookieName,cookie拦截器默认会对所有传入的cookieName进行参数绑定,造成操控class进而影响到classLoader。
从S2-022可以看出,官方只理解到了cookie拦截器操控classLoader问题,虽然在xwork中特定引入一个ExcludedPatterns类:
public class ExcludedPatterns { public static final String CLASS_ACCESS_PATTERN = "(.*\\.|^|.*|\\[('|\"))class(\\.|('|\")]|\\[).*"; public static final String[] EXCLUDED_PATTERNS = { CLASS_ACCESS_PATTERN, "^dojo\\..*", "^struts\\..*", "^session\\..*", "^request\\..*", "^application\\..*", "^servlet(Request|Response)\\..*", "^parameters\\..*" };
但EXCLUDED_PATTERNS正则匹配只用在了参数拦截器中,cookie拦截器中却只使用了CLASS_ACCESS_PATTERN进行匹配防御:(struts2.3.16.2 CookieInterceptor类部分代码)
// Allowed names of cookies private Pattern acceptedPattern = Pattern.compile(ACCEPTED_PATTERN, Pattern.CASE_INSENSITIVE); private Pattern excludedPattern = Pattern.compile(ExcludedPatterns.CLASS_ACCESS_PATTERN, Pattern.CASE_INSENSITIVE);
excludedPattern只取了CLASS_ACCESS_PATTERN部分。
很明显,classLoader操控漏洞解决了,但是session,request,application等各类web应用变量任意操控问题依然存在,因而有了后续S2-022的出现。
此外,漏洞成功利用的前提是需要应用针对action采用类似如下特定的配置:
<action name="hello" class="test.helloAction"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="cookie"> <param name="cookiesName">*</param> <param name="cookiesValue">*</param> </interceptor-ref>
但不保证业务一定不会采用,腾讯安全中心建议广大厂商迅速升级至struts2.3.16.3版本
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com