( 1 ) 취약점 정보
Apache mod_jk Connector 1.2.0 ~ 1.2.44 에서 취약하며 Apache HTTPd 와 Tomcat 간의 경로 결정 중 세미콜론 문자열을 처리하는 과정에서 불일치로 인해 접근 제어를 우회할 수 있는 취약점임.
여기서 mod_jk 프로그램은 Tomcat 프로젝트의 일부로 Apache HTTP Server 와 Tomcat 을 연결하기 위한 웹 서버 플러그인임.
Biznet Bilisim 사의 Alphan YAVAS 연구원에 의해 발견됨.
( 2 ) 취약점 분석
Apache HTTPd 는 경로 해석을 위해 URL 의 세미콜론을 일반 문자로 해석하지만 Tomcat 은 쿼리 구분 기호("?" 와 같은 기능)로 해석함.
따라서 공격자는 http://server/java_app/..; 을 입력할 경우 Apache HTTPd 경로 통과를 허용하지 않으나 Tomcat 은 그대로 문자열을 .. 로 해석함.
이를 통해 Tomcat 에서 액세스할 수 없는 리소스를 가져올 수 있음.
참고로 해당 취약점은 CVE-2018-1323 취약점과 관련이 있으나 동일한 취약점은 아님.
CVE-2018-1323 취약점에서 특정 경로 탐색 공격을 수정했지만 mod_jk 에 의한 세미콜론 처리 문제점은 수정하지 않음.
< 패치 파일에서 취약한 코드 삭제 >
아래 경로를 보면 CVE-2018-11759 취약점 패치 관련 정보가 있으며 문제되는 코드를 삭제한 것으로 확인됨.
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?r1=1838573&r2=1838836&pathrev=1838836&diff_format=h
( 3 ) PoC 테스트
JK 상태 관리자(jkstatus)는 mod_jk 에 대한 관리 인터페이스로 내부 서버의 호스트 이름, IP, 포트, mod_jk 가 제공하는 경로 및 파일 시스템의 httpd 서버의 절대 경로를 공개함.
일반적으로 다음과 같은 httpd 지시문을 사용하여 JK 상태 관리자에 대한 액세스를 제한할 수 있음.
<Location /jkstatus>
JKMount jk-status
Require ip 127.0.0.1
</Location>
해당 지시문을 이용하여 JK 상태 관리자에 대한 외부 액세스를 금지함.
그러나 /jkstatus URL 뒤에 세미콜론을 삽입함으로써 액세스 금지를 우회할 수 잇음.
그리고 URL 다음에 GET 매개변수 입력으로 명령어 실행이 가능하며 설정도 가능한 것으로 확인됨.
더 나아가 해당 취약점 영향으로 mod_jk 가 제공하는 모든 어플리케이션의 서비스 거부, 하이재킹도 가능한 것으로 확인됨.
( 4 ) 공격 탐지 방법
/jkstatus URL 뒤에 세미콜론을 삽입을 탐지함.
alert tcp any any -> any any (msg:"KOROMOON_Apache_mod_jk_Access_Control_Bypass"; uricontent:"/jkstatus\;"; nocase;)
( 5 ) 취약점 방어
최신 버전으로 업데이트함.
취약점이 패치된 Apache mod_jk Connector 1.2.46 으로 업데이트함.
( 6 ) Reference
https://www.immunit.ch/blog/2018/11/01/cve-2018-11759-apache-mod_jk-access-bypass/
https://tomcat.apache.org/download-connectors.cgi
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?r1=1838573&r2=1838836&pathrev=1838836&diff_format=h
https://github.com/immunIT/CVE-2018-11759
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기