Spring Boot 應(yīng)對(duì) Log4j2 注入漏洞官方指南
Log4J2漏洞涉及的影響太廣了,昨天發(fā)文后很多粉絲留言問(wèn)Spring Boot項(xiàng)目是否受到Log4J2漏洞影響。Spring官方已經(jīng)全面進(jìn)行了排查,現(xiàn)在大家可以知道這些信息和應(yīng)對(duì)方法。
默認(rèn)配置不受影響
Spring Boot默認(rèn)日志組件是logback,開(kāi)發(fā)者通過(guò)日志門(mén)面Slf4j進(jìn)行集成對(duì)接。Spring Boot 用戶只有在將默認(rèn)日志系統(tǒng)切換到 Log4J2 時(shí)才會(huì)受到此漏洞的影響。Spring Boot包含的log4j-to-slf4j和log4j-api、spring-boot-starter-logging不能獨(dú)立利用。只有l(wèi)og4j-core在日志消息中使用和包含用戶輸入的應(yīng)用程序容易受到攻擊。
也就是說(shuō)Spring Boot現(xiàn)在包含Log4J2的依賴只要你不啟用是不會(huì)觸發(fā)漏洞的。
下版本更新補(bǔ)丁
Spring Boot將在2021 年 12 月 23 日后發(fā)布的 2.5.8 和 2.6.2 版本將采用打了補(bǔ)丁的Log4J v2.15.0,但由于這是一個(gè)極其嚴(yán)重的漏洞,一定要覆蓋我們的依賴項(xiàng)管理并盡快升級(jí)您的 Log4J2 依賴項(xiàng)。
Maven用戶
對(duì)于 Maven 用戶,您可以通過(guò)覆蓋自己項(xiàng)目中pom.xml的版本號(hào)配置屬性來(lái)修改該依賴的版本號(hào)。提升Log4J2到安全版本只需要:
- <properties>
- <log4j2.version>2.15.0</log4j2.version>
- </properties>
然后使用./mvnw dependency:list | grep log4j命令運(yùn)行以檢查版本是否為 2.15.0。
Gradle用戶
對(duì)于大多數(shù)用戶來(lái)說(shuō),設(shè)置log4j2.version屬性就足夠了:
- ext['log4j2.version'] = '2.15.0'
如果你的Gradle并沒(méi)有直接對(duì)Spring Boot進(jìn)行依賴管理,你可以添加Log4J BOM依賴項(xiàng):
- implementation(platform("org.apache.logging.log4j:log4j-bom:2.15.0"))
“萬(wàn)金油”的方法是聲明一個(gè)Gradle的resolutionStrategy:
- configurations.all {
- resolutionStrategy.eachDependency { DependencyResolveDetails details ->
- if (details.requested.group == 'org.apache.logging.log4j') {
- details.useVersion '2.15.0'
- }
- }
- }
上面三種方法無(wú)論你使用哪種,安全起見(jiàn)都需要使用下面的命令進(jìn)行檢查確認(rèn):
- /gradlew dependencyInsight --dependency log4j-core
漏洞演示
漏洞攻擊的演示代碼,我將在周一通過(guò)公眾號(hào)文章進(jìn)行詳細(xì)講解,請(qǐng)持續(xù)關(guān)注。