1. Apache Commons Fileupload [1]

- 파일 업로드 기능을 서블릿 및 웹 애플리케이션에 추가하기위한 패키지

 

2. 취약점 [2]

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2023-24998

- 취약한 버전의 Apache Commons FileUpload에서 requestpart에 대해 제한을 두지 않아 발생하는 서비스 거부 취약점

제품명 영향받는 버전
Apache Commons FileUpload 1.0-beta-1 ~ 1.4
Apache Tomcat 11.0.0-M1
10.1.0-M1~ 10.1.4
9.0.0-M1~ 9.0.70
8.5.0~ 8.5.84

 

2.1 분석

- 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술 [3][4]

- Annotation의 용도는 다음과 같음

컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공

② 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공

실행시(런타임시)특정 기능을 실행하도록 정보를 제공

 

- 취약점에 악용된 RequestPart 또한 Annotation으로 "multipart/form-data" 요청의 일부를 메서드 인수와 연결하는 데 사용하는 어노테이션임

[사진 2] @RequestPart Annotation

 

- FileUploadBase.java의 내용을 확인해보면 처리할 요청 부분의 수를 제한하지 않는 것으로 판단됨. [5]

- 따라서 공격자는 악의적인 업로드 또는 일련의 업로드로 DoS를 트리거할 수 있음

[사진 3] src/main/java/org/apache/commons/fileupload/FileUploadBase.java

3. 대응방안

① 벤더사에서 제공하는 최신 업데이트 적용 [8][6][7]

제품명 영향받는 버전 패치 버전
Apache Commons FileUpload 1.0-beta-1 ~ 1.4 1.5
Apache Tomcat 11.0.0-M1 11.0.0-M3
10.1.0-M1~ 10.1.4 10.1.5
9.0.0-M1~ 9.0.70 9.0.71
8.5.0~ 8.5.84 8.5.85

 

- 업데이트를 확인해보면 fileCountMax 변수를 이용해 파일 업로드 횟수에대한 제한을 적용한 것으로 판단됨.

 

Update packaged renamed fork of Commons File Upload · apache/tomcat@8a2285f

Show file tree Showing 8 changed files with 116 additions and 14 deletions.

github.com

 

Add a new limit for the number of files uploaded per request (#185) · apache/commons-fileupload@e20c049

Back port

github.com

 

4. 참고

[1] https://commons.apache.org/proper/commons-fileupload/index.html
[2] https://nvd.nist.gov/vuln/detail/CVE-2023-24998
[3] https://velog.io/@gillog/Spring-Annotation-%EC%A0%95%EB%A6%AC
[4] https://velog.io/@hwan2da/Spring-RequestBody-vs-RequestParam-vs-RequestPart-vs-ModelAttribute
[5] https://archive.apache.org/dist/commons/fileupload/source/
[6] https://archive.apache.org/dist/tomcat/
[7] https://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
[8] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71001&menuNo=205020
[9] https://blog.alyac.co.kr/5086

1. Tomcat

- 아파치 소프트웨어 재단에서 개발한 웹 애플리케이션 서버

- 자바 환경을 제공하여 자바서버 페이지와 자바 서블릿이 실행할 수 있는 환경을 제공

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2014-0099

- Content-Length 헤더를 조작하여 정수 오버플로를 유발 및 서비스 거부를 유발시키는 취약점

① 영향받는 버전
- Apache Tomcat 6.0.40 이전 버전
- Apache Tomcat 7.0.53 이전 7.x 버전
- Apache Tomcat 8.0.4 이전 8.x 버전

 

2.1 분석

- 해당 취약점은 java/org/apache/tomcat/util/buf/Ascii.java 패키지에서 발생함

- org.apache.tomcat.util.buf 패키지는 인코딩과 디코딩을 처리하는 util 패키지
- Ascii.java는 이름대로 Ascii 처리와 관련된 함수를 제공

 

- Ascii.java에서 정수의 취급(isDigit 함수) 문제에 의해 발생한 것으로 판단됨.

[사진 2] java/org/apache/tomcat/util/buf/Ascii.java 中 발췌

 

- 공격자는 CVE-2015-1635에서 처럼 Conten-Legth 값을 BoF를 유발할 만큼의 큰 값으로 조작

[사진 3] CVE-2015-1635 공격 패킷

3. 대응방안

3.1 서버측면

① 취약점이 패치된 버전으로 업데이트 적용

- 취약점이 패치된 버전의 코드를 확인해보면, isDigit() 외에도 BoF 검증을 위한 코드가 추가된 것으로 판단됨.

[사진 4] 취약점 패치 전, 후 코드 비교

3.2 네트워크 측면

① 공격 탐지가 가능한 정책 설정 및 적용 

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"INDICATOR-COMPROMISE http POST request smuggling attempt"; flow:to_server,established; content:"POST /"; fast_pattern:only; http_header; content:" HTTP/"; http_header; metadata:service http; reference:cve,2014-0099; classtype:misc-attack; sid:31213; rev:1;)

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"INDICATOR-COMPROMISE http GET request smuggling attempt"; flow:to_server,established; content:"GET /"; fast_pattern:only; http_header; content:" HTTP/"; http_header; metadata:service http; reference:cve,2014-0099; classtype:misc-attack; sid:31212; rev:1;)

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2014-0099
https://tomcat.apache.org/security-6.html
https://tomcat.apache.org/security-7.html
https://tomcat.apache.org/security-8.html
- http://svn.apache.org/viewvc?view=revision&revision=1578814
- http://svn.apache.org/viewvc?view=revision&revision=1578812
- http://svn.apache.org/viewvc?view=revision&revision=1580473
https://github.com/CRaC/tomcat/commit/8828a9902df1a98a0334511578a1dec9412a8234

+ Recent posts