의미없는 블로그

[CVE-2024-56337][CVE-2024-50379] Apache Tomcat RCE / TOCTOU 본문

# 나/exploit CVE

[CVE-2024-56337][CVE-2024-50379] Apache Tomcat RCE / TOCTOU

SaltLee 2024. 12. 30. 11:06

https://www.boannews.com/media/view.asp?idx=135380&kind=1

 

[긴급] 아파치 제품 3종에서 위험도 10점 만점 등 초고위험도 취약점 3개 발견

아파치 소프트웨어 재단은 자사 제품에서 발생하는 취약점을 해결한 보안 업데이트를 발표했다. 아파치 제품 3종에서 발견된 취약점은 위험도가 10점 만점에 달하는 초고위험도 취약점을 포함

www.boannews.com

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-56337

 

CVE - CVE-2024-56337

Time-of-check Time-of-use (TOCTOU) Race Condition vulnerability in Apache Tomcat. This issue affects Apache Tomcat: from 11.0.0-M1 through 11.0.1, from 10.1.0-M1 through 10.1.33, from 9.0.0.M1 through 9.0.97. The mitigation for CVE-2024-50379 was incomplet

cve.mitre.org

 

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 로 해석된다

Comments