Log4jShell漏洞修复分析

Posted Ha_Co

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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打印日志时不再支持参数中带$的查找,直接输出对应字符串

以上是关于Log4jShell漏洞修复分析的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp session漏洞的修复解决办法(附代码分析与检测)

网站漏洞修复之vim文本编辑BUG分析与修复方案

nginx漏洞分析与升级修复

汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码

静态代码检测工具Wukong对log4J中的漏洞检测分析及漏洞修复

怎么修复网站漏洞 骑士cms的漏洞修复方案