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