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配置文件的访问。
我目前的项目已完全 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配置文件的访问。