缓解 CVE-2021-44228 的方法 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

缓解 CVE-2021-44228 的方法

注意

对于 Amazon EMR 发行版 6.9.0 及更高版本,Amazon EMR 安装的所有使用 Log4j 库的组件都使用 Log4j 版本 2.17.1 或更高版本。

在 EC2 上运行的 Amazon EMR

CVE-2021-44228 中讨论的问题在处理来自不可信来源的输入时,与 2.0.0 到 2.14.1 之间的 Apache Log4j 核心版本相关。随 Amazon EMR 5.x 发行版(最高 5.34.0)和 EMR 6.x 发行版(最高 Amazon EMR 6.5.0)一起启动的 Amazon EMR 集群包括开源框架,例如 Apache Hive、Flink、HUDI、Presto 和 Trino,均使用这些版本的 Apache Log4j。但是,有许多客户使用安装在其 Amazon EMR 集群上的开源框架来处理和记录来自不可信来源的输入。

我们建议您按照下节所述,应用“适用于 Log4j CVE-2021-44228 的 Amazon EMR 引导操作解决方案”。此解决方案还解决了 CVE-2021-45046 问题。

注意

Amazon EMR 的引导操作脚本已于 2022 年 9 月 7 日更新,包括对 Oozie 的增量错误修复和改进。如果您使用 Oozie,则按照下节所述,应用更新后的 Amazon EMR 引导操作解决方案。

Amazon EMR on EKS

如果您使用默认配置的 Amazon EMR on EKS,则不会受到 CVE-2021-44228 中所述问题的影响,也不必应用 适用于 Log4j CVE-2021-44228 和 CVE-2021-45046 的 Amazon EMR 引导操作解决方案 部分中所述的解决方案。对于 Amazon EMR on EKS,适用于 Spark 的 Amazon EMR 运行时使用 Apache Log4j 版本 1.2.17。使用 Amazon EMR on EKS 时,不得将 log4j.appender 组件的默认设置更改为 log

适用于 Log4j CVE-2021-44228 和 CVE-2021-45046 的 Amazon EMR 引导操作解决方案

此解决方案提供了必须在 Amazon EMR 集群上应用的 Amazon EMR 引导操作。对于每个 Amazon EMR 发行版,您都会在下面找到一个指向引导操作脚本的链接。要应用此引导操作,您应完成以下步骤:

  1. 将与 Amazon EMR 发行版对应的脚本复制到 Amazon Web Services 账户 中的本地 S3 存储桶。请确保您使用的是 Amazon EMR 发行版特定的引导脚本。

  2. 为 EMR 集群设置引导操作,以按照 EMR 文档中所述的说明运行复制到 S3 存储桶的脚本。如果您为 EMR 集群配置了其他引导操作,请确保将此脚本设置为要执行的第一个引导操作脚本。

  3. 终止现有的 EMR 集群,然后使用引导操作脚本启动新集群。Amazon 建议您在测试环境中测试引导脚本并验证应用程序,然后再将其应用程序应用于生产环境。如果您没有为 EMR 次要版本(例如 6.3.0)使用最新版本,则必须使用最新版本(例如 6.3.1),然后应用上面讨论的解决方案。

CVE-2021-44228 和 CVE-2021-45046 - EMR 版本的引导脚本
Amazon EMR 发行版 脚本位置 脚本发布日期
6.5.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.5.0-v2.sh
2022 年 3 月 24 日
6.4.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.4.0-v2.sh
2022 年 3 月 24 日
6.3.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.3.1-v2.sh
2022 年 3 月 24 日
6.2.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.2.1-v2.sh
2022 年 3 月 24 日
6.1.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.1.1-v2.sh
2021 年 12 月 14 日
6.0.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.0.1-v2.sh
2021 年 12 月 14 日
5.34.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.34.0-v2.sh
2021 年 12 月 12 日
5.33.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.33.1-v2.sh
2021 年 12 月 12 日
5.32.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.32.1-v2.sh
2021 年 12 月 13 日
5.31.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.31.1-v2.sh
2021 年 12 月 13 日
5.30.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.30.2-v2.sh
2021 年 12 月 14 日
5.29.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.29.0-v2.sh
2021 年 12 月 14 日
5.28.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.28.1-v2.sh
2021 年 12 月 15 日
5.27.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.27.1-v2.sh
2021 年 12 月 15 日
5.26.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.26.0-v2.sh
2021 年 12 月 15 日
5.25.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.25.0-v2.sh
2021 年 12 月 15 日
5.24.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.24.1-v2.sh
2021 年 12 月 15 日
5.23.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.23.1-v2.sh
2021 年 12 月 15 日
5.22.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.22.0-v2.sh
2021 年 12 月 15 日
5.21.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.21.2-v2.sh
2021 年 12 月 15 日
5.20.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.20.1-v2.sh
2021 年 12 月 15 日
5.19.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.19.1-v2.sh
2021 年 12 月 15 日
5.18.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.18.1-v2.sh
2021 年 12 月 15 日
5.17.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.17.2-v2.sh
2021 年 12 月 15 日
5.16.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.16.1-v2.sh
2021 年 12 月 15 日
5.15.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.15.1-v2.sh
2021 年 12 月 15 日
5.14.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.14.2-v2.sh
2021 年 12 月 15 日
5.13.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.13.1-v2.sh
2021 年 12 月 15 日
5.12.3
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.12.3-v2.sh
2021 年 12 月 15 日
5.11.4
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.11.4-v2.sh
2021 年 12 月 15 日
5.10.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.10.1-v2.sh
2021 年 12 月 15 日
5.9.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.9.1-v2.sh
2021 年 12 月 15 日
5.8.3
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.8.3-v2.sh
2021 年 12 月 15 日
5.7.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.7.1-v2.sh
2021 年 12 月 15 日
EMR 发布版本 截至 2021 年 12 月的最新修订
6.3.0 6.3.1
6.2.0 6.2.1
6.1.0 6.1.1
6.0.0 6.0.1
5.33.0 5.33.1
5.32.0 5.32.1
5.31.0 5.31.1
5.30.0 或 5.30.1 5.30.2
5.28.0 5.28.1
5.27.0 5.27.1
5.24.0 5.24.1
5.23.0 5.23.1
5.21.0 或 5.21.1 5.21.2
5.20.0 5.20.1
5.19.0 5.19.1
5.18.0 5.18.1
5.17.0 或 5.17.1 5.17.2
5.16.0 5.16.1
5.15.0 5.15.1
5.14.0 或 5.14.1 5.14.2
5.13.0 5.13.1
5.12.0、5.12.1、5.12.2 5.12.3
5.11.0、5.11.1、5.11.2、5.11.3 5.11.4
5.9.0 5.9.1
5.8.0、5.8.1、5.8.2 5.8.3
5.7.0 5.7.1

