Log4jShell漏洞修复分析

log4jShell漏洞修复分析

by HaCo 20211215

LDAP

LIGHTWEIGHT DIRECTORY ACCESS Protocol

轻量级目录访问协议。是在20世纪90年代早期作为标准目录协议进行开发的。它是目前最流行的目录协议,与厂商、具体平台无关。LDAP用统一的方式定义了如何访问目录服务中的内容,比如增加、修改、删除一个条目

JNDI:

JAVA NAMING AND Directory interface

java 命名目录访问接口:java 命名服务和目录服务而提供的统一API。通过命名来访问需要的资源,类似DNS服务,可通过 key-value的形式。

JNDI-LDAP关系

JNDI是Java中用于访问LDAP的API,开发人员使用JNDI完成与LDAP服务器之间的通信,即用JNDI来访问LDAP,而不需要和具体的目录服务产品特性打交道。这样通过LDAP、JNDI两层抽象,使Java程序对目录服务的访问做到了平台无关性。

发展:

  1. Apache Log4j 2.15.0 中针对 CVE-2021-44228 的修复在某些非默认配置中不完整。可能导致恶意数据数据导致DOS攻击。Log4j 2.15.0 将 JNDI LDAP 查找限制为 localhost。
  2. 之前涉及配置的缓解措施(例如将系统属性 log4j2.noFormatMsgLookup 设置为 true)并不能缓解此特定漏洞。

影响范围

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

2.0.x <= log4j <2.16.0 均受影响

目前缓解措施

  1. java7 升级到2.12.2
  2. java8 升级到2.16.0
  3. 删除 log4j-core jar 中删除 JndiLookup 类,会导致程序报错。

具体细节

在 2.12.2 版本中,Log4j 默认禁用对 JNDI 的访问。现在需要显式启用在配置中使用 JNDI。对 JndiLookup 的调用现在将返回一个常量字符串。此外,Log4j 现在默认将协议限制为只有 java。消息查找功能已完全删除。

在 2.16.0 版本中,消息查找功能已完全删除。配置中的查找仍然有效。此外,Log4j 现在默认禁用对 JNDI 的访问。现在需要显式启用配置中的 JNDI 查找。此外,Log4j 现在默认将协议限制为仅 java、ldap 和 ldaps,并将 ldap 协议限制为仅访问 Java 原始对象。需要显式允许本地主机以外的主机。消息查找功能已完全删除。

升级后主要影响

禁用jndi:用到jndi接口的地方(如:${jndi:rmi:/… 、 ${jndi:ldap:… 等 ),支持但不建议开启。

删除messagelookup 影响 : log打印日志时不再支持参数中带${}的查找,直接输出对应字符串

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>