스프링 부트는 기본적으로 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 버전을 사용하고 있어 취약점에 취약하지 않다고 알려져 있다.
금요일부터 주말까지 빠르게 대응하느라 다들 고생이 많으십니다.