Oracle WebLogic RCE 취약점 실습 (CVE-2019-2725, CVE-2019-2729)

Oracle WebLogic RCE 취약점 실습 (CVE-2019-2725, CVE-2019-2729)

in

Oracle WebLogic Server는 오라클이 개발한 자바 EE 웹 애플리케이션 서버(WAS) 입니다.

CVE-2019-2725와 CVE-2019-2029는 Oracle WebLogic Server에서 안전하지 않은 역직렬화로 인해 발생하는 취약점으로, 사용자 인증정보를 우회하여 원격 코드 실행을 가능하게 합니다.

Java 역직렬화란 간단히 말하자면 직렬화된 바이트 형태의 데이터를 객체로 변환해주는, 직렬화의 반대되는 프로세스를 말합니다.

WebLogic에서 이러한 유형의 취약점은 CVE-2017-3506(Weblogic XMLDecoder Serialization)에서 처음 드러났으며, CVE-2019-2725로 인한 블랙리스트 패치를 우회한 것이 CVE-2019-2729 입니다.

영향을 받는 버전은 10.3.6.0.0, 12.1.3.0.0 및 12.2.1.3.0 버전이며, 쉽게 악용 가능한 취약점으로 CVSS 3.0 9.8점을 받았습니다.

image https://nvd.nist.gov/vuln/detail/CVE-2019-2729

실습을 위해 취약점 테스트 환경 구축 후 Exploit을 진행합니다.

취약점 테스트 환경 구축

역할 서버 구성
Attacker Network에 연결되어 있는 모든 환경
Victim Centos7-64bit / Oracle WebLogic 12.1.3.0 / JDK 1.8.0

JDK 1.8.0 install

centos7에는 기본적으로 OpenJDK 1.8.0 버전이 설치되어 있습니다. image default jdk version

그러나 WebLogic은 설치시 OpenJDK를 지원 하지않기 때문에 아래와 같은 에러가 발생합니다.

$ java -jar fmw_12.1.3.0.0_wls.jar 
Launcher log file is /tmp/OraInstall2022-12-24_05-59-59PM/launcher2022-12-24_05-59-59PM.log.
Extracting files......
The OpenJDK JVM is not supported on this platform.

아래 링크에서 OpenJDK 가 아닌, 일반 JDK 1.8.0 버전을 따로 설치해줍니다.
JDK 및 WebLogic 설치시 오라클 계정이 필요합니다. 계정이 없다면 회원가입을 해주셔야 다운로드가 가능합니다.
https://www.oracle.com/java/technologies/downloads/#java8

Centos 64bit 환경이기 때문에 RPM 패키지를 다운로드 받아줍니다. image 빨간 표시된 패키지를 다운로드 해줍니다.

설치된 폴더로 이동하여 jdk를 설치해줍니다.

$ cd ~/Download
$ rpm -ivh jdk-8u361-linux-x64.rpm

image jdk install

“alternatives”를 사용하여 jdk 버전을 1.8.0 버전으로 변경합니다.

$ sudo alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre/bin/java)
*+ 2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre/bin/java)
   3           /usr/java/jdk1.8.0_361-amd64/bin/java

Enter to keep the current selection[+], or type selection number: 3

image change jdk version

정상적으로 변경되었는지 java 버전을 확인해 줍니다. openJDK가 아닌 일반 버전으로 출력되면 정상적으로 적용된 것 입니다.

$ java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)

image java version check

WebLogic Install

설치에 앞서, WebLogic은 보안상 root 계정으로 설치하려고 “The current user is root or has superuser privilege.” 에러가 발생합니다. image The current user is root or has superuser privilege.

따라서, WebLogic 전용계정인 “oracle” 계정을 생성한 후 “oracle” 계정으로 설치를 진행합니다.

$ useradd oracle
$ usermod -aG wheel oracle
$ su - oracle

image adduser

WebLogic 설치를 위해서 아래 링크에 접속합니다.
https://edelivery.oracle.com/osdc/faces/Home.jspx

그림처럼 “WebLogic Server 12c”를 검색한 후 “REL: Oracle WebLogic Server 12.1.3.0.0” 항목을 추가 후 Continue를 누릅니다. image Download Manual-1

플랫폼을 설정하고 Continue를 누릅니다. image Download Manual-2

빨간표시된 링크를 눌러서 다운로드 받아줍니다. image Download Manual-3

압축을 풀어주고 WebLogic을 설치합니다.

