1. 链一财经首页
  2. 资讯

曲速未来 :RichFaces反序列化漏洞

曲速未来 :RichFaces反序列化漏洞

JSF介绍

区块链安全咨询公司 曲速未来 消息:JavaServer Faces(JSF)是一个为网络应用程序构建基于组件的用户界面的Java规范,并已通过JCP格式化为Java EE的一部分。

它也是一个MVC Web应用框架,通过在页面中使用可重用的UI组件简化了基于服务器的应用程序的用户界面(UI)。

JSF implementations: Mojarra/Myfaces(javax.faces-api/ jsf-impl+jsf-api / myfaces-impl+myfaces-api)

EL interfaces (javax.el-api /tomcat-jasper-el)

EL implementations: Jasper/Jboss (tomcat-jasper-el/ jasper-el / jboss-el)

Richfaces的安全历史安全问题都出现在资源处理程序处理请求方式上,执行流程如下:

获取处理过程相关的类,比如从URI中获取X,并且从参数do获取X的序列化状态对象

反序列化状态对象

创建X的一个实例并恢复其状态

处理X并产生匹配的响应(图像、视频、表格等)

RichFaces 3

3.1.0 ≤ 3.3.3: CVE-2013-2165

3.1.0 ≤ 3.3.4: RF-14310

RichFaces 4

4.0.0 ≤ 4.3.2: CVE-2013-2165

4.0.0 ≤ 4.5.4: CVE-2015-0279

4.5.3 ≤ 4.5.17: RF-14309

CVE-2013-2165:Arbitrary Java Deserializationin RichFaces 3.x ≤ 3.3.3 and 4.x ≤ 4.3.2

漏洞攻击URL示例:

曲速未来 :RichFaces反序列化漏洞

曲速未来 :RichFaces反序列化漏洞

CVE-2015-0279: Arbitrary EL Evaluation inRichFaces 4.x ≤ 4.5.3 (RF-13977)

漏洞触发

曲速未来 :RichFaces反序列化漏洞

RF-14310: Arbitrary EL Evaluation inRichFaces 3.x ≤ 3.3.4

曲速未来 :RichFaces反序列化漏洞

跟漏洞CVE-2015-0279/RF-13799类似,问题出现在

org.richfaces.renderkit.html.Paint2DResource

这个类,当一个资源请求被调用,会调用他的 send(ResourceContext) 方法

传递的参数是org.richfaces.renderkit.html.Paint2DResource$ImageData对象,如图:

曲速未来 :RichFaces反序列化漏洞

TagMethodExpression类的orig属性中包含el表达式,我们在构造poc的时候需要将恶意的的el表到时set进去。

漏洞利用的思路就是需要构造一个恶意ImageData对象里面包含我们自动定义的el表达式,el表达式可以是远程加载一个jar,也可以也写文件、反弹shell等

附一张利用成功的截图

曲速未来 :RichFaces反序列化漏洞

RF-14309: Arbitrary EL Evaluation inRichFaces 4.5.3 ≤ 4.5.17 NO CVE By pass CVE-2015-0279

CVE-2015-0279的补丁禁增加了contentProducer来处理特殊符号([^(]*)以缓解表达式注入问题。

曲速未来 :RichFaces反序列化漏洞

但是EL表达式支持定义函数映射和变量映射, 可以通过ELResolver解决函数(${prefix:name()})和变量(${var.property})映射到方法和表达式value的实例,richface 4.5.3版本中各种VariableMapper已经然如白名单中。所以利用这个特性,只需要在contentProducer方法表达式中使用变量,如$ {dummy.toString},并在方法表达式中添对应的VariableMapper,最终会映射到具体的ValueExpression。

具体利用在RF13977基础上修改下:

曲速未来 :RichFaces反序列化漏洞

CVE-2018-12532

漏洞是在RF-14309基础上变形的payload稳定性更好。

Gadget的结构:

曲速未来 :RichFaces反序列化漏洞

利用如下payload未能执行命令

JSF Facelets环境中的EL注入示例:

xhtml从请求中获取“表达式”参数,并将其发送到valAsString():

曲速未来 :RichFaces反序列化漏洞

NewClass.java实施器ELAsString()动态评估参数的EL实现:

曲速未来 :RichFaces反序列化漏洞

EL表达式执行的三个限制:

限制1 EL总是会调用 Class.getMethods() 数组中名字相匹配的第一个方法,其他重载方法不会调用。

限制2 Jasper’s EL 的实现(tomcat-jasper-el) 7.0.53 to 

8.0.25的一个bug导致不能通过反射调用无参方法。

限制3只有Jasper的EL实现支持将参数列表隐式转换为args。其他的实现(例如jboss-el)args需要一个数组作为参数,所以需要构造一个数组。

最终的payload:

曲速未来 :RichFaces反序列化漏洞

总结

区块链安全咨询公司 曲速未来 表示:需要对漏洞组件和java的些特性非常熟悉才能找到更多的绕过方式。

文章声明:本文为火星财经专栏作者作品,版权归作者所有。文章为作者本人观点,不代表火星财经立场。

根据国家《关于防范代币发行融资风险的公告》,大家应警惕代币发行融资与交易的风险隐患。

本文来自LIANYI转载,不代表链一财经立场,转载请联系原作者。

发表评论

登录后才能评论

联系我们

微信:kkyves

邮件:kefu@lianyi.com

时间:7x24,节假日bu休息

QR code