POC详情: 8e372c08f2643cd61d231950b3209e030611c306

来源
关联漏洞
标题: VMware Spring Framework 安全漏洞 (CVE-2024-38819)
描述:VMware Spring Framework是美国威睿(VMware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。 VMware Spring Framework存在安全漏洞。攻击者利用该漏洞可以读取服务根路径之外的文件。
介绍
# CVE-2024-38819
## 01. File-Traversal와 Webflux 개요
- ### 1) File-Traversal과 WebFlux 개요
  File-Traversal(경로 탐색, Path Traversal) 취약점은 공격자가 웹 애플리케이션에서 파일 시스템의 권한을 우회하여 임의의 파일에 접근할 수 있도록 하는 취약점 이며 CWE-22로
  지정 되어있는 공격의 일종 입니다.
  
  Spring WebFlux는 Spring 5에서 도입된 리액티브 프로그래밍을 지원하는 모듈로, 비동기 논블로킹 애플리케이션 개발을 지원하며 WebFlux.fn은 함수형 엔드포인트 라우팅을 제공하여, 람다 표현식을 사용한 간결하고 유연한 라우팅 구성을 지원합니다.
  
  CVE-2024-38819은 WebFlux.fn, WebMVC.fn를 사용하는 애플리케이션에서 발생하며 본 문서는 해당 취약점이 WebFlux기준으로 어떻게 발생하는지 코드 흐름을 살펴보고 이에 따른 대응 방안을 모색 해보고자 합니다.
## 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 공격 흐름
  <p align="center"> <img src="https://github.com/user-attachments/assets/0f2a9a82-3f50-4fc4-a8d1-fef2a476b7cf" alt="이미지 설명"> </p>
  <p align="center">[그림 1] FileApplication.java </p>  
  [그림 1]은 Spring WebFlux에서 /static/**로 들어오는 모든 요청을 서버의 C:/file 디렉터리에서 찾아 서빙(Serving) 합니다. 여기서 <br>
  RouterFunctions.resources 호출 중에 [그림 2], [그림 3] webflux 의 PathResourceLookupFunction.class 에서 의 문제가 시작됩니다. <br>
  <p align="center"> <img src="https://github.com/user-attachments/assets/b3352f54-e8e0-4e6c-bf46-3854a832f4d3" alt="이미지 설명"> </p> 
  <p align="center">[그림 2] PathResourceLookupFunction.class - apply</p>  
  [그림 2] PathResourceLookupFunction - apply은 Spring WebFlux에서 주어진 경로가 유효한 리소스를 가리키는지 확인하고, 해당 리소스를 <br>
  Mono<Resource> 형태로 반환하는 역할을 합니다. 이 과정에서 경로 매칭, 유효성 검사, 경로 디코딩, 리소스 접근 등의 여러 단계를 수행 중 isInvalidPath<br>
  함수 에서 취약점이 발생합니다. <br>
  <p align="center"> <img src="https://github.com/user-attachments/assets/ec12e0ac-2fa3-4a44-9e45-02a0174839bd" alt="이미지 설명">
  <p align="center">[그림 3] PathResourceLookupFunction.class - isInvalidPath</p>  
  [그림 3] PathResourceLookupFunction - isInvalidPath를 보면 StringUtils.cleanPath(path).contains("../") 해당 조건이 존재 하는데 <br>
  http://localhost:8080/static/file/../Windows/System32/drivers/etc/hosts 요청 시 해당 조건은 True가 될 수 없습니다. 이유로
  <p align="center"> <img src="https://github.com/user-attachments/assets/79ccd639-32f5-491c-879c-6da52d583cfb" alt="이미지 설명">
  <p align="center"> <img src="https://github.com/user-attachments/assets/c18814d1-6191-4ceb-8218-3b9334d0a5d4" alt="이미지 설명">
  <p align="center">[그림 4] StringUtils.class - cleanPath</p>
  [그림 4] StringUtils.class - cleanPath 보면 StringUtils.cleanPath(path)는 TOP_PATH("..")를 제거 후 경로를 pathElements에 넣고 top은 0이 됨으로<br>
  ".."가 1번 들어간 공격 구문은 정상 구문으로 처리 됩니다. 그러하여 [그림 3]의 isInvalidPath의 함수는 false를 리턴하고
  <p align="center"> <img src="https://github.com/user-attachments/assets/c1a3fcbd-e93d-4d82-a709-df425affed20" alt="이미지 설명"> </p>
  <p align="center">[그림 5] PathResourceLookupFunction.class - apply - 2</p>
  <p align="center"> <img src="https://github.com/user-attachments/assets/a022c987-365d-48d8-8e8e-a7291217dddc" alt="이미지 설명"> </p>
  <p align="center">[그림 6] PathResourceLookupFunction.class - isResourceUnderLocation </p>
  [그림 5] 의 isResourceUnderLocation의 cleanPath 호출로 [그림 6]을 통해 cleanPath를 통한 또 한번의 검증을 거치게 되며 [그림 5]에서 넘긴 경로는 C:/file../Windows/System32/drivers/etc/hosts 이며
  <p align="center"> <img src="https://github.com/user-attachments/assets/3c3940ad-e84d-4814-bbdd-7f42bbc56a68" alt="이미지 설명"> </p>
  <p align="center">[그림 7] StringUtils.class - cleanPath -2 </p>
  [그림 7] 의 코드를 통해 prefix는 C:/ 가 되며 경로는 [그림 4]를 통해/ Windows/System32/drivers/etc/hosts로 변경 되어 최종 리턴은 <br>
  C:/Windows/System32/drivers/etc/hosts로 처리 되는 흐름 입니다.
     
 #### 2) Spring Webflux 6.13 활용한 File-Traversal 공격 예시
 현재는 윈도우에서 C:/file로 테스트를 진행하였지만 해당 케이스가 리눅스 에 심볼릭 링크와 함께 동작 시 매우 위험하다.  
 (../../ 두번 설정 시 정상 로직 ../ 한번 일 경우만 취약점 발생)
 ![20250207_150316](https://github.com/user-attachments/assets/9eac8ac8-1c82-4893-857b-54cc9f84425e)
 #### 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 후 공격
 ![20250208_101836](https://github.com/user-attachments/assets/f82eb1e0-f622-4f8a-8656-d381e129213d)
## 03. 대응 방안
지금까지 Spring Webflux환경에서 File Traversal(CVE-2024-38819)이 수행되는 흐름을 체크 해봤습니다. 서버의 정보가 탈취 당하는 공격 방식이기에 
대응 방안이 중요합니다. 이를 위해 최신 버전 업데이트, 추가 검수 로직 제작, IPS를 통한 차단 방안을 제시 하고자 합니다.

- ### Spring Framework 업데이트 
  아래 표를 참고 하고 사용 버전을 체크 후 업그레이드 해주시기 바랍니다.
  <p align="center"> <img src="https://github.com/user-attachments/assets/c19906c0-22f0-44b3-aa16-9aa41dd6e4b5" alt="이미지 설명"> </p>
- ### 추가 검수 로직 제작 예시
   위 공격 예시를 보다시피 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에 ../ 경로를 포함 하여 요청  
  방어 구문 : alert http any any -> any any (msg:"[ALERT] Directory Traversal Detected"; pcre:"/(\.\.\/)/"; sid:200001; rev:1;)  
  ../ 상위 경로의 이동을 유발하는 url 요청을 전부 차단  
  ![20250210_150316](https://github.com/user-attachments/assets/09b1021a-3013-4e47-9698-d80f94bedfd2)
  
## 04. 결론
지금까지 Webflux를 통한 File Tarversal을 알아 봤습니다. 해당 취약점은 간략한 로직 에서 문제가 되는 부분이였습니다.
## 05. 참고자료
(POC)
https://github.com/masa42/CVE-2024-38819-POC  
(문서 유형)
https://www.igloo.co.kr/security-information/thymeleaf-%ED%99%98%EA%B2%BD%EC%9D%98-ssti-%EA%B3%B5%EA%B2%A9%EC%82%AC%EB%A1%80-%EB%B0%8F-%EB%8C%80%EC%9D%91-%EB%B0%A9%EC%95%88-template-fragment%EC%99%80-cve-2023-38286%EA%B8%B0%EB%B0%98%EC%9D%98-ss/  
(스프링 공식)
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
文件快照

[4.0K] /data/pocs/8e372c08f2643cd61d231950b3209e030611c306 └── [8.2K] README.md 0 directories, 1 file
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。