一个演示易受 Spring Security 授权绕过 CVE-2022-31692 攻击的应用程序的项目
2022-11-9 09:43:27 Author: Ots安全(查看原文) 阅读量:37 收藏

概述

一个简单的 Spring Boot 应用程序,演示了易受CVE-2022-31692攻击的配置。

此漏洞可能因其严重性而引起关注——它的 CVSS 3.x 基本分数为 9.8,因为它允许绕过身份验证。该项目的目的是演示公告中描述的导致漏洞适用的条件。

  • 应用程序期望 Spring Security 应用安全性来转发和包含调度程序类型。

  • 应用程序使用AuthorizationFilter手动或通过authorizeHttpRequests()方法。

  • 应用程序将其配置FilterChainProxy为适用于转发和/或包含请求(例如spring.security.filter.dispatcher-types = request, error, async, forward, include)。

  • 应用程序可以将请求转发或包含到更高特权保护的端点。

  • 应用程序将 Spring Security 配置为通过以下方式应用于每个调度程序类型authorizeHttpRequests().shouldFilterAllDispatcherTypes(true)

作为参考,我很确定是解决漏洞的提交。

示范

该应用程序具有三个 URL:

  1. /索引页面

  2. /admin管理页面,要求用户提供基本身份验证(凭据“用户”/“通行证”)并分配 ROLE_ADMIN 角色

  3. /forward服务器端转发到管理页面

访问控制是通过 SecurityConfig 类中的 authorizeHttpRequests() 指定的。

.authorizeHttpRequests((authz) -> authz  .antMatchers("/").permitAll()  .antMatchers("/forward").permitAll()  .antMatchers("/admin").hasAuthority("ROLE_ADMIN")  .shouldFilterAllDispatcherTypes(true))

预期行为

  1. 用户访问/但未通过身份验证(感谢permitAll()

  2. 用户访问/admin。他们不提供身份验证,请求被拒绝(401 未授权)。

  3. 用户访问/admin。他们提供有效的身份验证,但请求仍然被拒绝(403 Unauthorized),因为他们没有所需的角色.hasAuthority("ROLE_ADMIN")

  4. 用户访问/forward。他们的请求通过 GET /forward 的安全过滤器链,它通过了有效(感谢permitAll())。控制器处理请求,并返回forward:/admin到 Dispatcher。按照spring.security.filter.dispatcher-typesand.shouldFilterAllDispatcherTypes(true)设置的指示,这是一个 FORWARD 类型,所以应该再次通过过滤器链。第二次通过过滤器会导致请求被拒绝(再次感谢hasAuthority("ROLE_ADMIN"))。

实际行为

用户访问/forward,请求通过过滤器链一次,并作为有效通过。转发被处理,但不是再次通过链传递,而是作为有效传递,并返回管理页面。

原文地址:https://github.com/SpindleSec/cve-2022-31692

点击阅读原文——跳转


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247495961&idx=1&sn=5101b74466d5cc4a6c26e94edc3afb59&chksm=9badb852acda3144e7b278b73b3aeacdac38a76bb561771e8e828f00664764a16b88cc4425a5#rd
如有侵权请联系:admin#unsafe.sh