Spring Security RegexRequestMatcher 认证绕过漏洞(CVE-2022-22978)

Spring Security RegexRequestMatcher 认证绕过漏洞(CVE-2022-22978)

一、漏洞详情

当Spring-security使用 RegexRequestMatcher 进行权限配置,由于RegexRequestMatcher正则表达式配置权限的特性,正则表达式中包含“.”时,未经身份验证攻击者可以通过构造恶意数据包绕过身份认证。

二、影响版本

Spring Security 5.5.x < 5.5.7
Spring Security 5.6.x < 5.6.4
SpringSecurity其他低版本同样受影响

安全版本
Spring Security >= 5.5.7
Spring Security >= 5.6.4
Spring Security >= 5.7.0

三、处置建议

升级到官方已发布的最新版本:
Spring Security 5.5.x升级至 5.5.7:
https://github/spring-projects/spring-security/releases/tag/5.5.7
Spring Security 5.6.x升级至5.6.4 ∶
https://github/spring-projects/spring-security/releases/tag/5.6.4

四、版本依赖

Spring Boot Spring Security 是否受CVE-2022-22978影响
2.5.13 5.5.6 是
2.5.14 5.5.8 否(可用)
2.6.5 5.6.2 是
2.6.7 5.6.3 是
2.6.8 5.6.5 否(可用)

五、解决方案

1、直接升级Security 的jar包版本
修改pom.xml文件

<properties>
    <spring-security.version>5.5.8</spring-security.version>
</properties>

需要将springboot版本同步升级才能生效

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.14</version>
    <relativePath/>
</parent>

但是升级springboot版本会造成项目中一些相关的jar包依赖冲突,根据自己的项目对应修改。

2、只升级Security 的核心jar包

修改核心jar包版本

 	<properties>
        <!--<spring-security.version>5.5.8</spring-security.version>-->
        <core.version>5.7.8</core.version>
    </properties>

引入依赖

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>${core.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>${core.version}</version>
		</dependency>

同时忽略掉spring boot security 自带的版本jar包,相关的引入依赖都忽略掉

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.security</groupId>
					<artifactId>spring-security-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.springframework.security</groupId>
					<artifactId>spring-security-web</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

注:引入依赖会产生jar冲突
查询Maven 项目查找 jar 包是由哪个依赖引入的
直接使用mvn dependency:tree可以查看项目完整的依赖树。

命令格式如下:

mvn dependency:tree -Dverbose -Dincludes=要查询的内容(groupId:artifactId)

-dependency:tree:表示树状显示。
-Dverbose:表示可以显示所有的引用,包括因为多次引用重复而忽略的。
-Dincludes:可以制定查询条件

spring-security-web的groupId和artifactId为:

groupId: org.springframework.security
artifactId: spring-security-web

所以命令为

mvn dependency:tree -Dverbose -Dincludes=org.springframework.security:spring-security-web

根据控制台的jar包依赖排序,一一排查重复引用的jar包,在对应的pom模块中忽略掉旧版本就可以!

以上仅供参考学习!

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值