아파치 log4j 보안 취약점 (CVE-2021-45105) 조치 방법

아파치 log4j 보안 취약점 (CVE-2021-45105)

최근 10년 이내 최악의 보안 취약점이라고 알려진 아파치 log4J 취약점 문제(CVE-2021-44228)가 밝혀진지 몇 일이 지나지도 않았는데, 추가 문제가 보고되었다.

CVE-2021-44228은 원격 코드 실행에 대한 취약점이고 장애등급은 Critical이지만, 이번에 보고된 CVE-2021-45105는 Denial Of Service(DOS) 취약점이고 장애등급은 High이다.

 

문제점

아파치 Log4J 공식 사이트에서는 이 문제를 아래와 같이 기술하고 있다.

Apache Log4j2 versions 2.0-alpha1 through 2.16.0 did not protect from uncontrolled recursion from self-referential lookups. When the logging configuration uses a non-default Pattern Layout with a Context Lookup (for example, $${ctx:loginId}), attackers with control over Thread Context Map (MDC) input data can craft malicious input data that contains a recursive lookup, resulting in a StackOverflowError that will terminate the process. This is also known as a DOS (Denial of Service) attack.

출처: https://logging.apache.org/log4j/2.x/security.html#CVE-2021-45105

이 취약점은 원격 공격에 의해서 유발될 수 있고, 인증을 거치지 않은 상태에서도 악용/ 시도가 가능하다고 알려졌다.

${${::-${::-$${::-$}}}}

와 같은 표현식이 전달되면, 이 문자열을 처리하는 과정에서 StrSubstitutor가 자기참조를 재귀적으로 처리하면서 무한루프에 빠지고, 결국 Stack overflow가 되어 Denial of Service 상태에 빠진다.

Log4J에서는 ${ctx:username} 등과 같이 Pattern Layout에 Context Lookup 기능을 사용할 수 있는데, 이 값에 위와 같은 패턴의 값을 전달하면 문제가 발생한다.

반응형

 

조치 방법

이 문제를 해결하는 방법은 아래와 같다.

  • Java8 혹은 그 이상 버전에서는 Log4J를 2.17.0 (작성시점 기준)으로 즉시 업그레이드 해야 한다.
  • 대안으로, PatternLayout을 사용하고 있는 경우, ${ctx:longId} 또는 $${ctx:loginId} 등과 같은 Context Lookup 방식의 패턴을 (%X, %mdc, %MDC) 등과 같은 유형으로 변경해 줘도 된다.
  • log4-core.jar 파일만 위험에 노출되어 있으므로, log4j-api만 쓰는 경우는 해당되지 않는다.

결과적으로, log4j를 2.17.0으로 업그레이드 하자. (pom.xml, build.gradle 파일 등)
외부 라이브러리 의존성을 갖는 경우에도, 마찬가지로 패치에 신경써야 한다.

 

참고

 

더 보기

 

아파치 log4j 취약점 확인 및 조치하기 (CVE-2021-44228)

log4j 취약점에 대해 제로데이 어택으로 구분될만큼 심각한 보안문제로 log4j CVE-2021-44228가 보고 되었다. 이와 관련한 내용을 정리해 본다. 제로데이 어택 앞서 말한 제로데이 어택이란 무엇일까?

luran.me

 

댓글

Designed by JB FACTORY