본문 바로가기

Spring

[Spring Boot] log4j2 보안 문제 해결 방안 - CVE-2021-44228

발단 및 문제점

2021년 12월 10일 오전 9시 40분 경, 아파치 소프트웨어 재단의 자바로 제작된 Log4j2 에 보안 문제가 발생하였다.

이 문제는 하트블리드과는 비교도 안 될만큼 역사상 최악의 보안 결함일 수도 있다고 한다.

 

해당 보안 문제의 이름은 CVE-2021-44228 -> Log4Shell 혹은 LogJam이라고 명명될 예정

 

Log4j2를 이용하여 원격 코드 실행이 가능한 JNDI 인젝션 취약점으로 사용자의 입력으로 발생한 로그를 기록할 때 해커의 임의코드 실행이 가능하게 된다.

 

즉 해커가 악용한다면 서버에 접근하는 것 만으로 사용자의 컴퓨터를 사실상 원격 조정할 수 있다고 한다.

 

이러한 취약점으로인해 Log4j 프로젝트를 맡는 아파치 소프트웨어 재단은 Log4Shell에 CVSS 점수 최고점인 10점을 부여하였다.

* CVSS(Common Vulnerability Scoring System) -  취약점의 가장 중요한 특성을 수치로 된 점수를 부여함으로써 심각성을 표기하는 시스템

 

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

 

CVE-2021-44228 - Log4j 2 Vulnerability Analysis - Randori Attack Team

CVE-2021-44228 is a high severity vulnerability impacting Apache Log4j 2. Randori has developed a working exploit and provided a technical analysis.

www.randori.com

 

먼저 해당 보안 이슈는 Log4j 2.0 이상 2.14.1 이하 버전에 해당한다.

 

전자정부프레임워크 구버전은 1.x버전을 사용하므로 이 보안 문제에 해당되지 않는다고 한다.

 

해결 방안

스프링 부트의 log4j2를 사용하는경우 해당 이슈에 영향을 받을 수 있다고 한다.

다음 출시 예정인 2.5.8 및 2.6.2릴리즈 버전(21년 12월 23일 예정)에서는 log4j의 2.15.0 버전으로 배포하지만 현재 스프링 부트 릴리즈 버전에 포함되어있는 log4j2는 2.15.x 이전 버전이므로 단독으로 종속성을 업그레이드하는것을 추천하고있다.

 

업그레이드 방법은 다음과 같다.

 

maven

# maven log4j 버전 속성 지정
<properties>
    <log4j2.version>2.15.0</log4j2.version>
</properties>

# maven 버전 업그레이드 확인
./mvnw dependency:list | grep log4j

 

gradle

#gradle log4j 버전 속성 지정
ext['log4j2.version'] = '2.15.0'
#kotlin gradle log4j 버전 속성 지정
extra["log4j2.version"] = "2.15.0"

#or

#gradle 종속성 추가
implementation(platform("org.apache.logging.log4j:log4j-bom:2.15.0"))

#or

# 위 방법들 모두 사용할 수 없을 경우 resolutionStrategy
configurations.all {
	resolutionStrategy.eachDependency { DependencyResolveDetails details ->
		if (details.requested.group == 'org.apache.logging.log4j') {
			details.useVersion '2.15.0'
		}
	}
}

 

업그래이드 확인 (gradle 기준)

#gradle 버전 확인 
./gradlew dependencyInsight --dependency log4j

해당 명령어를 통해 버전이 2.14.1 -> 2.15.0으로 업그래이드 된 것을 확인할 수 있다.

 

그 외

위의 방법으로 업그레이드할 수 없는 경우 또는 하지으려는 경우에는

시스템 속성 log4j2.formatMsgNoLookups 을 true로 설정하는 방법이 있다.

-Dlog4j2.formatMsgNoLookups=true

* 위 명령어는 2.15.0 버전부터는 기본값으로 제공되고있음

 

또는 config파일에서 logging 패턴 레이아웃을 "%m -> %m{nolookups}" 로 수정

 

스프링 블로그

 

Log4J2 Vulnerability and Spring Boot

<p>As you may have seen in the news, a new zero-day exploit has been reported against the popular Log4J2 library which can allow an attacker to remotely execute code. The vulnerability has been reported with <a href="https://nvd.nist.gov/vuln/detail/CVE-20

spring.io