常见问题

  • EMR 5 之前的 EMR 版本是否受到 CVE-2021-44228 的影响

    否。EMR 版本 5 之前的 EMR 版本使用 2.0 之前的 Log4j 版本。

  • 此解决方案是否解决了 CVE-2021-45046 的问题?

    此解决方案还解决了 CVE-2021-45046 问题。

  • 该解决方案是否处理了我在 EMR 集群上安装的自定义应用程序?

    引导脚本仅更新 EMR 安装的 JAR 文件。如果您通过使用自定义 Amazon Linux AMI 或通过任何其他机制,通过引导操作在您的 EMR 集群上安装自定义应用程序和 JAR 文件并将其作为提交至集群的步骤运行,请与您的应用程序提供商合作,以确定您的自定义应用程序是否受 CVE-2021- 44228 影响,并确定合适的解决方案。

  • 我应该如何使用 EKS 上的 EMR 处理自定义 Docker 映像

    如果您使用自定义 Docker 映像将自定义应用程序添加到 EKS 上的 Amazon EMR 或者使用自定义应用程序文件将任务提交到 EKS 上的 Amazon EMR,请与应用程序供应商合作,以确定您的自定义应用程序是否受到 CVE-2021-44228 的影响,并确定合适的解决方案。

  • 引导脚本如何缓解 CVE-2021-44228 和 CVE-2021-45046 中描述的问题?

    引导脚本通过添加一组新的指令来更新 EMR 启动指令。这些新指令删除了 EMR 安装的所有开源框架通过 Log4j 使用的 JndiLookup 类文件。这遵循了 Apache 发布的用于解决 Log4j 问题的建议。

  • 使用 Log4j 版本 2.17.1 或更高版本的 EMR 是否有更新?

    不超过版本 5.34 的 EMR 5 发行版以及不超过版本 6.5 的 EMR 6 发行版使用不兼容最新版本 Log4j 的较旧版本开源框架。如果您继续使用这些发行版,我们建议您应用引导操作来缓解 CVE 中讨论的问题。在 EMR 5 发行版 5.34 和 EMR 6 发行版 6.5 以后,使用 log4J 1.x 和 log4J 2.x 的应用程序将分别升级为使用 log4J 1.2.17(或更高版本)和 log4J 2.17.1(或更高版本),并且不需要使用上面介绍的引导操作来缓解 CVE 问题。

  • EMR 版本是否受到 CVE-2021-45105 的影响?

    由 Amazon EMR 安装的具有 EMR 默认配置的应用程序不受 CVE-2021-45105 的影响。在 Amazon EMR 安装的应用程序中,只有 Apache Hive 将 Apache Log4j 与上下文查找结合使用,而且它不会以允许处理不适当的输入数据的方式使用非默认模式布局。

  • Amazon EMR 是否受以下任何 CVE 披露的影响?

    下表包含了与 Log4J 相关的 CVE 列表,并说明了每个 CVE 是否影响 Amazon EMR。此表中的信息仅适用于 Amazon EMR 使用原定设置配置安装应用程序的情形。

    CVE 对 EMR 的影响 注意
    CVE-2022-23302 Amazon EMR 不会设置 Log4j JMSSink
    CVE-2022-23305 Amazon EMR 不会设置 Log4j JDBCAppender
    CVE-2022-23307 Amazon EMR 不会设置 Log4j Chainsaw
    CVE-2020-9493 Amazon EMR 不会设置 Log4j Chainsaw
    CVE-2021-44832 Amazon EMR 不会使用 JNDI 连接字符串设置 Log4j JDBCAppender
    CVE-2021-4104 Amazon EMR 不会使用 Log4j JMSAppender
    CVE-2020-9488 Amazon EMR 安装的应用程序不会使用 Log4j SMTPAppender
    CVE-2019-17571 Amazon EMR 会阻止对集群的公有访问权限且不会启动 SocketServer
    CVE-2019-17531 建议您升级到最新的 Amazon EMR 版本。Amazon EMR 5.33.0 及更高版本使用 jackson-databind 2.6.7.4 或更高版本,EMR 6.1.0 及更高版本使用 jackson-databind 2.10.0 或更高版本。这些版本的 jackson-databind 不受此 CVE 的影响。