简而言之:Debezium 不受最近披露的 log4j2 远程代码执行漏洞 (CVE-2021-44228) 的影响;Debezium 容器镜像中附带的 log4j-1.2.17.jar 包含一个类 JMSAppender,该类存在一个中等程度的漏洞 (CVE-2021-4104)。此 Appender 默认不启用,即需要访问 log4j 的配置才能利用此 CVE。作为预防措施,我们已决定从 1.7.2.Final 版本(今日发布)开始从 Debezium 的容器镜像中移除 JMSAppender 类。
12 月 10 日,一个广泛使用的 log4j2 库中的远程代码执行漏洞被公布 (CVE-2021-44228)。Debezium,就像 Apache Kafka 和 Kafka Connect 一样,不使用 log4j2,因此不受此 CVE 的影响。
Apache Kafka、Kafka Connect 和 Apache ZooKeeper 确实使用了 log4j 1.x,因此它被包含在 Debezium 的容器镜像 中,用于这些组件。12 月 13 日,log4j 1.x 中一项中等严重程度的漏洞被公开 (CVE-2021-4104),影响了 log4j 1.x 自带的 JMSAppender 类。该漏洞“允许远程攻击者在已部署的应用程序配置为使用 JMSAppender 并连接到攻击者的 JMS Broker 时,在服务器上执行代码”。
此 appender 默认情况下不使用,即“此漏洞仅影响那些被特别配置为使用 JMSAppender 的应用程序,而这并非默认设置,或者攻击者拥有对 Log4j 配置的写权限,可以向攻击者的 JMS Broker 添加 JMSAppender”。如果您正在使用 JMSAppender,您应该验证并确保为它的 TopicBindingName 和 TopicConnectionFactoryBindingName 设置使用可信的配置值。
在 Apache Kafka 的上下文中,很少(如果存在的话)会使用基于 JMS 的 appender。作为一种预防措施,我们因此决定从 Debezium 的 Apache Kafka、Kafka Connect 和 Apache ZooKeeper 容器镜像中包含的 log4j-1.2.17.jar JAR 文件中移除 JMSAppender 类。同时,我们还将从 log4j-1.2.17.jar 中移除 SocketServer 类,该类受另一个不相关的 CVE (CVE-2019-17571) 的影响。这是一个独立的 main 类,Debezium、Kafka、Kafka Connect 或 ZooKeeper 均不以任何方式使用它,但我们决定不再分发它,因此 Debezium 的容器镜像也不会受到此 CVE 的影响。
请注意,如果您通过其他 Apache Kafka 发行版及相关组件运行 Debezium 连接器,它们的 log4j-1.2.17.jar 中可能存在 JMSAppender 和 SocketServer 类,因此您应确保要么完全不使用它们,要么只以安全的方式使用它们。应以适当的方式保护对 log4j 配置的访问。
Debezium 的其他分发包,如单独的连接器归档文件,或 Debezium Server 分发包,不包含 log4j-1.2.17.jar,因此不受上述 CVE 的任何影响。
从 Debezium 容器镜像中分发的 log4j-1.2.17.jar 中移除 JMSAppender 和 SocketServer 类,自今天早些时候发布的 Debezium 1.7.2.Final 版本起生效。我们建议所有用户更新到此版本。
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。