본문 바로가기
IT/Tomcat

[Tomcat] AJP Protocol 보안 취약점 발생: Ghostcat(CVE-2020-1938)

by 마을22번지 2020. 6. 15.

Apache Tomcat에서 AJP 관련된 취약점이 발견되었습니다.

 

취약점이 발견된 버전

 

Apache Tomcat 9.0.31 미만 버전
Apache Tomcat 8.5.51 미만 버전
Apache Tomcat 7.0.100 미만 버전
Apache Tomcat 6.x 모든 버전

 

취약점 내용

익스플로잇에 성공한 경우 서버의 파일을 열람이 가능합니다. 그리고 취약점으로 특정 디렉터리에 임의의 파일을 원격으로 읽을 수 있습니다.

 

조치 내용 : 아래의 방법 중 하나 선택
  • [conf/server.xml] AJP Connector를 사용하지 않는다면 태그를 주석 처리 하거나 삭제 하시면됩니다.
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

 

  • [conf/server.xml] AJP Connector 속성 중에 특정 비밀키를 이용하여 통신 하도록 옵션 추가
<!-- Tomcat 7 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="0.0.0.0" secret="ajpSecretKey" secretRequired="true"/>

<!-- Tomcat 8 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="0.0.0.0" requiredSecret="ajpSecretKey"/>

<!-- Tomcat 9 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="0.0.0.0" secret="ajpSecretKey" secretRequired="true"/>

secret, secretRequired, requiredSecret 속성은 Tomcat 홈페이지에서 다시 한번 확인하시기 바랍니다.

 

  • Tomcat 버전 업데이트 : Tomcat 7 버전이 이상인 경우 업데이트 하시면 됩니다.

 

Tomcat 업데이트시 주의 사항

다른 Tomcat 버전은 모르겠지만, Tomcat 9.0.31로 업데이트 하는 경우 AJP Connector의 기본 옵션이 변경이 됩니다. 

"secretRequired" 속성 기본 값이 "true"로 변경되었습니다. 그래서 "secret" 속성 값을 반드시 입력하셔야 합니다.

"secret" 속성 값을 설정을 원치 않을 때는"secretRequired=false" 설정을 하셔야 합니다.

 

Tomcat & Apache 연동시 주의 사항
  • Apache 2.4.42 이상 버전을 사용하셔야 합니다. Apache 에도 secret을 설정이 들어가야 하는데 2.4.42 이상 버전에서 추가가 가능합니다. 그 이하의 버전이라면 Tomcat AJP 속성을 "secretRequired=false"로 하셔야 합니다.
  • Tomcat에는 secret이 설정이 되어 있지만 Apache에 설정이 안되어 있다면, HTTP 403 오류가 발생합니다.
  • Tomcat의 address 속성이 "0.0.0.0"(루프백)이 아니거나 서버 IP가 아니라면, HTTP 503 오류가 발생합니다.

 

댓글