1. Log4j 동작 조건 및 영향 받는 버전
먼저 해당 취약점이 동작하기 위해서는 몇가지 조건이 있는데, 다음과 같다.
- log4j 버전이 2.0에서 2.14.1 사이
- JRE / JDK 버전이 특정 버전(6u221, 7u201, 8u191, 11.0.1)보다 이전 버전
2. 취약점 시연
아래 Github를 참고해 진행하였다.
2-1) 피해자 환경
Ubuntu 20.04
IP : 192.168.56.107
명령어
해당 명령을 순차적으로 실행한 후 localhost:8080으로 접속이 가능하다.
* docker 설치 및 명령줄을 수행하였으나 error가 발생하였고, sudo 명령을 추가하여 설치와 명령을 수행(해당 부분 이유 확인 필요).
2-2) 공격자 환경
Kali Linux
IP : 192.168.56.102
LDAP Port : 1389
Web Port : 8000
nc Port : 9001
명령어
JDK 1.8 버전을 다운받아 해당 폴더에 위치시켜야 하며, 이름은 JDK_1.8.0_20 이어야한다.
* https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 에서 8u20 부분을 찾아 다운로드
이후 리버스 쉘 생성과 poc를 실행한다.
이후 공격자는 취약합 웹서버에 jndi ldap 쿼리를 이용하여 공격을 수행한다.
공격자 화면을 통해 확인하면
1. 취약한 웹서버로 부터 8000포트로 LDAP 쿼리를 수신해 Exploit.class를 반환 했으며
2. nc로 리스닝 중이던 9001포트로 리버스 쉘이 생성된 상황이다.
* 패킷 분석을 위해 와이어샤크를 사용하였으나, 해당 부분은 좀 더 공부가 필요할 것으로 보인다(추후 취약점 분석 때 사용 가능하도록).
2-3) 흐름도
위의 일련의 과정을 흐름도로 나타내면 다음과 같다.
3. 취약점 원리
[캡쳐 9]는 취약한 웹서버 소스코드의 일부이며 33번 Line에서 userName(계정정보_[캡쳐 6]을 수행한 이유)을 그대로
log로 작성하기 때문에 취약점이 발생 가능 한 것이다.
'취약점 > 4Shell' 카테고리의 다른 글
Text4Shell (CVE-2022-42889) (0) | 2022.11.20 |
---|---|
Spring4Sell 취약점(CVE-2022-22965) (0) | 2022.11.12 |
Log4j 취약점 분석 #3 대응 (0) | 2022.07.15 |
Log4j 취약점 분석 #1 개요 (0) | 2022.07.14 |