网安引领时代,弥天点亮未来
VMware Spring Security是美国威睿(VMware)公司的一套为基于Spring的应用程序提供说明性安全保护的安全框架。VMware Spring Security存在授权问题漏洞,该漏洞源于在应用程序中使用 RegexRequestMatcher 以及正则表达式的通配符(.)处理不受信任的输入时存在输入验证错误。
Spring Security 5.5.x < 5.5.7
Spring Security 5.6.x < 5.6.4
Spring Security 其他低版本同样受影响
1.使用github上的漏洞环境
https://github.com/XuCcc/VulEnv/tree/master/springboot/cve_2022_22978
2.对漏洞进行复现
在URL中插入%0a或者%0d,即可绕过验证访问页面(\r的url编码为%0d回车\n的url编码为%0a换行)绕过验证
执行poc
admin/%0a%0d
方式1
方式2
方式3
流量情况
漏洞成因,因为RegexRequestMatcher
正则表达式处理的特性,导致可能某些需要认证的 Servlet
被绕过。
1.web接口
2.通过正则表达式匹配认证
3.漏洞触发点就在/admin/{name}接口。进入org.springframework.security.web.util.matcher.RegexRequestMatcher#matches
方法中。
request.getServletPath() -->对字符解码 并且会将;之后的字符到/字符删除
request.getRequestURI() -->原样输出
当认证接口中使用了getRequestURI()或getRequestURL()函数来解析用户请求的URL时,若URL中包含了一些特殊符号就可能产生限制绕过的条件。
4.在校验的时候会产生认证的绕过,可以正常映射到/admin/*的路径上。
解码后
认证路径改为/admin/(?s).*
package person.xu.vulEnv;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import static org.springframework.security.config.Customizer.withDefaults;
@Configuration
@EnableWebSecurity
public class AuthConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeHttpRequests((authorize) -> authorize
.regexMatchers("/admin/(?s).*","/admin2").authenticated()
)
.httpBasic(withDefaults())
.formLogin(withDefaults());
// @formatter:on
return http.build();
}
// @formatter:off
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
// @formatter:on
}
测试漏洞不成功
官方提交的修复措施在5.6.4的diff中官方将DEFAULT默认匹配模式改为了Pattern.DOTALL点阵模式。在点阵模式下表达式会匹配\r\n等终止符,而在API文档中官方也进行了说明默认情况下,此表达式与行终止符不匹配。而后也将Pattern.DOTALL在开启大小写区分的情况下进行了组合,这样无论是否开启大小写模式均使用点阵模式进行匹配。
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
Spring Security 5.5.x 升级至 5.5.7
Spring Security 5.6.x 升级至 5.6.4
https://tanzu.vmware.com/security/cve-2022-22978
参考链接
http://123.124.177.30/web/xxk/ldxqById.tag?CNNVD=CNNVD-202205-3584
https://mp.weixin.qq.com/s/CgZ3T6Twz8v01YBVNmcPug
https://xz.aliyun.com/t/11473#toc-2
https://www.freebuf.com/vuls/335704.html
弥天简介
学海浩茫,予以风动,必降弥天之润!弥天弥天安全实验室成立于2019年2月19日,主要研究安全防守溯源、威胁狩猎、漏洞复现、工具分享等不同领域。目前主要力量为民间白帽子,也是民间组织。主要以技术共享、交流等不断赋能自己,赋能安全圈,为网络安全发展贡献自己的微薄之力。
口号 网安引领时代,弥天点亮未来
知识分享完了
喜欢别忘了关注我们哦~
弥 天
安全实验室