Log4J2漏洞和Spring Boot

你可能已经在新闻中看到,针对流行的Log4J2库报告了一个新的零日漏洞,可以让攻击者远程执行代码。该漏洞已被报告为针对log4j-core jar的CVE-2021-44228,并已在Log4J v2.15.0中修复。

Spring Boot用户只有在将默认日志系统切换到Log4J2时才会受到该漏洞的影响。我们在spring-boot-starter-logging中包含的log4j-to-slf4jlog4j-api jar本身不能被利用。只有使用log4j-core并在日志信息中包含用户输入的应用程序才会受到攻击。

我们即将发布的v2.5.8和v2.6.2版本(将于2021年12月23日发布)将拾取Log4J v2.15.0,但由于这是一个如此严重的漏洞,你可能想覆盖我们的依赖性管理,并尽早升级你的Log4J2依赖性。

Maven

对于Maven用户,你可以按照这些说明,设置log4j2.version属性。

比如说。

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

要检查覆盖是否被应用,请运行./mvnw dependency:list | grep log4j并检查版本是否为2.15.0。

Gradle

对于Gradle用户,你可以按照这些说明并更新版本属性,导入BOM或使用resolutionStrategy

对于大多数用户来说,设置log4j2.version属性就足够了。

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

如果你使用Gradle的平台支持,而不是我们的依赖性管理插件,那么你可以在Log4J的BOM中添加一个依赖性。

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

如果你不能使用这些方法中的任何一种,那么你可以声明一个resolutionStrategy

configurations.all {
	resolutionStrategy.eachDependency { DependencyResolveDetails details ->
		if (details.requested.group == 'org.apache.logging.log4j') {
			details.useVersion '2.15.0'
		}
	}
}

无论你选择哪种方法,要检查覆盖是否已经应用,你可以运行./gradlew dependencyInsight --dependency log4j-core并查找2.15.0版本。

其他选择

对于不能升级的用户,另一个选择是将log4j2.formatMsgNoLookups系统属性设置为true。例如,你可以用java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar启动你的应用程序。


原文:Log4J2 Vulnerability and Spring Boot

1 Like

昨天我还寻思 得自己编译整了半天没搞好,结果一试好家伙阿里云仓库已经给我编译好了。

1 Like