简而言之: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,您应该验证并确保为它的 TopicBindingNameTopicConnectionFactoryBindingName 设置使用可信的配置值。

在 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 中可能存在 JMSAppenderSocketServer 类,因此您应确保要么完全不使用它们,要么只以安全的方式使用它们。应以适当的方式保护对 log4j 配置的访问。

Debezium 的其他分发包,如单独的连接器归档文件,或 Debezium Server 分发包,不包含 log4j-1.2.17.jar,因此不受上述 CVE 的任何影响。

从 Debezium 容器镜像中分发的 log4j-1.2.17.jar 中移除 JMSAppenderSocketServer 类,自今天早些时候发布的 Debezium 1.7.2.Final 版本起生效。我们建议所有用户更新到此版本。

如果您对此话题有任何疑问,请加入 Debezium 邮件列表上的此讨论串进行讨论。如果您对 Debezium 有任何其他与安全相关的问题,请不要公开讨论,而是在我们的bug 跟踪器中创建一个有限可见性的 Jira 问题,我们将尽快与您跟进。

Gunnar Morling

Gunnar 是一位软件工程师,内心是一个开源爱好者,目前在 Confluent 担任技术专家。此前,他曾帮助构建一个基于 Apache Flink 的实时流处理平台,并领导了 Debezium 项目,这是一个用于变更数据捕获的分布式平台。他是 Java Champion,并创立了多个开源项目,如 JfrUnit、kcctl 和 MapStruct。Gunnar 是一位热情的博主 (morling.dev),并曾在 QCon、Java One 和 Devoxx 等各种会议上发表演讲。他居住在德国汉堡。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×