跳至主要內容

CVE-2026-111497:原生 Brotli 解碼器遠端程式碼執行與記憶體資訊洩漏

公告 ID: 2026-155-AWS
範圍:AWS
內容類型:重要 (需要注意)
發布日期: 2026 年 10 月 28 日下午 3:00 (太平洋夏令時間)
上次更新日期:2026 年 10 月 30 日下午 2:00 (太平洋夏令時間)

描述:

AWS 已知悉 CVE-2026-111497,這是原生 Brotli 解壓縮程式庫中的緩衝區溢位,首先在 Node.js 2026 年 10 月安全性版本中獲得修正。解碼經特殊製作的 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:當您建立或更新函數時 (透過 UpdateFunctionCode 或 UpdateFunctionConfiguration API),Lambda 會套用更新後的執行時期。
         ○ 階段 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 託管運算 (伺服器端轉譯) 應用程式,在底層受管執行時期更新後,將自動接收安全性更新。客戶不需採取任何動作。

如果您的執行時期設定指定早於 22 的 Node.js 版本,我們建議移轉至受支援的 Node.js 版本 (22 或 24),以接收此次及未來的安全性更新。


AWS App Runner

更新後的 App Runner 受管 Node.js 執行時期已於 2026-10-26 部署至所有 AWS 區域。

自 2026-10-26 起尚未部署的服務:請重新部署您的服務一次。下一次部署會採用更新後的執行時期,無需變更組態。

釘選至明確較舊執行時期版本的服務:請先更新執行時期版本釘選,然後重新部署。僅重新部署不會將釘選的服務移至更新後的執行時期。


Amazon CloudWatch Synthetics

Node.js Canary:Node.js Canary 執行時期使用 Lambda 受管執行時期,並會收到上述相同的階段 1 與階段 2 更新。接收自動執行時期更新的 Canary 無需採取任何動作 (目標:2026 年 10 月 30 日)。

Python Selenium Canary:Python Selenium Canary 執行時期包含 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 的 Buildspec:更新後的映像不再包含 Node.js 18 或 20。更新您的 buildspec 以使用 Node.js 22、24 或 26。


AWS Elastic Beanstalk

  • Elastic Beanstalk Node.js 平台版本 6.11.12 已於 2026 年 10 月 22 日發布,此版本包含 Node.js 24.22.1 和 22.23.4。
  • 若要驗證,請在您的建置中執行 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 上執行和管理自己的 Node.js 建置,例如在 Amazon EC2 執行個體上或您自己的 Amazon ECS 或 Amazon EKS 容器中,則您需負責更新這些環境。升級至 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. 使用 Count 動作部署規則。
    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 。