All Articles

[Spring Boot] Log4j 취약점 Log4Shell CVE-2021-44228 대응기

스프링 부트는 기본적으로 log2j 대신 logback 라이브러리를 사용한다. 별도로 exclude 설정을 진행하지 않았고 log4j 의존성을 추가하지 않았다면 문제가 없지만, log4j 의존성을 추가하였다면 버전을 확인해 봐야 한다.

확인한 build.gradle.kts 설정:

plugins {
    id("org.springframework.boot") version "2.6.1"
    ...
}

configurations {
    all {
        exclude(group = "org.springframework.boot", module = "spring-boot-starter-logging")
    }
}

dependencies {
    ...
    implementation("org.springframework.boot:spring-boot-starter-log4j2")
    ...
}

글을 작성하는 현재 시점, 스프링 부트의 최신 버전 2.6.1 버전에서 기본으로 참조하는 log4j 버전은 2.14.1 이다.

취약점이 있는 버전은 2.0-beta9 - 2.14.1 버전이며, 취약점이 해결된 버전은 2.15.0 이다. 즉 스프링 부트를 최신으로 사용한다고 하더라도 기본적으로 취약하다.

해결 방법: log4j 버전을 다음과 같이 명시해준다. 나는 java.sourceCompatibility = JavaVersion.VERSION_11 직후에 넣어주었다.

ext["log4j2.version"] = "2.15.0"

Gradle Sync 이후, 버전이 정상적으로 변경되었는지 확인한다.

추후 Spring Boot 버전이 올라가면서 log4j 의존성도 같이 올라가게 되면, 위 조치는 제거할 예정이다.

출처: https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-boot

ElasticSearch, OpenSearch 등도 본 취약점에 취약하다고 알려져 있다. 출처: https://aws.amazon.com/ko/security/security-bulletins/AWS-2021-005/

Apache Kafka는 낮은 log4j 버전을 사용하고 있어 취약점에 취약하지 않다고 알려져 있다.

금요일부터 주말까지 빠르게 대응하느라 다들 고생이 많으십니다.