如何缓解 Apache Log4j 反序列化 RCE (CVE-2019-17571)
Posted
技术标签:
【中文标题】如何缓解 Apache Log4j 反序列化 RCE (CVE-2019-17571)【英文标题】:How to mitigate Apache Log4j Deserialization RCE (CVE-2019-17571) 【发布时间】:2022-01-17 14:05:40 【问题描述】:我已将 log4j-core 依赖项升级到 2.15.0,以防止任何潜在的 Log4Shell 攻击。话虽如此,我无法从 1.2.17 升级 slf4j-log4j12 的间接 log4j 依赖项,因为 slf4j-log4j12 的最新稳定版本仍然依赖于 log4j 1.2.17。如果我没记错的话,这仍然让我的 webapp 容易受到CVE-2019-17571 的攻击。因此,在阅读可能的缓解策略时,我遇到了这个article,它建议:
防止 Log4j 中 SocketServer 类启用的套接字端口 从公网开放
谁能向我解释如何实现这一点以及这种解决方法是否足够?
【问题讨论】:
【参考方案1】:只有从其他服务器接收消息的服务器才容易受到CVE-2019-17571
的攻击。基本上触发漏洞的唯一方法就是运行:
java -jar log4j.jar org.apache.log4j.net.SocketServer <port> <config.properties> <log/directory>
或者在代码中做同样的事情。因此,大多数 Log4j 1.2 用户都不容易受到攻击。
但是,在您的情况下,您只需将 slf4j-log4j12
绑定替换为其等效的 Log4j 2.x (log4j-slf4j-impl
),您就可以完全删除 Log4j 1.2。
编辑:不过,如果你想确定没有人会像上面那样使用这个库,你可以删除这个类。还考虑到CVE-2021-4104
这相当于:
zip -d log4j.jar org/apache/log4j/net/SocketServer.class
zip -d log4j.jar org/apache/log4j/net/JMSAppender.class
【讨论】:
你确定这是唯一的方法吗?您是否有任何参考资料可以更深入地解释攻击?谢谢 @robob:附件是一个简单的deserialization attack。基本上,SocketServer
会反序列化它从网络上的每个人那里收到的所有内容。其余 Log4j 类中没有对 SocketServer
的引用,因此除非您明确调用它,否则不会使用它。以上是关于如何缓解 Apache Log4j 反序列化 RCE (CVE-2019-17571)的主要内容,如果未能解决你的问题,请参考以下文章
漏洞情报 | Apache Log4j SocketServer反序列化漏洞(哨兵云支持检测)
Apache Log4j Server 反序列化漏洞(CVE-2017-5645)