九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

admin 2022年12月5日18:43:23评论186 views字数 2532阅读8分26秒阅读模式

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


一、漏洞介绍



Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。该组件于2022年10月13日Shiro官方发布1.10.0版本,最新版本之前存在身份验证绕过漏洞,编号CVE-2022-40664。


二、漏洞逆向审计


通过分析Github上的shiro官方仓库中的commit,来查看1.10.0版本与上一版本的代码变更情况。

commit传送门:GitHub-Commit-Shirohttps://github.com/apache/shiro/commit/28e10e0ca1cdcd2cede86802fde8464b29265fc8#diff-9c5fb3d1b7e3b0f54bc5c4182965c4fe1f9023d449017cece3005d3f90e8e4d8

*左右滑动查看更多

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御



由于版本变更的代码较多,我们进行逐一的分析。


以下为第一个业务逻辑更改。通过下图可以看出在调用GuiceShiroFilter方法时参数多加了一个ShiroFilterConfiguration对象,可以继续看commit中其他的类更改,均为增加了ShiroFilterConfiguration类对象。现在就明确追踪目标,向下追踪ShiroFilterConfiguration类对象的定义。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

追踪到ShiroFilterConfiguration类,发现此类是1.10.0版本新增的代码,创建了isFilterOncePerRequest等方法,我们对注解进行翻译,内容如下:





设置过滤器是每次请求执行一次,还是每次调用过滤器时执行一次。


如果您正在使用{@link javax.servlet.RequestDispatcher RequestDisputcher}转发,请保持禁用状态或包含请求(JSP标记、编程方式或通过框架)。


@param filterOncePerRequest此筛选器是否每个请求执行一次。



通过注解可以看出此次更新为禁用javax.servlet.RequestDispatcher RequestDisputcher(Java请求转发功能),可以看出此漏洞为Java请求转发绕过Shiro的过滤器从而达到身份绕过!

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


我们创建两个本地项目,并分别导入shiro1.7.0和shiro1.10.0,追一下代码区别。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


可以看出在过滤器处,1.10.0多了个条件校验位filterOncePerRequest,追踪此参数。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


此参数即为禁用javax.servlet.RequestDispatcher请求转发方法,这也证实了我们之前的猜测。

三、RequestDispatcher介绍



定义一个对象,从客户端接收请求并将其发送到服务器上的任何资源(例如servlet,HTML文件或JSP文件)。


servlet容器创建RequestDispatcher对象,该对象用作位于特定路径或特定名称的服务器资源的包装。此接口旨在包装servlet,但servlet容器可以创建RequestDispatcher对象以包装任何类型的资源。


RequestDispatcher定义了两个方法分别为forward和include。


我们去追踪这两个方法,通过查看代码逻辑发现即使是shiro1.10.0在spring项目中也是默认不拦截forward和include方法的,在新版本中新增加了ShiroFilterConfiguration类,可以通过这个类来设置外部的过滤器来禁用forward和include方法。


四、漏洞危害



攻击者可通过访问指定的请求转发接口绕过系统后台的权限控制,从而实现系统身份权限绕过,例如访问一个请求转发到用户登录的接口,即可绕过系统对token或Auth等参数的验证,从而可以直接登录系统,造成未授权登录,从而出现系统信息泄漏等风险。


五、漏洞复现



创建一个Springboot项目并引入shiro1.7.0依赖,设计controller接口,一个为利用forward进行请求转发至另一个接口,而另一个接口为正常的身份验证接口,存在shiroFilter进行过滤,但这里只是利用shiro默认的设置,不对RequestDispatcher进行限制。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


在外部过滤器中配置加白所有请求转发函数,保证我们接口中的forward可以正常转发。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


下面我们请求第二个存在身份验证的接口,发现返回身份验证失败。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

直接请求第一个接口发现可以直接绕过身份验证。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御



六、漏洞利用难度



通过上面所描述的漏洞详情,可以看出此漏洞的利用难度较大,如果想去利用此漏洞,需要满足以下条件:


1)Shiro版本是低于1.10.0的;

2)系统在配置Shiro过滤器(ShiroFilter)时放开所有请求转发的方法,即

registrationBean.setDispatcherTypes(EnumSet. al1Of (DispatcherType.class));

*左右滑动查看更多


3)系统除设计需要身份校验的接口外,设计请求转发至此接口的另外一个接口,攻击者需要访问含有请求转发的接口实现身份验证绕过。 


需要同时满足以上三点才可以利用此漏洞,所以利用难度还是比较大的,如果系统满足此三点需立即进行修复。


七、修复建议



1. 升级Shiro版本至1.10.0。

2.如果想要通过forward或include拦截鉴权方法需要手动配置FilterRegistrationBean的DispatcherType禁用所有请求转发的方法(由于升级Shiro版本到1.10.0后默认还是允许forward或include方法的),示例代码如下:

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御


3.部署WAF类设备对攻击包进行监测和拦截。




—  往期回顾  —


九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御



关于安恒信息安全服务团队
安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

原文始发于微信公众号(安恒信息安全服务):九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月5日18:43:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   九维团队-绿队(改进)| Shiro身份验证绕过(CVE-2022-40664)及防御https://cn-sec.com/archives/1446428.html

发表评论

匿名网友 填写信息