如何缓解 Apache Log4j 反序列化 RCE (CVE-2019-17571)

How to mitigate Apache Log4j Deserialization RCE (CVE-2019-17571)

我已将我的 log4j-core 依赖项升级到 2.15.0 以防止任何潜在的 Log4Shell 攻击。也就是说,我无法从 1.2.17 升级 slf4j-log4j12 的间接 log4j 依赖项,因为 slf4j-log4j12 的最新稳定版本仍然依赖于 log4j 1.2.17。这仍然使我的 webapp 容易受到 CVE-2019-17571 if I am not mistaken. So reading about possible mitigation strategies I came across this article 的影响,建议:

prevent the socket port enabled by the SocketServer class in Log4j from being opened to the public network

任何人都可以向我解释如何实现这一点以及这种解决方法是否足够?

只有从其他服务器接收消息的服务器才容易受到 CVE-2019-17571 的攻击。基本上触发漏洞的唯一方法是 运行:

java -jar log4j.jar org.apache.log4j.net.SocketServer <port> <config.properties> <log/directory>

或在代码中做同样的事情。因此,大多数 Log4j 1.2 用户不易受到攻击。

然而,在你的情况下,你只需要替换 slf4j-log4j12 binding with its Log4j 2.x equivalent (log4j-slf4j-impl) 并且你可以完全删除 Log4j 1.2。

编辑:不过,如果你想确定没有人会使用上面的库,你可以删除class。还考虑 CVE-2021-4104 这相当于:

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