$ unzip V886423-01.zip
$ java -jar ./fmw_12.1.3.0.0_wls.jar

image weblogic install

Install 창이 나오면 설치해줍니다. 설치에 어려움이 있다면 아래 블로그를 참고합니다.
https://gsk121.tistory.com/403 image WebLogic GUI Install

[ WebLogic Install Trouble Shooting ]

설치시 에러가 발생한다면 아래를 참고합니다.

  • No X11 DISPLAY variable was set, but this program performed an operation which requires it.
    $ su # root change
    $ xhost +
    xhost:  unable to open display ""
    $ su - oracle
    $ export DISPLAY=:0
    $ java -jar ./fmw_12.2.1.3.0_wls.jar # 다시 설치를 진행합니다.
    
  • Exception in thread “main” java.lang.UnsatisfiedLinkError: /usr/lib/jvm/jdk1.8.0_351/jre/lib/i386/libawt_xawt.so: libXext.so.6: cannot open shared object file: No such file or directory
$ yum install libXtst.so.6  -y
$ java -jar ./fmw_12.2.1.3.0_wls.jar # 다시 설치를 진행합니다.
  • Exception in thread “main” java.lang.UnsatisfiedLinkError: /usr/lib/jvm/jdk1.8.0_351/jre/lib/i386/libawt_xawt.so: libXrender.so.1: cannot open shared object file: No such file or directory
$ yum install libXrender.so.1  -y
$ java -jar ./fmw_12.2.1.3.0_wls.jar # 다시 설치를 진행합니다.
  • Exception in thread “main” java.lang.UnsatisfiedLinkError: /usr/lib/jvm/jdk1.8.0_351/jre/lib/i386/libfontmanager.so: libgcc_s.so.1: cannot open shared object file: No such file or directory
    $ yum install libgcc_s.so.1  -y
    $ java -jar ./fmw_12.2.1.3.0_wls.jar # 다시 설치를 진행합니다.
    

Start WebLogic Server

WebLogic 설치 및 도메인 생성까지 마무리 했으면 WebLogic Admin Server를 구동해줍니다.


/home/oracle/Oracle/Middleware/Oracle_Home

```bash
$ cd /home/oracle/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain
$ ./startWebLogic.sh

image Start WebLogic Server

도메인 구성시 입력한 User ID, Password를 정확히 입력해줘야 정상적으로 구동됩니다. image input username and password

정상적으로 서비스 되었는지 확인하기 위해 브라우저를 이용해서 WebLogic 관리자 콘솔 “localhost:7001/console/” 에 접근합니다. 아래와 같은 페이지가 나오면 정상적으로 구성된 것 입니다. image WebLogic Admin Console

취약점 시연

해당 취약점은 XMLDecoder를 통한 역직렬화 취약점으로 공격자는 “/_async/AsyncResponseService” 혹은 “/wls-wsat/CoordinatorPortType” 경로에 악의적인 xml 데이터를 구성하여 전달하고, 해당 데이터가 역직렬화되면서 원격 명령 실행을 가능하게 합니다.

취약점에 이용되는 모듈은 “wls9_async_response.war”와 “wls-wsat.war” 입니다.

취약대상 확인

“/_async/AsyncResponseService” 또는 “/wls-wsat/CoordinatorPortType”에 접속합니다.

아래와 같은 화면이 나온다면 모듈이 Enable 된 상태입니다.

/_async/AsyncResponseService

image /_async/AsyncResponseService

/wls-wsat/CoordinatorPortType

image /wls-wsat/CoordinatorPortType

Exploit

CVE-2019-2725의 패치인 “<class>…</class>” 블랙박스 필터링을 “<array method=”forName”>…</array>“로 우회한 것이 CVE-2019-2729 입니다. 여러가지 페이로드가 존재하지만 그 중에서 “/wls-wsat/CoordinatorPortType”를 엔드포인트로서 악성 xml 데이터를 주입합니다. image 공격자 서버의 9999 포트로 리버스 커넥션을 맺도록 합니다.

정상적으로 리버스 커넥션이 연결되었습니다. image Reverse Connection

보안 방법

  • 보안패치를 적용합니다.
  • 당장 패치를 적용할 수 없는 상황이라면 아래와 같은 임시 방안을 적용합니다.
    • 관련 모듈인 wls9_async_response.war, wls-wsat.war 를 삭제 후 WebLogic 서비스 재시작 합니다.
    • “/_async/“와 “/wls-wsat/“로 연결되는 URL에 대한 접근을 제어합니다.

References