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程序对目录服务的访问做到了平台无关性。
发展:
- Apache Log4j 2.15.0 中针对 CVE-2021-44228 的修复在某些非默认配置中不完整。可能导致恶意数据数据导致DOS攻击。Log4j 2.15.0 将 JNDI LDAP 查找限制为 localhost。
- 之前涉及配置的缓解措施(例如将系统属性 log4j2.noFormatMsgLookup 设置为 true)并不能缓解此特定漏洞。
影响范围
只有 log4j-core JAR 文件受此漏洞影响。仅使用 log4j-api JAR 文件而不使用 log4j-core JAR 文件的应用程序不受此漏洞的影响。
2.0.x <= log4j <2.16.0 均受影响
目前缓解措施
- java7 升级到2.12.2
- java8 升级到2.16.0
- 删除 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漏洞的修复解决办法(附代码分析与检测)
汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码