2021년 12월 18일 Log4j 2.16.0 버전에서 동작하는 CVE-2021-45105 취약점이 추가로 공개되었다. (CVSS 7.5)
1. 취약한 제품 버전
Log4j 2.0-beta9 ~ 2.16.0 버전
2. 취약점 공격 기법
취약점 공격은 Log4j를 사용하는 응용 프로그램에서 layout pattern 과 쓰레드 컨텍스트 기능이 사용되는 경우 발생할 수 있다. 취약한 환경과 이 환경을 공격하는 기법은 다음과 같다.
1) 취약한 환경
[설정]
응용 프로그램이 layout pattern에서 쓰레드 컨텍스트를 조회하는 기능을 사용하도록 설정됨
[log4j2.properties 설정 일부]
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = !${ctx:loginId}! %m%n
rootLogger.level = ALL
rootLogger.appenderRef.file.ref = console
[소스 코드]
layout pattern에서 참조하는 쓰레드 컨텍스트의 값을 외부로부터 입력받은 값으로 저장함
응용 프로그램 소스코드 일부
ThreadContext.put(“test”, “${::-${ctx:loginId}}”);
logger.error(“Test”);
2) 취약점 공격
공격자가 X-Api-Version 헤더에 특정 문자열을 포함한 요청을 대상 서버에 전송하는 경우, log4j에서는 로그를 저장하는 과정에서 Stack OverFlow 오류가 발생하여 해당 프로세스가 종료될 수 있다.
# curl server -H ‘X-Api-Version: ${${::-${::-$${::-$}}}}’
3. 취약점 영향
Log4j의 서비스 거부 취약점 (Dos :Denial Of Service) 취약점으로 인해 서비스 장애가 발생할 수 있지만, 공격 기법에서 설명한 환경이 구축되어야 취약점 공격이 가능하다.
또한, log4j-core-*.jar 파일 없이 log4j-api-*.jar 파일만 사용하는 경우 취약점의 영향을 받지 않는다.
4. 취약점 패치
2021년 12월 18일 Log4j 2.17.0 패치가 제공되었다.
Log4j 2.17.0 이상 최신 버전 (Java8 이상)
https://logging.apache.org/log4j/2.x/download.html
* Java 7 버전 : 제공 예정
5. 취약점 완화
취약점 패치가 어려운 경우 다음의 방법으로 임시 조치를 진행한다.
– PatternLayout 에서 ${ctx:loginId} 또는 $${ctx:loginId} 를 제거하거나 (%X, %mdc, or %MDC) 로 변경한다.
6. 참고 정보
[1] CVE-2021-45105
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105
[2] Apache Log4j Security Vulnerabilities
https://logging.apache.org/log4j/2.x/security.html
[3] Log4j_dos_CVE-2021-45105
https://github.com/cckuailong/Log4j_dos_CVE-2021-45105
[4] Denial of Service (DoS)Affecting org.apache.logging.log4j:log4j-coreOpen this link in a new tab package, versions [2.0-alpha1,2.17.0)
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHELOGGINGLOG4J-2321524
연관 IOC 및 관련 상세 분석 정보는 안랩의 차세대 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인 가능하다.
