CVE-2024-38819

경로 및 정보 2025. 9. 8. 15:11


01. File-Traversal와 Webflux 개요

  • 1) File-Traversal과 WebFlux 개요

    File-Traversal(경로 탐색, Path Traversal) 취약점은 공격자가 웹 애플리케이션에서 파일 시스템의 권한을 우회하여 임의의 파일에 접근할 수 있도록 하는 취약점 이며 CWE-22로 지정 되어있는 공격의 일종 입니다.CVE-2024-38819은 WebFlux.fn, WebMVC.fn를 사용하는 애플리케이션에서 발생하며 본 문서는 해당 취약점이 WebFlux기준으로 어떻게 발생하는지 코드 흐름을 살펴보고 이에 따른 대응 방안을 모색 해보고자 합니다.
  • Spring WebFlux는 Spring 5에서 도입된 리액티브 프로그래밍을 지원하는 모듈로, 비동기 논블로킹 애플리케이션 개발을 지원하며 WebFlux.fn은 함수형 엔드포인트 라우팅을 제공하여, 람다 표현식을 사용한 간결하고 유연한 라우팅 구성을 지원합니다.

02. Webflux 6.13환경의 File-Traversal 취약점 분석

  • 2.1 Webflux 6.13을 이용한 File-Traversal 분석

    Spring Webflux 6.13 에서 **정적 리소스(static resource)**를 서빙(Serving)하는 예제를 통해 File-Traversal 공격을 할수 있다.
    예제를 살펴 보며 Spring Webflux를 이용해 어떻게 File-Traversal 유발 되는지 알아보고자 한다.

1) Spring Webflux 6.13 활용한 File-Traversal 공격 흐름

[그림 1] FileApplication.java

[그림 1]은 Spring WebFlux에서 /static/**로 들어오는 모든 요청을 서버의 C:/file 디렉터리에서 찾아 서빙(Serving) 합니다. 여기서
RouterFunctions.resources 호출 중에 [그림 2], [그림 3] webflux 의 PathResourceLookupFunction.class 에서 의 문제가 시작됩니다.

[그림 2] PathResourceLookupFunction.class - apply

[그림 2] PathResourceLookupFunction - apply은 Spring WebFlux에서 주어진 경로가 유효한 리소스를 가리키는지 확인하고, 해당 리소스를
Mono 형태로 반환하는 역할을 합니다. 이 과정에서 경로 매칭, 유효성 검사, 경로 디코딩, 리소스 접근 등의 여러 단계를 수행 중 isInvalidPath
함수 에서 취약점이 발생합니다.

[그림 3] PathResourceLookupFunction.class - isInvalidPath

[그림 3] PathResourceLookupFunction - isInvalidPath를 보면 StringUtils.cleanPath(path).contains("../") 해당 조건이 존재 하는데
http://localhost:8080/static/file/../Windows/System32/drivers/etc/hosts 요청 시 해당 조건은 True가 될 수 없습니다. 이유로

[그림 4] StringUtils.class - cleanPath

[그림 4] StringUtils.class - cleanPath 보면 StringUtils.cleanPath(path)는 TOP_PATH("..")를 제거 후 경로를 pathElements에 넣고 top은 0이 됨으로
".."가 1번 들어간 공격 구문은 정상 구문으로 처리 됩니다. 그러하여 [그림 3]의 isInvalidPath의 함수는 false를 리턴하고

[그림 5] PathResourceLookupFunction.class - apply - 2

[그림 6] PathResourceLookupFunction.class - isResourceUnderLocation

[그림 5] 의 isResourceUnderLocation의 cleanPath 호출로 [그림 6]을 통해 cleanPath를 통한 또 한번의 검증을 거치게 되며 [그림 5]에서 넘긴 경로는 C:/file../Windows/System32/drivers/etc/hosts 이며

[그림 7] StringUtils.class - cleanPath -2

[그림 7] 의 코드를 통해 prefix는 C:/ 가 되며 경로는 [그림 4]를 통해/ Windows/System32/drivers/etc/hosts로 변경 되어 최종 리턴은
C:/Windows/System32/drivers/etc/hosts로 처리 되는 흐름 입니다.

2) Spring Webflux 6.13 활용한 File-Traversal 공격 예시

현재는 윈도우에서 C:/file로 테스트를 진행하였지만 해당 케이스가 리눅스 에 심볼릭 링크와 함께 동작 시 매우 위험하다.
(../../ 두번 설정 시 정상 로직 ../ 한번 일 경우만 취약점 발생) 

2-1) Spring Webflux 6.13 활용한 File-Traversal 공격 예시2

리눅스 서버에 심볼릭 링크와 함께 공격

 public RouterFunction<ServerResponse> staticResourceRouter() {
     return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
 }
 

심볼릭 링크 추가 ln -s /static /app/static/link 후 공격 

03. 대응 방안

지금까지 Spring Webflux환경에서 File Traversal(CVE-2024-38819)이 수행되는 흐름을 체크 해봤습니다. 서버의 정보가 탈취 당하는 공격 방식이기에 대응 방안이 중요합니다. 이를 위해 최신 버전 업데이트, 추가 검수 로직 제작, IPS를 통한 차단 방안을 제시 하고자 합니다.

  • Spring Framework 업데이트

    아래 표를 참고 하고 사용 버전을 체크 후 업그레이드 해주시기 바랍니다.
  • 추가 검수 로직 제작 예시

    위 공격 예시를 보다시피 TOP_PATH(..)가 한번 포함 된 케이스가 문제 됨으로 간략한 필터 적용 로직(참고 후 개발자 분들이 더 추가)
    @Bean
    public RouterFunction<ServerResponse> staticResourceRouter() {    
      return RouterFunctions.resources("/static/**", new FileSystemResource("C:/file"))
              .filter((request, next) -> {
                  String path = request.path();
                  if (path.contains("..")) {
                     if(!StringUtils.cleanPath(path).contains("../")) {
                         return ServerResponse.status(HttpStatus.FORBIDDEN).bodyValue("Vuln path access.");
                     }        
                  }
                  return next.handle(request);
              });
    }
    
     
  • IPS 를 통한 차단

    공격 예시 : 포스트 맨을 통해 url에 ../ 경로를 포함 하여 요청

../ 상위 경로의 이동을 유발하는 url 요청을 전부 차단

 

 

04. 결론

지금까지 Webflux를 통한 File Tarversal을 알아 봤습니다. 해당 취약점은 StringUtils.cleanPath()의 로직에서 비롯된 문제를 인지 못하고 사용한 경우 였습니다.

05. 참고자료

(POC) https://github.com/masa42/CVE-2024-38819-POC
(스프링 공식) https://spring.io/security/cve-2024-38819
(CVE-DETAIL) https://www.cvedetails.com/cve/CVE-2024-38819/
(NIST) https://nvd.nist.gov/vuln/detail/cve-2024-38819

블로그 이미지

wtdsoul

,