关于这个 Struts2 的漏洞感慨颇深,首先根据官方漏洞的描述,大家应该能很快找到
漏洞出现的位置,基本上 Struts2 里面大部分标签都是存在 OGNL 代码二次执行的问
题,问题虽然能很容易的发现,但是在最新版本里面要想成功利用该漏洞执行任意代
码,需要绕过 Struts2 的安全管理器,所以说整个漏洞变成了一个如何绕过 Struts2 安
全管理器的问题,我花了很多时间在想办法如何去绕过 Struts2 的安全管理器,一开
始我从来没有想过 Struts2 里面的_memberAccess 变量可以被修改,因为前几次 Struts2
的 RCE 问题中_memberAccess 变量已经被纳入黑名单了,同时我把 Struts2 的安全管
理器的源代码也看了一遍,似乎都很合理,但是直到安恒研究院的同学把 POC 丢出
来的时候,_memberAccess 变量依然可以被修改,真的是让人匪夷所思。所以本文也
主要是围绕这个 Bypass 安全管理器来进行探讨,看看究竟是什么原因导致了 Bypass
安全管理器。
漏洞详情
从官方的描述看来这次是 Strut2 标签的问题,而且还是标签属性值 OGNL 二次解析
的问题,利用条件比较苛刻,所以说这个漏洞威力并没有那么大,下面直接给出一部
分存在问题的标签,其他的标签大家自己去找,这里只列出来几个比较典型的,这里
主要说两类标签属性值,一个是 id 属性,在 org.apache.struts2.components.UIBean
类中我们很容易发现 id 参数在 setID 时已经进行了第一次 OGNL 表达式的执行,如
下图
然后紧接着在
org.apache.struts2.components.UIBean.populateComponentHtmlId(Form)方法中
进行了第二次的 OGNL 表达式解析,如下如的
评论1