Log4j爆"核弹级"漏洞,那就来做个拆弹专家吧
背景
近日,Apache发布了Log4j任意代码执行漏洞安全更新补丁。Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。该组件应用范围非常广泛,如:Apache Struts2、Apache Solr、Apache Druid等开发框架及中间件中,相关POC和细节已经被公开且已存在在野利用,漏洞利用简单,危害巨大
漏洞描述
Apache Log4j 2是一个基于Java的日志记录工具,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,攻击者可通过构造恶意请求利用该漏洞实现在目标服务器上执行任意代码。
影响版本
Apache Log4j 2.x < 2.15.0-rc2
看看官方的更新操作,就知道这个问题有多么危急,最近9天连更8个版本,稍微再近一点的更新时间都是3月份的了
解决方法
更新log4j版本至Apache Log4j 2.15.0-rc2或更高版本(优先)
添加jvm启动参数:-Dlog4j2.formatMsgNoLookups=true
在应用classpath下添加log4j2.component.properties配置文件,文件内容为:log4j2.formatMsgNoLookups=true
建议JDK使用11.0.1、8u191、7u201、6u211及以上的高版本,可以在一定程度上限制JNDI等漏洞利用方式
版本更新操作
1、排查应用是否引用Log4j相关代码包,Idea可以安装插件“Maven Helper”,分析相关包依赖情况
2、现在中央仓库已经有2.16.0版本的log4j相关包,如果依赖比较深或者短时间内无法获取第三方的更新版本,可以自行排除依赖,重新引入2.16.0的包
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-loggingartifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-to-slf4jartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-to-slf4jartifactId>
<version>2.16.0version>
dependency>