CVE-2020-1938

2025. 11. 11. 10:47·CVE

1. Apache Tomacat 취약점


Apache Tomcat은 Web server 기능을 하는 Apache와

WAS(Web Application Server) 기능을 하는 Tomcat이 서로 합쳐진 합성어다.

Web server와 Web Container 및 WAS 구조

 

Apache는 정적 data를 처리하는 web server 역할을 하는 반면,

Tomcat은 web server 역할을 수행할 뿐만 아니라 동적 data를 처리하는

web container 기능도 같이 수행한다.

 

 

Web server WAS DB 통신구조

 

다만, 정적 data 처리 속도가 WAS에 비해 web server가 현저히 빠르므로

정적 data 처리 대신 동적 data 처리만을 Tomcat에서 수행한다.

 

 

WAS process 구성도

 

WAS process를 보면 web server와 WAS 사이에서 data 송수신을 위해

사용하는 protocol이 존재하는데이를 AJP(Apache Jserv Protocol) 라고 한다.

AJP는 여러 web server로부터 여러가지 application server로의

load balancing을 구현하기 위한 목적으로 사용한다.

이러한 구조에서 Ghostcat은 AJP를 통해서 WAS와 Web server간

송수신하는 data로 인하여 발생하는 취약점이다.

 

 

AJP는 TCP/8009 port를 사용하며 외부에 노출되지 않는 protocol이지만

AJP request가 Apache에서 Tomcat으로 전달될 때

사용자 입력값 검증없이 실행되어 임의로 file 읽기나 실행이 가능할 경우

혹은 file upload가 가능한 환경에서 임의의 file이 upload된다면

AJP 취약점을 이용하여 공격 code를 실행시킬 수 있는 구조다.

 

 

실제로 web에서 접근할 수 없는 영역을 공격 code를 삽입하여

AJP request를 전송하게 되면 이에 대한 응답 값을 통해

내부 정보를 탈취할 수 있게 된다.

 

[Ghostcat = AJP를 통해 전달되는 data 검증의 부재로 인한 취약점]

 

 

메타스플로잇 내 ghostcat 취약점 list 검색 가능

 

MSF로 metasploitable3에 tomcat 취약점이 존재하는지 확인하면

다음과 같이 공격 가능한 route를 반환한다.

해당 route로 URL 접속을 하면 다음과 같은 결과를 확인할 수 있다.

 

공격 대상 내 ghostcat 취약점이 실행될 수 있는 URL이 존재하는 것을 확인

 

 

에러를 통한 WAS 버전 확인 가능

 

 

wireshark 캡처 결과

 

MSF로 공격하는 과정을 wireshark로 AJP request packet을 확인할 수 있는데

MSF가 metasplotable3로 다음과 같이 field 값을 설정하여 전달한다.

이 세가지 attribute의 내용이 검증되지 않기 때문에

공격자가 이를 변경할 경우 변조된 경로의 file을 읽어올 수 있게 된다.

1. javax.servlet.include.request_uri: servlet으로 전송하는 request URI의 전체 attribute 값
2. javax.servlet.include.path_info: servlet의 mapping pattern에 추가적인 path 정보
3. javax.servlet.include.servlet_path: servlet이 request를 처리하는 URI의 한 부분을 대표한 값  

 

 

 

2. GhostCat 대응방안


1. Apache Tomcat 보안패치

Apach Tomcat의 version을 확인한 후,

Ghostcat 취약점에 노출된 version에서 upgrade를 하는 것을 권고한다.

 

 

2. AJP protocol 자격 증명 설정

AJP protocol을 사용해야 하는 경우, Apache Tomcat이 설치된 디렉토리 위치에

/conf/server.xml file의 AJP protocol 활성화 여부를 결정하는 값을 변경하도록 한다.

1. AJP protocol 활성화 여부를 결정하는 설정 값 변경
<Connector protocol= “AJP/1.3”
    address= “Tomcat server IP”
    port= “8009”
    redirectPort= “8080”
    requiredSecret=”[AJP 인증속성]” />
 
2. 저장 후 재시작

 

 

3. SNORT 적용

SNORT rule을 적용하여 packet에 어떠한 data field가 포함되어 들어왔는지 확인

즉, host가 packet을 처리하기 전에 앞단에서 탐지를 하는 방식이다.

다음 그림처럼 servlet으로 전달하는 data가 있는지 사전에 확인하여

이를 alert 하는 rule을 적용하도록 한다.

snort rule 설정

 

 

4. AJP connector 비활성화 하기

만약 AJP connector를 사용하지 않을 경우, server.xml file을 확인하면

AJP connector와 관련된 정보와 활성화 설정이 작성되어 있다.

여기서 AJP connector를 주석 처리하여 비활성화하는 것을 권고한다.

server.xml 수정결과

 

 

 

 

 

반응형
저작자표시 (새창열림)

'CVE' 카테고리의 다른 글

CVE 2024-23897  (0) 2024.06.29
'CVE' 카테고리의 다른 글
  • CVE 2024-23897
JNU
JNU
JNU의 보안공부
  • JNU
    JNU diary
    JNU
  • 전체
    오늘
    어제
  • 01-24 12:56
  • 인기 글

    • 분류 전체보기 (107)
      • 네트워크 보안 (16)
      • 시스템 보안 (18)
      • 웹 보안 (17)
      • Frida (5)
      • Android (3)
      • 정보보안기사_산업기사 (1)
      • iOS (5)
      • Network (7)
      • 악성코드 분석 (11)
      • 침투테스트 (5)
      • Bandit 원정대 (4)
      • 대학원 (3)
      • AWS Cloud (3)
      • CVE (2)
      • Python (0)
      • Dreamhack (1)
      • 취약점 진단 (5)
      • 레드라쿤 CTI (1)
  • hELLO· Designed By정상우.v4.10.5
JNU
CVE-2020-1938
상단으로

티스토리툴바