본문 바로가기

Technical Docs/Web Application

CVE-2022-22978 Authorization Bypass in RegexRequestMatcher

해당 취약점은 스프링에서 발생하는 취약점이다.

대충 어떤 취약점이냐면 Authorization Bypass in RegexRequestMatcher 인데, 대충 해석해보면 RegexRequestMatcher 에서

어떤 특별한  페이로드 삽입을 통해 Authorization를 우회한다는 내용인것같다.

 

좀 더 자세히 살펴보자.

머 CVSS 점수가 몇 점이고 뭐 그런거는 구글에  CVE 번호만 검색해도 수두룩하게 나온다.
https://nvd.nist.gov/vuln/detail/CVE-2022-22978

 

NVD - CVE-2022-22978

References to Advisories, Solutions, and Tools By selecting these links, you will be leaving NIST webspace. We have provided these links to other web sites because they may have information that would be of interest to you. No inferences should be drawn on

nvd.nist.gov

 

우리는 해당 취약점의 실제 공격 Payload 가 어떻게 되는지 보자.

취약점은 Spring Security 5.5.6 ~ 5.5.7 / older unsupported versions 에서 영향을 받는다고 한다.

 

우선 해당 버전을 가지고 있는 Spring을 설치하고 아래와 같이 Spring Security 세팅을 해준다

/vulnerable/.* 에 매칭되는건 인가받은 사용자만 가능

그리고 /vulnerable/.* 에 대해 접속하면 위의 세팅을 통해 인가받은 사용자인지 확인 후 아래의 라우팅 경로로 보낼 것이다.

실제로 해당 앱을 실핼 후 /vulneravle/Test 에 접속 시 아래와 같은 에러 화면을 볼 수 있다.

에러발생

 

이제 여기서 오늘의 Payload가 등장한다. 바로 권한이 필요한 페이지 앞에%0a를 삽입하는 것이다. (매우간단);;

%0a 는 개행문자의 URL 인코딩 형태이다. 블로그에 따르면 %0d 도 가능하다고한다.

이런 우회가 가능한 이유는 RegexRequestMatcher 에서 사용하는 Pattern Class 에서 줄바꿈 문자에 대한 처리가 덜 되어서 그런거 같은데;;;  좀 더 자세한건 아래 블로그에서 확인이 가능하지만 중국어라서 읽는게 더어렵다;;

https://nosec.org/home/detail/5006.html#&gid=1&pid=1