Infomation/Vulnerability

CVE-2021-45105 Log4j Vulnerability

DarkSoul.Story 2021. 12. 23. 17:59
반응형

 

[Vulnerability] CVE-2021-44228 Log4j Vulnerability

2021년 12월 10일 Apache는 Apache Log4j 2.14.1 및 그 이전 버전에 영향을 미치는 원격코드 코드 실행(RCE) 취약점인 CVE-2021-44228에 대한 수정 사항이 포함된 Log4j 2.15.0 버전을 발표했다. CVE-2021-44228..

darksoulstory.tistory.com

 

[Vulnerability] CVE-2021-45046 Log4j Vulnerability

1. CVE-2021-45046 개요 Apache Log4j 2.15.0에서 CVE-2021-44228을 해결하기 위한 수정 사항이 기본이 아닌 패턴 레이아웃(PatternLayout)을 사용하는 경우 불완전한 것으로 나타났다. CVE-2021-44228을 완화하..

darksoulstory.tistory.com

 

[Vulnerability] CVE-2021-44832 Log4j Vulnerability

[Vulnerability] CVE-2021-44228 Log4j Vulnerability 2021년 12월 10일 Apache는 Apache Log4j 2.14.1 및 그 이전 버전에 영향을 미치는 원격코드 코드 실행(RCE) 취약점인 CVE-2021-44228에 대한 수정 사항이..

darksoulstory.tistory.com

1. CVE-2021-45105 개요

CVE-2021-45046 취약점에 수정된 지 며칠 만 에 Apache Log4j에서 세 번째 제로데이 취약점(CVE-2021-45105)이 발견되었다 . 이 취약점은 2021년 12월 15일에 보고 되었으며, 2021년 12월 18일에 공개 되었다.  CVE-2021-45105는 로깅 구성이 Context Lookup과 함께 기본이 아닌 Pattern Layout (예: ${ctx:loginId}, ${ctx:apiversion} 등)을 사용하는 경우 Thread Context Map(MDC) 입력 데이터를 제어하는 공격자는 재귀 조회(Recursive lookup)가 포함된 악의적인 입력 데 이터를 만들 수 있으며, 이로 인해 StackOverflow가 발생하여 프로세스가 종료 될 수 있다.

Log4j StrSubstitutor.substitute() 메소드

log4j-core의 StrSubstitutor 및 StrLookup 클래스는 ${ctx:username}과 같은 Pattern Layout 내에서 만들어진 Lookup 구문 분석을 담당한다. 취약점은 중첩된 변수가 "StrSubstitutor" 클래스로 대체될 때 "substitute()" 메서드가 재귀적으로 호출 되기 때문에 가능하다. 따라서 중첩 변수가 변수 자체를 참조하는 경우 프로세스 충돌을 일으키는 무한 재귀를 유발시킨다. 조회 패턴(Lookup pattern)은 다음 형식을 허용한다.

${lookupName:key:-defaultValue}

- lookupName : 수행할 lookup의 이름 또는 유형(예: ctx, env 등)
- key : 해당 맵 객체에서 찾을 변수의 이름( ctx의 경우 ThreadContext map)
- defaultValue : 키 가 맵에 존재하지 않는 경우 대체자에게 이 조회 인스턴스(lookup instance) 대신 무엇을 넣을지 알려주는 선택적 값

ThreadContext 맵의 변수를 공격자가 제어할 수 있는 경우 기본값을 사용하여 컨텍스트 조회와 동일한 문자열을 보유할 수 있다. 예를 들어, Log4j 구성이 사용자 지정 Pattern Layout을 다음과 같이 설정하는 취약한 애플리케이션이 있다고 가정하자.

%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} – %msg%n ${ctx:user}

그리고 애플리케이션 사용자가 ThreadContext 맵에 저장된 사용자 변수를 제어할 수 있다고 가정하면, 공격자는 사용자 값을 ${ctx:user1:-${ctx:user}으로 설정하고 StackOverflow를 트리거할 수 있다.


2. 영향받는 Log4j 버전

2.0-beta9 ~ 2.16.0 이하 ((Log4j 2.3.1, 2.12.3 제외) )
※ log4j-core-*.jar 파일 없이 log4j-api-*.jar 파일만 사용하는 경우 취약점의 영향을 받지 않음

3. 대응 방안

  • Java 8 이상 : Log4j 2.17.0 -> Log4j 2.17.1로 업데이트
  • Java 7 : Log4j 2.12.3 -> Log4j 2.12.4로 업데이트

최신 버전으로 업데이트가 불가능한 경우 아래와 같이 임시 조치

  • PatternLayout에서 ${ctx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
  • ${ctx:loginId} 또는 $${ctx:loginId}를 제거

위의 임시조치는 어디까지나 임시조치이기 때문에 서비스 영향도를 고려하셔서 업데이트 계획을 수립 후 최신 버전의 Log4j로 업데이트를 권고하고 있다.


[참고자료]

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105
https://issues.apache.org/jira/browse/LOG4J2-3230
https://www.netskope.com/blog/cve-2021-45105-new-dos-vulnerability-found-in-apache-log4j
https://nsfocusglobal.com/apachelog4j-remote-code-execution-vulnerability-cve-2021-44228-threat-alert-2/
https://www.zerodayinitiative.com/blog/2021/12/17/cve-2021-45105-denial-of-service-via-uncontrolled-recursion-in-log4j-strsubstitutor
https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrSubstitutor.java
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36397

 

반응형

'Infomation > Vulnerability' 카테고리의 다른 글

CVE-2021-44832 Log4j Vulnerability  (0) 2021.12.29
CVE-2021-45046 Log4j Vulnerability  (0) 2021.12.23
CVE-2021-44228 Log4j Vulnerability  (0) 2021.12.22