CVE-2022-22978-demo
CVE-2022-22978 취약점 예제 코드
이용 조건
고위험으로 분류되지만 이용 조건은 비교적 까다롭고, 개인적으로 이 취약점은 다소 쓸모없다고 생각합니다.
- 우선 당연히 spring-security가 취약점 영향 범위 내에 있어야 합니다.
- 다음으로 spring-security의 정규식 매처 regexMatchers를 사용하거나 RegexRequestMatcher를 직접 사용해야 하며,
. 로 경로를 매칭해야 합니다. 대략 다음과 같습니다:
- regexMatcher("/api/.*") // /api 하의 모든 하위 경로 허용
- regexMatcher("/files/.*\.jpg") // .jpg로 끝나는 모든 파일 요청 매칭
- regexMatcher("/user/.*/profile") // /user 하의 임의 사용자 이름의 profile 경로 허용
- 실제로 이런 경우는 드뭅니다. 예를 들어 regexMatcher("/api/.*")와 같은 경로가 있다면, /api 하의 모든 경로 요청을 처리할 @RequestMapping("/api/*")과 유사한 어노테이션이 있는 컨트롤러가 추가로 필요합니다. 그렇지 않으면
%0a%0d로 spring-security의 경로 매칭 규칙을 우회하더라도 404 오류가 발생합니다.
이용 시연
일반적으로 모든 경로에 접근하면 spring-security가 제공하는 기본 로그인 페이지로 리다이렉트됩니다.

접속: http://127.0.0.1:8080/admin/admin%0a, 로그인 우회 성공

접속: http://127.0.0.1:8080/hello%0a
모든 경로에 로그인이 필요한 보안 검사를 우회했지만, @RequestMapping("/hello/*") 어노테이션이 있는 컨트롤러가 없어 매핑에 실패하고 404 오류가 발생합니다.
