跳至主要内容

CVE-2026-111497:原生 Brotli 解码器远程代码执行和内存泄露

公告 ID: 2026-155-AWS
范围:AWS
内容类型:重要提示(需要注意)
发布日期: 2026 年 10 月 28 日下午 3:00(太平洋夏令时)
上次更新日期:2026 年 10 月 30 日下午 2:00(太平洋夏令时)

描述:

AWS 已经知悉 CVE-2026-111497,即原生 Brotli 解压缩库中的缓冲区溢出问题。此问题已在 2026 年 10 月的 Node.js 安全版本中首次得到解决。通过解码特别构建的 Brotli 压缩输入,第三方能够在受影响的应用程序中运行代码或读取进程内存。该问题会影响在 Node.js 之外的 Brotli 解码,其他供应商的修复方案尚未完全可用。

受影响 AWS 服务的信息如下。如果有更多信息,我们将更新此公告。

当前缓解状态:

AWS Lambda

AWS Lambda 托管式服务不受影响。适用于 .NET 和 Node.js 的 Lambda 运行时会受此问题影响。

适用于 Python、Ruby 和 OS-only provided.al2023 的 Lambda 运行时不含 Brotli 库。在这种情况下,如果您在自己的函数部署中包含了 Brotli 库,我们建议使用修补后的版本重新部署。

  • 各运行时的状态:
    – Node.js 22、24、26 – 容器基础映像:已更新。请立即重建并重新部署。– ZIP 压缩包,第 1 阶段和第 2 阶段已完成。
    – .NET 8、9(仅限容器)、10 – 容器基础映像:已更新 – ZIP 压缩包,第 1 阶段和第 2 阶段已完成。
  • Node.js:
    – Node.js 24:由于 Node.js 24.22.1 版本中的一个已知回归问题,我们最初对当前稳定版本进行了针对性更新,而不是迁移到最新 Node.js 版本。该回归问题现已在 24.22.2 版本中修复。我们即将发布此版本,第 1 阶段已经完成,第 2 阶段预计于 2026 年 10 月 31 日完成。
  • 请注意,包括 Node.js 18 和 20 在内的已弃用运行时不会收到安全更新。我们建议客户更新到新版本。
  • 应用更新:
    – 容器映像:更新后的基础映像发布后,使用最新基础映像重建并重新部署容器映像函数。
    – ZIP 压缩包:托管式运行时更新将分两个阶段推出:
       ○ 第 1 阶段:Lambda 会在您创建或更新函数时(通过 UpdateFunctionCode 或 UpdateFunctionConfiguration API)应用更新后的运行时
         ○ 第 2 阶段:Lambda 会使用自动运行时更新模式自动更新尚未收到更新的函数

这些阶段将在各 AWS 区域分批次实施。我们正在加快常规的发布流程,因此无法预测何时会完成在具体区域的部署。

第 1 阶段完成后,您可以通过更新函数代码或配置来获取修补后的运行时版本。零更改更新不足以解决问题。触发更改的一种简单方法是添加环境变量。以下 bash 脚本使用 AWS CLI 来添加或更新 TRIGGER_RUNTIME_UPDATE 环境变量,同时保留现有的环境变量。

# 1. 设置函数名称
FUNCTION_NAME="my-function"

# 2. 将当前环境变量读入 JSON 字符串
CURRENT_VARS=$(aws lambda get-function-configuration \
--function-name "$FUNCTION_NAME" \
--query "Environment.Variables" \
--output json)

