본문 바로가기
Hack/Web

[CVE-2023-20860] Spring Framework Improper Access Control

by Becoming a Hacker 2023. 3. 26.
반응형

Spring Framework WebMVC는 Web Application을 개발하는데 사용되는 MVC(Model-View-Controller) 제공하는 Package 입니다.

 

해당 Package에서 경로 기반 인증 로직을 우회할 수 있는 취약점이 발견되었으며,해당 취약점은 CVE-2023-20860이라는 번호를 부여받았습니다.

 

취약점 상세 내용

Spring Security 설정에서 mvcRequestMatcher를 사용하여 경로 기반의 접근 제어를 수행할 수 있습니다.

 

아래의 예제 코드를 보면, mvcMatchers 메서드를 이용하여 admin/** 경로에 대한 접근 제어를 추가하고 있습니다.그런데 Spring Security와 Spring MVC에서 **를 해석하는 과정이 달라 경로를 기반으로한 접근 제어를 우회할 수 있습니다.

(정확한 내용은 아님)

더보기

Java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Autowired
    private CustomUserDetailsService userDetailsService;
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                // Vunlerabilty Point
                .mvcMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/")
                .permitAll()
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/")
                .permitAll();
    }
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }
}

 

Kotlin

@Configuration
@EnableWebSecurity
class SecurityConfig(private val userDetailsService: CustomUserDetailsService) : WebSecurityConfigurerAdapter() {

    @Throws(Exception::class)
    override fun configure(http: HttpSecurity) {
        http
            .authorizeRequests()
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                // Vunlerability Point
                .mvcMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/")
                .permitAll()
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/")
                .permitAll()
    }

    @Throws(Exception::class)
    override fun configure(auth: AuthenticationManagerBuilder) {
        auth.userDetailsService(userDetailsService)
    }

 

취약점 영향 받는 버전

구분 취약 버전 패치 버전
6.x.x 6.0.0 ~ 6.0.6 6.0.7 <=
5.3.x 5.3.0 ~ 5.3.25 <= 5.3.26 <=

※ 5.3 보다 이전 버전은 영향을 받지 않음

 

 

취약점 탐지 및 조치 방법

  • Spring Framework의 버전 정보가 영향을 받는 버전인지 확인
  • 만약 사용하고 있을 경우, 취약한 버전을 사용하고 있을 경우 mvcMatchers 메서드를 사용하고 있는 지 확인
  • 만약 사용하고 있을 경우, mvcMatchers 대신 antMatchers 사용 또는 Spring Framework를 패치 버전으로 업데이트

 

참조 문서

 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io

 

Snyk Vulnerability Database | Snyk

The most comprehensive, accurate, and timely database for open source vulnerabilities.

security.snyk.io

 

Polishing and minor refactoring in HandlerMappingIntrospector · spring-projects/spring-framework@202fa5c

Closes gh-30127

github.com

 

반응형

댓글