Apache Log4j 2 远程代码执行漏洞 ( CVE-2021-44228 )

Microsoft 继续分析2021 年 12 月 9 日披露的与 Apache Log4j(许多基于 Java 的应用程序中使用的日志记录工具)相关的远程代码执行漏洞 ( CVE-2021-44228 )​。该漏洞是一种远程代码执行漏洞,可以让未经身份验证的攻击者获得对目标系统的完全访问权限。当易受攻击的 Log4j 2 组件解析和处理特制字符串时,可以触发它。这可能通过任何用户提供的输入发生。

该漏洞编号为CVE-2021-44228,称为“Log4Shell”,影响使用 Log4j 2 版本 2.0 到 2.14.1 的基于 Java 的应用程序。Log4j 2是一个基于Java的日志库,广泛用于业务系统开发,包含在各种开源库中,直接嵌入到各大软件应用中。影响范围已扩展到数千种产品和设备,包括 Struts 2、Solr、Druid、Flink 和 Swift 等 Apache 产品。由于此漏洞位于 Java 库中,因此 Java 的跨平台特性意味着该漏洞可在许多平台上利用,包括 Windows 和 Linux。由于许多基于 Java 的应用程序可以利用 Log4j 2,因此组织应联系应用程序供应商或确保其 Java 应用程序运行的是最新版本。

微软针对 CVE-2021-44228​给出的解决方法:

应用最新的安全更新

为了解决此漏洞,Microsoft 建议客户应用最新的安全更新来修复此漏洞。请查看 Apache CVE 和 Apache 安全公告以获取更多详细信息:

  • Apache CVE:CVE-2021-44228
  • Apache 安全公告:Apache Log4j 安全漏洞

所有系统,包括那些不面向客户的系统,都可能容易受到这种攻击,因此后端系统和微服务也应该升级。推荐的操作是将 Log4j 2 更新到 2.15.0。将需要重新启动服务。

变通解决方法

为了帮助降低此漏洞的风险,直到可以应用更完整的安全更新,客户应考虑以下缓解步骤。这些更改需要重启服务才能生效。这些变通办法不应被视为解决此漏洞的完整解决方案:

  • 如果无法更新 Log4j 2 易受攻击的组件,Log4J 2 版本 2.10 到 2.14.1 支持将参数 log4j2.formatMsgNoLookups 设置为“true”,以禁用易受攻击的功能。确保在 Java 虚拟机的启动脚本中配置了此参数: 
    -Dlog4j2.formatMsgNoLookups=true。
  • 或者,使用 Log4j 2.10 到 2.14.1 的客户可以设置 LOG4J_FORMAT_MSG_NO_LOOKUPS="true" 环境变量来强制进行此更改。
  • Kubernetes 管理员可以使用“kubectl set env”来设置 LOG4J_FORMAT_MSG_NO_LOOKUPS=”true” 环境变量,以在 Java 应用程序运行 Log4j 2.10 到 2.14.1 的 Kubernetes 集群中应用缓解措施,有效地自动反映所有 pod 和容器。
  • 对于从 2.0-beta9 到 2.10.0 的版本,缓解措施是从类路径中删除 JndiLookup 类: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

Apache Log4j 2 官方解释:安全漏洞CVE-2021-44228


The Log4j team has been made aware of a security vulnerability, CVE-2021-44228, that has been addressed in Log4j 2.15.0.

Log4j团队已意识到一个安全漏洞CVE-2021-44228,该漏洞已在Log4j 2.15.0 中解决。


Log4j’s JNDI support has not restricted what names could be resolved. Some protocols are unsafe or can allow remote code execution. Log4j now limits the protocols by default to only java, ldap, and ldaps and limits the ldap protocols to only accessing Java primitive objects by default served on the local host.

Log4j的JNDI支持并没有限制可以解析的名称。某些协议不安全或允许远程代码执行。Log4j现在默认情况下仅将协议限制为java、ldap和ldap,并将ldap协议限制为仅访问本地主机上提供的java基本对象。


One vector that allowed exposure to this vulnerability was Log4j’s allowance of Lookups to appear in log messages. As of Log4j 2.15.0 this feature is now disabled by default. While an option has been provided to enable Lookups in this fashion, users are strongly discouraged from enabling it.

允许暴露此漏洞的一个向量是Log4j允许在日志消息中出现查找。从Log4j 2.15.0开始。默认情况下,此功能现在已禁用。虽然提供了一个选项来以这种方式启用查找,但强烈建议用户不要启用它。


For those who cannot upgrade to 2.15.0, in releases >=2.10, this vulnerability can be mitigated by setting either the system property log4j2.formatMsgNoLookups or the environment variable LOG4J_FORMAT_MSG_NO_LOOKUPS to true. For releases from 2.7 through 2.14.1 all PatternLayout patterns can be modified to specify the message converter as %m{nnolookups} instead of just %m. For releases from 2.0-beta9 to 2.10.0, the mitigation is to remove the JndiLookup class from the classpath:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

对于无法升级到2.15.0的用户。在版本>=2.10时,可以通过设置系统属性log4j2来缓解此漏洞。formatMsgNoLookups或环境变量LOG4J_FORMAT_MSG_NO_LOOKUPS为true。对于从2.7到2.14.1的版本。对于从2.0-beta9到2.10.0的版本,可以修改所有PatternLayout模式,将消息转换器指定为%m{nnolookups},而不是仅指定为%m。缓解措施是从类路径中删除JndiLookup类:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class。

参考文献:Log4j – Apache Log4j 2              Microsoft’s Response to CVE-2021-44228 Apache Log4j 2 – Microsoft Security Response Center

你可能感兴趣的:(中小企业省心开发经验,系统开发,服务器运维,java,Log4j,log4net,远程代码执行漏洞,CVE-2021-44228)