Spring Boot 應對 Log4j2 注入漏洞官方指南
Log4J2漏洞涉及的影響太廣了,昨天發文后很多粉絲留言問Spring Boot項目是否受到Log4J2漏洞影響。Spring官方已經全面進行了排查,現在大家可以知道這些信息和應對方法。
默認配置不受影響
Spring Boot默認日志組件是logback,開發者通過日志門面Slf4j進行集成對接。Spring Boot 用戶只有在將默認日志系統切換到 Log4J2 時才會受到此漏洞的影響。Spring Boot包含的log4j-to-slf4j和log4j-api、spring-boot-starter-logging不能獨立利用。只有log4j-core在日志消息中使用和包含用戶輸入的應用程序容易受到攻擊。
也就是說Spring Boot現在包含Log4J2的依賴只要你不啟用是不會觸發漏洞的。
下版本更新補丁
Spring Boot將在2021 年 12 月 23 日后發布的 2.5.8 和 2.6.2 版本將采用打了補丁的Log4J v2.15.0,但由于這是一個極其嚴重的漏洞,一定要覆蓋我們的依賴項管理并盡快升級您的 Log4J2 依賴項。
Maven用戶
對于 Maven 用戶,您可以通過覆蓋自己項目中pom.xml的版本號配置屬性來修改該依賴的版本號。提升Log4J2到安全版本只需要:
- <properties>
- <log4j2.version>2.15.0</log4j2.version>
- </properties>
然后使用./mvnw dependency:list | grep log4j命令運行以檢查版本是否為 2.15.0。
Gradle用戶
對于大多數用戶來說,設置log4j2.version屬性就足夠了:
- ext['log4j2.version'] = '2.15.0'
如果你的Gradle并沒有直接對Spring Boot進行依賴管理,你可以添加Log4J BOM依賴項:
- implementation(platform("org.apache.logging.log4j:log4j-bom:2.15.0"))
“萬金油”的方法是聲明一個Gradle的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
漏洞演示
漏洞攻擊的演示代碼,我將在周一通過公眾號文章進行詳細講解,請持續關注。