본문 바로가기
Web Programming

Spring boot - Log4j 2.x 취약점 (ldap, jndi공격) 현상 및 해결방법

by 맑은안개 2021. 12. 13.

Log4j 2.x 취약점 - 2021.12.10 

2021.12.10 Log4j2 버전에서 보안 취약점이 발견되었다. 미국표준기술연구소(NIST)가 게시한바에 따르면, Log4j2 버전 중 2.14.1 이하 버전에서 ldap, jndi 를 컨트롤하는 프로퍼티를 통해 "임의의 코드를 실행" 할 수 있다 밝혔다.

 

아래는 해당 내용 중 일부이다.

Apache Log4j2 <=2.14.1 JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled.

 

Spring boot log4j2

Spring boot 공식 blog 채널은 해당 취약점에 대한 내용을 10일 게시했다. 

 

주 내용은 Spring boot의 default logging 을 사용했다면 문제가 없다는 것이다. 문제의 발단은 log4j2-core 라이브러리 인데 Spring boot default log4j 라이브러리는 log4j-to-slf4j 와 log4j-api 를 사용한다. 해당 라이브러리는 문제의 옵션을 default로 막고 있다. 

 

아래는 해당 내용 중 일부이다.

Spring Boot users are only affected by this vulnerability if they have switched the default logging system to Log4J2
. The log4j-to-slf4j and log4j-api jars that we include in spring-boot-starter-logging cannot be exploited on their own. Only applications using log4j-core and including user input in log messages are vulnerable.

 

해결방안

Spring boot에서 라이브러리 관리도구로 log4j2 버전을 지정하여 사용했다면 다음과 같이 2.15.0 이상 버전으로 Update한다. 

maven 

<properties>
    <log4j2.version>2.15.0</log4j2.version>
</properties>

Gradle

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

or

implementation(platform("org.apache.logging.log4j:log4j-bom:2.15.0"))

Java system property

java -Dlog4j2.formatMsgNoLookups=true

 


참조

https://nvd.nist.gov/vuln/detail/CVE-2021-44228

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

 

반응형