해당 내용은 Ghostcat(CVE-2020-1938) 취약점 패치에 의한 영향인것으로 보입니다.
Tomcat Ghostcat(CVE-2020-1938) 취약점 : https://nirsa.tistory.com/150
-
구성 환경
- OS : CentOS 7.7 1908
- APP : apache-2.4.6 / tomcat-9.0.31 or 8.5.51 or 7.0.100 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / mod_jk tomcat-connectors-1.2.46
- 구성 내용 : apache 서버, tomcat 서버 물리적 분리 후 mod_jk 연동 (SSL 연동 X)
-
발생 원인
아래에 작성된 내용들은 apache 설정 및 selinux, F/W 등에 문제가 없을 경우에 해당 합니다.
2020년 02월 11일 톰캣에서 8.5.51 버전과 9.0.31 버전을 릴리즈하며 tomcat-apache 연동 설정을 기존대로 구성 시 연동 실패(무한로딩, 403에러 발생)가 발생 하며 AJP 기본값이 루프백 주소를 수신하도록 변경되어 수정해주지 않을 시 503 에러가 발생 합니다.
apache-tomcat 연동 시 변경된 주요 내용은 아래와 같습니다.
- AJP Connector 기본 값 비활성화
- AJP Connector 속성 address 추가 (기본값:루프백)
- AJP Connector 속성 secretRequired 추가 (requiredSecret 에서 변경된걸로 보입니다)
- AJP Connector 속성 allowedRequestAttributesPrattern 추가
-
관련 자료
tomcat의 공식 커뮤니티 사이트 문서이며 원본 확인은 tomcat 공식 커뮤니티 사이트(https://tomcat.apache.org/index.html) 에서 확인 해주세요.
8.5.51 버전과 9.0.31 버전의 릴리즈 내용은 같으므로 8.5.51만 스크린샷 첨부 하겠으며, 속성에 대한 설명은 아래 링크를 참고 해주세요.
apache 8.5.51 : https://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html
apache 9.0.31 : https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html
-
1) 무한 로딩 해결 방법
이번에 릴리즈되면서 기본값으로 SSL을 사용하도록 설정되어있기 때문에 SSL을 사용하지 않는 환경에서는 무한 로딩이 발생 합니다.
${catalina-home}/conf/server.xml 파일의 AJP Connector 필드에 secretRequired="false" 를 입력 해주세요.
-
2) 403 에러 해결 방법
secretRequired="false" 가 아닌 requiredSecret="false"를 입력했을 경우 발생할 수 있습니다. 2020년 02월 11일에 릴리즈된 8.5.51 버전과 9.0.31 버전은 secretRequired 속성으로 사용하여야 합니다.
-
3) 503 에러 해결 방법
이번에 릴리즈되며 AJP가 기본값으로 루프백 주소를 사용하도록 되었습니다. address="0.0.0.0" 와 같이 네트워크 대역을 확인 후 추가 해주어야 합니다.
-
최종 설정
저는 위의 1~3번을 모두 설정하여 최종적으로 무한 로딩, 403과 503 에러를 해결하고 정상적인 서비스를 확인할 수 있었습니다.
# 최종 설정 내용
<Connector protocol="AJP/1.3"
address="0.0.0.0"
secretRequired="false"
port="8009"
redirectPort="8443" />