# 3. 合并到新变量中
MERGED=$(echo "$CURRENT_VARS" \
| jq '
if . == null then {} else . end
| if .TRIGGER_RUNTIME_UPDATE then
.TRIGGER_RUNTIME_UPDATE = ((.TRIGGER_RUNTIME_UPDATE | tonumber) + 1 | tostring)
else
.TRIGGER_RUNTIME_UPDATE = "1"
end
')

# 4. 更新函数配置
aws lambda update-function-configuration \
--function-name "$FUNCTION_NAME" \
--environment "{\"Variables\": $MERGED}"
  • 如何验证函数是否已更新: 运行时补丁版本会在函数日志的 INIT_START 行中报告。此行在每个执行环境冷启动时发出,通常会出现在每个日志流的顶部。对于 Node.js,请查找 nodejs:22.mainline.v157 或更高版本(Node.js 22)或 nodejs:24.mainline.v114 或更高版本(Node.js 24)。process.version 属性不会反映 Node.js 24 的更新。对于 .NET,请查找 dotnet:8.mainline.v165 或更高版本(.NET 8)或 otnet:10.mainline.v113 或更高版本(.NET 10)。


AWS Amplify

底层托管式运行时更新后,在 Node.js 22 和 Node.js 24 上运行的 AWS Amplify Hosting 计算(服务器端渲染)应用程序将会自动收到安全更新。无需客户操作。

如果您的运行时配置指定的 Node.js 版本早于 22,我们建议迁移到受支持的 Node.js 版本(22 或 24)以接收此更新和未来的安全更新。


AWS App Runner

更新后的 App Runner 托管式 Node.js 运行时已于 2026 年 10 月 26 日部署到所有 AWS 区域。

自 2026 年 10 月 26 日以来尚未部署的服务:请重新部署服务一次。下一次部署将会使用更新后的运行时,且不会更改配置。

已显式固定到较早运行时版本的服务:首先更新运行时版本固定设置,然后重新部署服务。仅进行重新部署不会将已固定的服务迁移至更新后的运行时。


Amazon CloudWatch Synthetics

Node.js 金丝雀:Node.js 金丝雀运行时使用 Lambda 托管式运行时并且会收到与上述相同的第 1 阶段和第 2 阶段更新。对于会接收自动运行时更新的金丝雀(目标日期:2026 年 10 月 30 日),无需执行任何操作。

Python Selenium 金丝雀:Python Selenium 金丝雀运行时包含 Brotli 库。正在进行更新。我们将在修补后的运行时版本可用时更新此公告并说明需要的任何客户操作。


AWS CodeBuild

  • 正在部署更新后的 CodeBuild 精选映像。目标完成日期:2026 年 10 月 30 日。更新后的映像包括 Node.js 22.23.4、24.22.1 和 26.12.1;Ubuntu libbrotli1 1.0.9-2ubuntu0.1/1.1.0-2ubuntu0.1;以及 Amazon Linux 2023 brotli 1.1.0-1.amzn2023.0.2。
  • 使用选中“始终使用最新映像”的最新标签的精选映像,以及按需 AMI 构建:无需执行任何操作。您下一次构建时会使用更新后的映像。
  • 固定到特定版本或摘要的精选映像:请将引用更新至更新后的映像。
  • 使用 CodeBuild 精选基础映像构建的自定义映像:请使用更新后的基础映像重建映像。
  • 选择 Node.js 18 或 20 的构建规范:更新后的映像将不再包含 Node.js 18 或 20。请更新构建规范以使用 Node.js 22、24 或 26。


AWS Elastic Beanstalk

  • Elastic Beanstalk Node.js 平台版本 6.11.12(包括 Node.js 24.22.1 和 22.23.4)已于 2026 年 10 月 22 日发布。
  • 要进行验证,请在构建中运行 node --version, dpkg-query -W libbrotli1 (Ubuntu) 或 rpm -q brotli(Amazon Linux 2023)。
  • 已启用托管平台更新的环境:您的环境将在下一次每周维护时段内更新为修复后的平台版本。要提前更新,请在 Elastic Beanstalk 控制台的“托管更新”选项卡中应用更新。
  • 所有其他环境:请将您的环境更新至平台版本 6.11.12 或更高版本。
  • 基于 Node.js 18 或 20 的环境:请迁移到受支持的 Node.js 平台分支。

要进行验证,请在您的环境实例上运行 node --version。


AWS Elemental MediaLive

  • AWS 正在更新一个包含受影响库的 AWS 托管式 MediaLive 组件。无需客户操作


客户自行管理的 Node.js 环境

如果您在 AWS 上(例如在 Amazon EC2 实例上或者在 Amazon ECS 或 Amazon EKS 上的自有容器中)运行和管理自己的 Node.js 构建,则您需要自行负责这些环境的更新。请升级到 Node.js 22.23.4、24.22.1、26.12.1 或更高版本。由于此问题涉及解码 Brotli 的其他语言和应用程序,因此还要检查您的库和应用程序是否将 Brotli 解码作为依赖项包含在内。

使用 AWS WAF 进行缓解

如果无法立即更新,则可以使用 AWS WAF 部署自定义规则来阻止使用 Brotli 内容编码(Content-Encoding: br 标头)的入站请求。在部署之前,请注意:

  • AWS WAF 仅会检查入站请求。此控制措施不涉及来自其他来源的 Brotli 数据,例如来自上游服务的响应。
  • 阻止 Brotli 编码的请求会阻止所有上传到应用程序的 Brotli 编码内容,包括正常流量。
  • 该规则仅是一个示例,可能无法匹配每个 Brotli 编码的请求。 
  • 推荐的部署步骤:
    1. 部署具有计数操作的规则。
    2. 在 Amazon CloudWatch 指标和抽样请求中检查匹配的请求。
    3. 确认该规则不影响正常流量时,将操作更改为“阻止”。要执行此操作,请替换"Count": {} with "Block": {}。
    4. 设置规则优先级以符合您现有的规则顺序。

示例 AWS WAF 规则:

{

  "Name": "Node2Shell_BROTLI",

  "Priority": 2,

  "Statement": {

    "RegexMatchStatement": {

      "RegexString": "^\\s*br\\s*$",

      "FieldToMatch": { "SingleHeader": { "Name": "content-encoding" } },

      "TextTransformations": [ { "Priority": 0, "Type": "LOWERCASE" } ]

    }

  },

  "Action": { "Count": {} },

  "RuleLabels": [ { "Name": "Node2Shell_Brotli" } ],

  "VisibilityConfig": {

    "SampledRequestsEnabled": true,

    "CloudWatchMetricsEnabled": true,

    "MetricName": "Node2Shell_BROTLI"

  }

}

 
 

要切换到阻止,请替换 "Count": {} with "Block": {}。

AWS 托管规则更新会通过 AWS WAF 托管规则组 SNS 通知和 AWS WAF 开发人员指南公告。

建议的操作

  • 将生命周期已终止的 Node.js 版本(包括 Node.js 18 和 20)上的工作负载迁移到受支持的版本。
  • 对于客户自行管理的环境,在补丁管理过程中升级到修复后的 Node.js 版本。
  • 检查您的代码、依赖项或层是否包含自己的 Brotli 库,并在修复可用时对其进行更新。如果尚无适用于受影响库或应用程序的补丁,请在补丁发布前禁用 Brotli 解码。

参考:


如有任何安全问题或疑虑,请发送电子邮件至 aws-security@amazon.com 。