의미없는 블로그
[CVE-2024-56337][CVE-2024-50379] Apache Tomcat RCE / TOCTOU 본문
[CVE-2024-56337][CVE-2024-50379] Apache Tomcat RCE / TOCTOU
SaltLee 2024. 12. 30. 11:06https://www.boannews.com/media/view.asp?idx=135380&kind=1
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-56337
Apache MINA
네트워크 어플리케이션 프레임워크
Apache Traffic Control
CDN 구축하고 관리하는 솔루션
Apache Tomcat 취약 버전은
11.0.0-M1 ~ 11.0.1 (11.0.2 이상 양호)
10.1.0-M1 ~ 10.1.33 (10.1.34 이상 양호)
9.0.0.M1 ~ 9.0.97 (9.0.98 이상 양호)
추가로 아래 설정도 해줘야 한다는데
- running on Java 8 or Java 11 the system property sun.io.useCanonCaches must be explicitly set to false (it defaults to true) - running on Java 17 the system property sun.io.useCanonCaches, if set, must be set to false (it defaults to false) - running on Java 21 onwards no further configuration is required (the system property and the problematic cache have been removed) |
리눅스는 catalina.sh 또는 setenv.sh 에 아래 라인이 있다면 값이 설정된 것
JAVA_OPTS="$JAVA_OPTS -Dsun.io.useCanonCaches=false" 톰캣 재시작 |
윈도우는 setenv.bat 확인
set JAVA_OPTS=%JAVA_OPTS% -Dsun.io.useCanonCaches=false 톰캣 재시작 |
원래 CVE-2024-50379 가
Apache Tomcat Time-of-check Time-of-use (TOCTOU) Race Condition vulnerability 였는데
TOCTOU 가 뭐냐면
시스템이 리소스를 확인하는 시점과 (Time of check)
사용하는 시점 사이에 (Time of use)
상태가 변경되는 취약점 (Race Condition)
/path/to/file 파일을 확인했는데
사용할때 /path/to/attack 으로 바꿔서
공격자가 의도한 파일을 사용하는것
얘가 RCE 랑 뭔 상관이냐면
일반적인 어플리케이션 파일을 확인한 뒤
공격자가 의도한 악성 실행 파일(RCE 스크립트)로 교체해서
RCE 같은거 실행 시킨다는 것
그래서 sun.io.useCanonCaches=false 로 설정해주면
Java 가 파일 경로를 가져올때 캐시를 사용하지 않는다
매번 표준화된 경로에서 가져오기 때문에
경로 변경을 즉시 감지할 수 있다
무튼 CVE-2024-50379 도출되었을 때
톰캣 버전 업데이트만 가이드로 제시됐었는데
그걸로 충분하지 않으니 CVE-2024-56337 에서
저렇게 Java 에 추가 설정하라는 것
참고: CVE-2024-56337 https://github.com/advisories/GHSA-27hp-xhwr-wr2m
참고: CVE-2024-50379 https://github.com/advisories/GHSA-5j33-cvvr-w245
PoC: https://github.com/iSee857/CVE-2024-50379-PoC
[CVE-2024-50379] 조건은 아래 모두 해당 1) 취약한 버전 11.0.0-M1 ~ 11.0.1 10.1.0-M1 ~ 10.1.33 9.0.0.M1 ~ 9.0.97 2) 서블릿 쓰기 활성화 readonly = false 이고, PUT 메서드 허용된 경우 3) 대소문자 구분하지 않는 파일 시스템 4) JAVA sun.io.useCanonCaches = true |
2) 서블릿 쓰기 활성화 readonly = false, PUT 메서드 허용된 경우
서블릿 설정에서 쓰기를 활성화 한다는 것은
웹 어플리케이션이 파일 시스템 등에 데이터를 작성할 수 있게 허용한다는 것
ex) 서블릿이 파일 업로드 기능을 처리하는 경우 어플리케이션이 특정 디렉터리에 쓰기 권한 필요함
web.xml, context.xml, server.xml
어디서 설정하냐의 차이는 있는것 같은데
무튼 readonly = false 로 설정되어 있는 경우 '쓰기 활성화' 라서 취약
3) 대소문자 구분하지 않는 파일 시스템
일반적으로 Linux 계열은 대소문자를 구분함
> ext2/ext3/ext4: File.txt 와 file.txt 를 서로 다른 파일로 취급
Windows 계열은 대소문자 구분 안함
> NTFS/FAT32/exFAT: File.txt 와 file.txt 를 동일한 파일로 취급
4) sun.io.useCanonCaches = true 일 때 취약
> Java21 이상은 해당 없음
톰캣은 ../etc/passwd 이렇게 입력 경로 들어오면
/etc/passwd 로 표준화된 경로를 만든다
이걸 톰캣의 경로 검증 메커니즘이라고 하는데
경로 검증 메커니즘의 취약점으로
1) TOCTOU
경로 검증 후, 실제 파일 작업 사이에 파일이 변경될 수 있다
2) 대소문자 구분
File.jsp 와 file.jsp 가 같은 파일로 간주되어 검증 메커니즘을 우회할 수 있다
3) URL 인코딩
/app/%2e%2e/etc/passwd 가 /etc/passwd 로 해석된다
'# 나 > exploit CVE' 카테고리의 다른 글
[CVE-2024-31497] putty ssh 키 인증 취약점 (ecdsa-sha2-nistp521) (1) | 2024.04.18 |
---|---|
CVE-2021-28474 (Microsoft SharePoint Server RCE) (0) | 2023.06.27 |
Apache CVEs (0) | 2023.02.28 |
[CVE-2022-22963] Spring Cloud Function RCE (0) | 2023.02.27 |
[CVE-2022-22965] Spring Core RCE (Spring4Shell) (0) | 2023.02.27 |