一、漏洞概述
12月9日,绿盟科技CERT监测到网上披露Apache Log4j远程代码执行漏洞(CVE-2021-44228),由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特别构造的数据请求包,可在目标服务器上执行任意代码。漏洞PoC已公开,默认配置即可进行利用,该漏洞影响范围极广,建议相关用户尽快采取措施进行排查与防护。
12月10日,绿盟科技CERT发现Apache Log4j 2.15.0-rc1 版本仅修复LDAP和增加了host白名单,非默认配置下可以被绕过利用;官方对此发布了Apache Log4j 2.15.0-rc2版本(与2.15.0稳定版相同)进行修复,增加了对urI异常的处理。
12月12日,官方又发布了Apache Log4j 2.15.1-rc1版本,在默认配置中禁用了JNDI和Message lookups功能。
12月13日,官方再发布了Apache Log4j 2.16.0-rc1(与2.16.0稳定版相同)版本,此版本在2.15.1-rc1的基础上,移除掉了存在漏洞的Message lookups功能。
12月14日,官方发布通告,披露Apache Log4j反序列化代码执行漏洞(CVE-2021-4104),Apache Log4j 1.2.x版本在特定配置时,JMSAppender 容易受到不可信数据的反序列化,当攻击者具有修改 Log4j 配置的权限时,可以使用特定配置利用 JMSAppender 执行 JNDI 请求,从而造成远程代码执行。
12月14日,官方发布了Apache Log4j 2.12.2-rc1(与2.12.2稳定版相同)版本,默认配置禁用了JNDI,并移除掉存在漏洞的Message lookups功能,此版本支持Java 7。
12月15日,官方发布通告,披露Apache Log4j的DoS漏洞(CVE-2021-45046),当log4j配置使用非默认模式布局和上下文查找(例如$${ctx:loginId})或线程上下文映射模式(%X、%mdc或%MDC)时,使用JNDI查找模式制作恶意输入数据从而导致拒绝服务(DoS) 攻击。Apache Log4j 2.15.0版本中针对CVE-2021-44228的漏洞修复方式不完善,在特定配置时受此漏洞影响。
12月17日,Apache Log4j的DoS漏洞更新为代码执行漏洞(CVE-2021-45046),Apache Log4j 2.15.0中针对CVE-2021-44228的修复在某些非默认配置中不完整,当日志配置使用带有上下文查找的非默认模式布局(例如,$${ctx:loginId})时,控制线程上下文映射 (MDC) 输入数据的攻击者可以使用 JNDI 查找模式制作恶意输入数据,从而实现信息泄漏、RCE(远程代码执行)和 LCE(本地代码执行)攻击,CVSS评分从3.7上升为9.0分。
12月18日,官方发布了Apache Log4j 2.17.0版本,披露Apache Log4j存在Dos漏洞(CVE-2021-45105),由于log4j没有防止在自引用查找中不受控制的递归,当日志配置使用带有上下文查找的非默认模式布局(例如,$${ctx:loginId})时,控制线程上下文映射 (MDC) 输入数据的攻击者可以制作包含递归查找的恶意输入数据,导致 StackOverflowError 终止进程,造成DoS攻击。
12月22日,官方发布了Apache Log4j 2.12.3与Apache Log4j 2.3.1版本,修复了本次的安全漏洞,并支持在Java 7与Java 6环境下的使用。
12月29日,官方发布通告披露Apache log4j JDBCAppender代码执行漏洞(CVE-2021-44832),拥有修改日志配置文件的攻击者可以构建恶意配置将 JDBC Appender 与引用 JNDI URI 的数据源一起使用,从而利用JNDI URI 实现远程代码执行。默认配置不受影响,官方已针对不同Java环境发布新版本进行修复。
Apache Log4j2是一款开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中,用来记录日志信息。
CVE-2021-44228漏洞复现截图:
CVE-2021-44228在2.15.0-rc1绕过复现截图:
CVE-2021-44228漏洞状态:
漏洞细节 | 漏洞PoC | 漏洞EXP | 在野利用 |
已公开 | 已公开 | 已公开 | 存在 |
参考链接:
https://logging.apache.org/log4j/2.x/security.html
https://www.mail-archive.com/announce@apache.org/msg06936.html
二、影响范围
受影响版本
CVE-2021-44228:
- 2.0-beta9 <= Apache Log4j <= 2.3
- 2.4 <= Apache Log4j <= 2.12.1
- 2.13.0<= Apache Log4j <= 2.15.0-rc1
CVE-2021-45046:
- 2.0-beta9 <= Apache Log4j <= 2.3
- 2.4 <= Apache Log4j <= 2.12.1
- 2.13.0<= Apache Log4j <= 2.15.0-rc2(2.15.0稳定版)
注:只有 log4j-core jar文件受此漏洞影响。
CVE-2021-45105:
- 2.0-alpha1 <= Apache Log4j <=2.3
- 2.4 <= Apache Log4j <= 2.12.2-rc1(2.12.2稳定版)
- 2.13.0<= Apache Log4j <= 2.16.0
注:只有 log4j-core jar文件受此漏洞影响。
CVE-2021-4104:
- Apache Log4j =1.2.x
CVE-2021-44832:
- 2.0-beta7 <= Apache Log4j <=2.3.1
- 2.4 <= Apache Log4j <= 2.12.3-rc1(2.12.3稳定版)
- 2.13.0<= Apache Log4j <= 2.17.0
注:只有 log4j-core jar文件受此漏洞影响。
供应链影响范围:
经不完全统计,直接和间接引用Log4j的开源组件共计超过17万个;
log4j的1~4层引用关系:直接引用log4j的组件有7078个,第二层引用的超过3万个,第三层超过9万个,第四层超过16万个,总计有173200+个开源组件受Log4j漏洞影响。
已知受影响应用及组件:
VMware大部分产品
Jedis
Logging
Logstash
HikariCP
Hadoop Hive
ElasticSearch
Apache Solr
Apache Struts2
Apache Flink
Apache Druid
Apache Log4j SLF4J Binding
spring-boot-strater-log4j2
Camel :: Core
JBoss Logging 3
JUnit Vintage Engine
WSO2 Carbon Kernel Core
直接引用log4j的组件可参考如下链接:
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1
不受影响版本
- Apache Log4j 2.17.1-rc1(与2.17.1稳定版相同)
- Apache Log4j 2.12.4-rc1(与2.12.4稳定版相同)
- Apache Log4j 2.3.2-rc1(与2.3.2稳定版相同)
注:2.17.1支持Java 8及以上,2.12.4支持Java 7,2.3.2支持Java 6。
三、漏洞检测
3.1 人工检测
1、相关用户可根据Java jar解压后是否存在org/apache/logging/log4j相关路径结构,判断是否使用了存在漏洞的组件,若存在相关Java程序包,则很可能受漏洞影响。
2、若程序使用Maven打包,可查看项目的pom.xml文件中是否存在下图所示的相关字段,若版本号不是安全版本,则应用受漏洞影响。
3、若程序使用gradle打包,可查看build.gradle编译配置文件,若在dependencies部分存在org.apache.logging.log4j相关字段,且版本号不为安全版本,则应用受漏洞影响。
3.2 攻击排查
1、攻击者在利用漏洞前通常采用dnslog方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的”javax.naming.CommunicationException”、”javax.naming.NamingException: problem generating object using object factory”、”Error looking up JNDI resource”关键字进行排查。
2、攻击者发送的数据包中可能存在”${jndi:}” 字样,推荐使用全流量或WAF设备进行检索排查。
3.3 产品检测
绿盟科技远程安全评估系统(RSAS)与WEB应用漏洞扫描系统(WVSS)、工控漏洞扫描系统(ICSScan)、网络入侵检测系统(IDS)、综合威胁探针(UTS)已具备对此次漏洞的扫描与检测能力,请有部署以上设备的用户升级至最新版本。
关于RSAS的升级配置指导,请参考如下链接:
https://mp.weixin.qq.com/s/SgOaCZeKrNn-4uR8Yj_C3Q
3.4 申请云检测
绿盟科技面向用户提供远程检测服务,因该漏洞的检测存在一定风险,相关客户如需要申请云检测,请联系销售或项目经理沟通,或用个人的公司邮箱发邮件至rs@nsfocus.com,在正文中提供需要扫描的资产清单,可以扫描的时间,联系方式,服务人员会与您联系。
7x24h客服咨询热线:400-818-6868转2
四、漏洞防护
4.1 官方升级
目前官方已针对上述漏洞发布多个修复版本,不同版本更新内容略有不同,受影响用户可根据不同需求选择对应的版本升级,下载链接:https://github.com/apache/logging-log4j2/tags或https://logging.apache.org/log4j/2.x/download.html
Apache Log4j版本号 | 版本更新说明 |
Apache Log4j 2.15.0-rc1 | 修复LDAP和增加host白名单,手动开启Lookup功能时可被绕过,且受CVE-2021-45046、CVE-2021-45105与CVE-2021-44832影响。 |
Apache Log4j 2.15.0-rc2(2.15.0稳定版) | 增加了对urI异常的处理,进一步修复CVE-2021-44228漏洞,但受CVE-2021-45046、CVE-2021-45105与CVE-2021-44832影响。 |
Apache Log4j 2.15.1-rc1 | 默认配置禁用了JNDI和Message lookups功能,但受CVE-2021-45105与CVE-2021-44832影响。 |
Apache Log4j 2.16.0-rc1(2.16.0稳定版) | 默认配置禁用JNDI功能,并完全移除Message lookups功能,但受CVE-2021-45105与CVE-2021-44832影响。 |
Apache Log4j 2.17.0-rc1(2.17.0稳定版) | 对日志配置中的字符串查找解析进行限制,删除对 LDAP 协议的支持,但受CVE-2021-44832影响。 |
Apache Log4j 2.17.1-rc1 (2.17.1稳定版) | 修复本次的安全漏洞,支持Java 8及以上版本。 |
Apache Log4j 2.12.2-rc1 | 默认配置禁用JNDI功能,并移除Message lookups功能,删除对 LDAP 协议的支持,但受CVE-2021-45105与CVE-2021-44832影响。 |
Apache Log4j 2.12.2稳定版 | 默认配置禁用JNDI功能,并移除Message lookups功能,删除对 LDAP 协议的支持,但受CVE-2021-45105与CVE-2021-44832影响。 |
Apache Log4j 2.12.3-rc1(2.12.3稳定版) | 对日志配置中的字符串查找解析进行限制,删除对 LDAP 协议的支持。但受CVE-2021-44832影响。 |
Apache Log4j 2.12.4-rc1 (2.12.4稳定版) | 修复本次的安全漏洞,支持Java 7版本。 |
Apache Log4j 2.3.1-rc1(2.3.1稳定版) | 修复以上3个漏洞,但受CVE-2021-44832影响。 |
Apache Log4j 2.3.2-rc1(2.3.2稳定版) | 修复本次的安全漏洞,支持Java 6版本。 |
注:
1、建议受影响用户将Apache Log4j所有相关应用升级到Apache Log4j 2.17.1(稳定版)或Apache Log4j 2.17.1-rc1(测试版)。
2、推荐优先选择稳定版升级,Java 7环境的用户可升至Apache Log4j 2.12.4修复,Java 6环境的用户可升至Apache Log4j 2.3.2修复。
3、官方在Apache Log4j 2.15.0-rc1版本中已将log4j2.formatMsgNoLookups默认设置为true,在不手动开启Lookup功能的情况下,Log4j 2.15.0-rc1版本不受CVE-2021-44228漏洞的影响。
4、防止升级过程出现意外,建议相关用户在备份数据后再进行操作。
5、升级供应链中已知受影响的应用及组件:见前文《二、影响范围》的供应链影响范围。
4.2 产品防护
针对上述漏洞,绿盟科技网络入侵防护系统(IPS)、WEB应用防护系统(WAF)与下一代防火墙 (NF)已发布规则升级包,请相关用户升级规则包至最新版,以形成安全产品防护能力。安全防护产品规则版本号如下:
产品规则升级的操作步骤详见如下链接:
IPS:https://mp.weixin.qq.com/s/DxQ3aaap8aujqZf-3VbNJg
WAF:https://mp.weixin.qq.com/s/7F8WCzWsuJ5T2E9e01wNog
NF:https://mp.weixin.qq.com/s/R3k_KJm4O52bxy794jjo4A
若相关用户暂时无法进行升级操作,可先用下列措施对上述漏洞进行临时缓解:
Apache Log4j远程代码执行漏洞(CVE-2021-44228)临时防护:
1、使用下列命令,移除log4j-core包中的JndiLookup 类文件:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
注:此措施适用于除Apache Log4j 2.16.0外任何受影响的2.X版本。
2、添加jvm参数启动:-Dlog4j2.formatMsgNoLookups=true
3、在应用的classpath下添加log4j2.component.properties配置文件,文件内容为:log4j2.formatMsgNoLookups=true
4、设置系统环境变量 LOG4J_FORMAT_MSG_NO_LOOKUPS=true
注:当Apache Log4j >= 2.10版本时,可使用2、3、4的任一措施实现相同效果。
5、对于2.7<= Apache Log4j <= 2.14.1的版本,可在PatternLayout配置中使用%m{nolookups}、%msg{nolookups}、%message{nolookups}对漏洞进行缓解。
6、采用人工方式禁用JNDI,例:在spring.properties中添加spring.jndi.ignore=true
7、建议使用JDK在11.0.1、8u191、7u201、6u211及以上的高版本,可在一定程度上缓解代码执行的利用。
8、限制受影响应用对外访问互联网,并在边界对dnslog相关域名的访问进行检测。
部分公共dnslog平台如下:
ceye.io
dnslog.link
dnslog.cn
dnslog.io
tu4.org
burpcollaborator.net
s0x.cn
Apache Log4j JMSAppender 反序列化代码执行漏洞(CVE-2021-4104)临时防护:
1)注释掉或删除 Log4j 配置中的 JMSAppender。
2)使用下列命令,从log4j jar包中删除 JMSAppender 类文件:
zip -q -d log4j-*.jar org/apache/log4j/net/JMSAppender.class
3)限制系统用户对应用程序平台的访问,以防止攻击者修改 Log4j 的配置。
Apache Log4j 远程代码执行漏洞(CVE-2021-45046)临时防护:
使用下列命令,移除log4j-core包中的JndiLookup 类文件:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
注:此措施适用于除Apache Log4j 2.16.0外任何受影响的2.X版本。
Apache Log4j Dos漏洞(CVE-2021-45105)临时防护:
1)在日志记录配置的 PatternLayout 中,用线程上下文映射模式(%X、%mdc 或 %MDC)替换 ${ctx:loginId} 或 $${ctx:loginId} 等上下文查找。
2)在配置中删除对上下文查找的引用,如 ${ctx:loginId} 或 $${ctx:loginId}。
4.4 平台监测
绿盟安全管理平台(ESP-H)与绿盟智能安全运营平台(ISOP)已经具备针对此漏洞的检测能力,部署有绿盟科技平台类产品的用户,可实现对上述漏洞的平台监测能力。
安全平台 | 升级包/规则版本号 |
ESP-H(绿盟安全管理平台) | 使用最新规则升级包 attack_rule.1.0.0.1.1048748.dat |
ISOP(绿盟智能安全运营平台) | 升级攻击识别规则包至最新 attack_rule.1.0.0.1.1048748.dat |
声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。