记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

CVE-2020-14882\CVE-2020-14883漏洞分析

2020-11-08 12:30

 

引言

前几天外部爆出了oracle 14882和14883漏洞配合使用的poc,通过两个漏洞的配合可以直接造成rce漏洞,是一个十分值得重视的问题,而这个漏洞的利用poc当然是不止目前曝光出来的一种的,所以这里着重分析一下漏洞的成因,同时为各位大佬把poc玩出新的花样提供一个思路。

 

漏洞分析

首先来看POC

http://127.0.0.1:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=false&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27whoami%27);%22);

看到POC基本能锁定这个漏洞主要的三个触发因子:

  1. 1、访问一些console后台的资源文件的时候,是不需要登录的。(当然这个设定大部分网站都有,不是什么大问题。)
  2. 2、weblogic会对提交的url进行两次url编码。(这一点似乎就和大部分中间件不太相似了)
  3. 3、weblogic的后管提供了具有代码执行能力的功能。

通过1和2的配合,可以通过/console/images/%252E%252E%252Fconsole.portal来实现路径跳跃,从而绕过了后管的登录限制。

通过3,就可以达到RCE的目的。

接下来我们对三个问题逐一进行分析。

问题一,weblogic的console中,哪些资源文件的访问不需要登录。
这个逻辑的处理代码在ServletSecurityManager.checkAccess中,首先应用会对路径进行分析,看一下是否是访问资源文件的,

跟进this.webAppSecurity.getConstraint直至StandardURLMapping.getExactOrPathMatch,在这里会去查看访问的url是否在资源文件的map中,这里无需多做分析,基于路径的资源文件名单自然是以包含作为匹配的依据,所以只要路径中包含map中的值,consloe在处理请求的时候,就不要求登录态,

具体的权限检查调用逻辑如下,首先在ChainedSecurityModule.checkAccess中会检测路径是否包含登录接口(j_security_check),

如果不包含,则进入CertSecurityModule.checkUserPerm,在这个函数中会检测配置常量protectResourceIfUnspecifiedConstraint的值(默认为false),如果是false就会进入WebAppSecurityWLS.hasPermission,查看是否有这个文件的访问权限,当然,资源文件的访问权限自然是有的,

于是应用就判断这条请求是具有权限的,checkAccess返回true,进入接下来的调用。

接下来就是问题二,weblogic究竟在哪个位置进行了二次url编码,一次url编码肯定是正常的 ,这是每个中间件都会做的事情,那我们顺着这条调用栈继续往下跟进,这段代码位于UIServletInternal.getTree处,在这里应用对已经进行了一次url编码的URI进行了第二次url编码

由于在后续的一系列操作中weblogic并没有在对路径穿越进行防范,从而造成了CVE-2020-14882漏洞,即后管权限绕过。

接下来就可以进入第三个问题了,命令执行的原因。
先从漏洞触发的入口类进行分析,BreadcrumbBacking.init类在处理后管请求的时候会去看一下提交的参数中是否有handle参数,

具体的操作逻辑在findFirstHandle中,

如果存在handle参数,就会把它的值传给HandleFactory.getHandle函数,而在这个函数中,会将形如aaa.bbb.class(“ccc”)的handleStr分解为两块,aaa.bbb.class作为被实例化的类,ccc作为参数,然后将ccc传入aaa.bbb.class的构造函数,并进行调用。

接下来就是一个gadgets的寻找问题了,什么类的构造函数调用后会造成rce的效果,目前公开的poc是coherence.jar中的类ShellSession,本文也就去分析一下这一条gadgets,看一下调用栈,

ShellSession类会把传入构造函数的值交给MVELInterpretedRuntime.parse,而MVELInterpretedRuntime会通过反射去执行java代码,从而造成了RCE。

这里可以看到MVELInterpretedRuntime是一个具有代码执行功能的类,在后续的漏洞挖掘中这个类说不定会再次登场。

 

总结

关于poc的重构造是有两个地方可以思考的,

第一点. 资源文件路径可以随意从上文中列出的map中寻找,这点很简单。

第二点. gadgets主要就是寻找构造函数具有反射或者代码执行能力的类即可。


知识来源: https://www.anquanke.com/post/id/221835

阅读:317802 | 评论:0 | 标签:漏洞 CVE

想收藏或者和大家分享这篇好文章→复制链接地址

“CVE-2020-14882\CVE-2020-14883漏洞分析”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

黑帝公告 📢

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

↓赞助商 🙇🧎

标签云 ☁