LOG4J JNDI攻击CVE-2021-45105 wso2漏洞

LOG4J JNDI attack CVE-2021-45105 wso2 vulnerability

我目前的项目已完全 docker 化,包含大量 Spring 引导容器。其中大部分是使用 log4j 2+(小于 2.7 for Java 8)版本构建的。如何全面抵御JNDI攻击CVE-2021-45105的应用?

我知道最好的解决方案是使用 log4j 版本重建这些容器,但这需要时间和预算。

但是,如果我使用以下命令在每个容器的 docker 组合级别禁用查找功能,它是否有效?

"JVM_EXTRA_OPTS=-Dlog4j2.formatMsgNoLookups=true"

其次,如果我从 log4j-core jar 'zip -q -d log4j-core-*.jar' 中删除 JndiLookup.class 并重新打包,是否会影响任何现有的日志记录实现?如果是,哪些功能会受到影响?

如果我设置系统 属性 log4j2.formatMsgNoLookups=true,它会起作用吗?我应该在哪里设置此 属性 以停止查找?

注意:我最近被告知我需要 handle/remove“JMSAppender”和“ServerSocket”类 同样来自 log4j-core jar,因为它们也容易受到攻击。

如果我不配置 JMSAppender 和 SocketAppender,那么它们应该不会变得容易受到攻击吧?还是我还需要删除它们?

经过一些互联网搜索,我得到了以下几点,

针对上述问题,为了安全起见,我们需要做到以下几点:

log4j 的临时修复 1.x

  • 检查 Log4j 是否未配置为执行 JNDI 请求

  • 查找包含 JMSAppender.class

    的 JAR 文件

    找到。 2>/dev/null -type f -regextype posix-egrep -iregex '.*.(jar|war)' -exec grep -i JMSAppender.class {} ;

发现于 BOOT-INF/lib/log4j-1.2.17.jar

  • 从已识别的 JAR 文件中删除 JMSAppender.class

    zip -d log4j-1.2.16.jar org/apache/log4j/net/JMSAppender.class

    zip -d log4j-1.2.16.jar org/apache/log4j/net/SocketServer.class

log4j 的临时修复 2.x

  • 查找包含 JndiLookup 和 JndiManager classes

    的 JAR 文件
  • 使用以下命令查找 JAR 文件:

找到。 2>/dev/null -type f -regextype posix-egrep -iregex '.*.(jar|war)' -exec grep -i JndiLookup.class {} ;

找到。 2>/dev/null -type f -regextype posix-egrep -iregex '.*.(jar|war)' -exec grep -i JndiManager.class {} ;

  • 删除包含 JndiLookup 和 JndiManager classes
  • 的 JAR 文件

对于永久修复,

补丁到log4j2.17.0版本,只使用log4j2.17.0+版本

Log4j >=2.15.0 需要 Java8。因此,使用 Java7 的组织可以更新到特殊的安全版本 2.12.3。使用 Java6 的组织可以更新到特殊安全版本 2.3.1。

如果配置使用 JNDI,使用 Log4j 1.x 的应用程序可能会受到影响。 Log4j 1.x 附带 Java 类 如果在 log4j 的配置文件中启用,它将执行 JNDI 查找,包括但不限于 JMSAppender。因此,只要 log4j 1.x 读取 corrupt/malicious 配置文件,已经对应用程序的 log4j 配置文件具有写入权限的攻击者就可以触发 RCE 攻击。如果无法升级,最好的解决方案是删除 JMSAppender class 和其他。

请注意,Log4j 1.x 已达到生命周期的尽头,不再受支持。 2015 年 8 月之后针对 Log4j 1.x 报告的漏洞未被检查,也不会被修复(由 Apache log4j)。用户应升级到最新的 Log4j v2 (>=2.16.0) 以获得安全修复。

对于 Apache log4j 1.2 版本(最高 1.2.17),SocketServer class 容易受到不可信数据反序列化的影响,如果与反序列化小工具结合使用,会导致远程代码执行。

检查是否在log4j的配置文件中启用了JMSAppender和SocketServer(如log4j.properties或log4j.xml)。 检查是否限制了对log4j配置文件的访问。