【CVE-2026-42945】NGINX の ヒープバッファオーバーフロー脆弱性の解説と対応方法

CVE・脆弱性情報

⚠️ 概要

CVSSスコア 9.2・緊急対応が必要です。

NGINX の rewrite モジュール(ngx_http_rewrite_module)に、18年以上前から存在していたヒープバッファオーバーフロー脆弱性(CVE-2026-42945)が公開されました。
認証不要で攻撃可能であり、PoC(概念実証コード)もすでに公開されています。
実際の攻撃への悪用も報告されており、早急なパッチ適用が求められます。


この脆弱性について

項目 内容
CVE-ID CVE-2026-42945
CVSSスコア 9.2(Critical)
対象ソフトウェア NGINX Open Source 1.0.0〜1.30.0、NGINX Plus R32〜R36
影響を受けるコンポーネント ngx_http_rewrite_module、NGINX Ingress Controller、NGINX Gateway Fabric、NGINX App Protect WAF
公開日 2026年5月14日
PoC公開 あり(GitHub)
実被害報告 あり

原因

この脆弱性の根本原因は、ngx_http_rewrite_module における PCRE の無名キャプチャグループの不適切な処理 にあります。

NGINX の rewrite ディレクティブでは、正規表現のマッチ結果を $1$2 などの変数で参照できます。
これらは「無名キャプチャグループ(unnamed captures)」と呼ばれます。
問題は、このキャプチャグループの処理と、置換文字列にクエスチョンマーク(?)を含む場合の組み合わせにあります。

内部のスクリプトエンジンがキャプチャ数の計算に誤りを生じさせ、ヒープ上に確保されたバッファを超えて書き込みが発生します。
これにより、ヒープメモリが破壊され、ワーカープロセスのクラッシュや、条件が揃った場合にはリモートコード実行が引き起こされます。

Orca Security の研究チームが実証したところによると、349バイトのパディングと2,000文字のURIエスケープ可能文字(+ など)を組み合わせた単一のHTTP GETリクエストで、4,000バイトのヒープオーバーフローを確定的に引き起こせることが確認されています。


影響範囲

影響を受ける環境

  • NGINX Open Source 1.0.0〜1.30.0 を利用しているすべてのサーバー
  • NGINX Plus R32〜R36 を利用しているすべてのサーバー
  • 上記バージョンの NGINX を使用する NGINX Ingress Controller(Kubernetes 環境含む)
  • NGINX Gateway Fabric
  • NGINX App Protect WAF および関連 DoS 防御製品

攻撃が成立する条件

以下のような設定が NGINX の設定ファイル内に存在する場合に脆弱です。

# 無名キャプチャグループ ($1, $2 等) と rewrite/if/set ディレクティブの組み合わせ
location /example {
    rewrite ^/example/(.*)$ /new/$1? last;
}

rewriteifset ディレクティブで $1$2 などの無名キャプチャを使用している設定が攻撃の対象となります。
認証は不要であり、インターネットに公開されているサーバーはすべてリスクにさらされています。

悪用された場合のリスク

  • DoS(サービス妨害):ワーカープロセスを繰り返しクラッシュさせ、サービス停止状態を維持できます
  • RCE(リモートコード実行):特定の環境(ASLR無効環境など)ではコード実行が可能で、より高度な攻撃手法(ヒープグルーミング、メモリ開示と組み合わせた手法)でASLRが有効な環境でも突破できる可能性があります
  • Kubernetes 環境への影響:NGINX Ingress Controller を使用している Kubernetes クラスターでは、ingress 経由でクラスター内部への侵入につながる可能性があります

対応策・回避策

推奨対応:パッチの適用(最優先)

NGINX Open Source をご利用の場合:

# バージョン確認
nginx -v

# Ubuntu / Debian の場合
sudo apt update
sudo apt install nginx  # 1.30.1 以上になることを確認

# RHEL / CentOS / Rocky Linux の場合
sudo yum update nginx
# または
sudo dnf update nginx

NGINX Plus をご利用の場合:

現在のバージョン アップグレード先
R32 R32 P6
R33〜R35 R36 P4
R36 R36 P4

F5 の公式サポートページ(https://my.f5.com/manage/s/article/K000161019)から最新のパッチを取得してください。


暫定回避策:無名キャプチャを名前付きキャプチャに変更

即時パッチ適用が困難な場合、設定ファイル内の 無名キャプチャ($1, $2)を名前付きキャプチャに変更 することで脆弱性を緩和できます。

# 修正前(脆弱)
location /example {
    rewrite ^/example/(.*)$ /new/$1? last;
}

# 修正後(緩和済み)— 名前付きキャプチャを使用
location /example {
    rewrite ^/example/(?P<path>.*)$ /new/${path}? last;
}

設定変更後は必ずリロードしてください。

sudo nginx -t        # 設定テスト
sudo nginx -s reload # リロード

確認方法

自分の環境が脆弱かどうかの確認手順

# 1. NGINX のバージョン確認
nginx -v
# 出力例: nginx version: nginx/1.28.3 → 脆弱

# 2. 設定ファイルで無名キャプチャ使用箇所を確認
grep -rn '\$[0-9]' /etc/nginx/
# $1, $2 等が rewrite/if/set と組み合わせて使われていれば対象

# 3. NGINX Ingress Controller (Kubernetes) のバージョン確認
kubectl get pods -n ingress-nginx -o yaml | grep image:

まとめ

CVE-2026-42945 は、NGINX の rewrite モジュールに18年以上潜伏していたヒープバッファオーバーフロー脆弱性です。
CVSS 9.2、認証不要、PoC公開済み、実被害報告ありと、緊急対応が必要な要素がすべて揃っています。
NGINX はインターネット上の多くのウェブサーバーや Kubernetes ingress で広く使われているため、影響範囲は非常に広いです。
今すぐ NGINX 1.30.1 以上へのアップグレードを実施してください。
暫定対応として、設定内の無名キャプチャを名前付きキャプチャに変更する方法も有効です。


参考リンク

コメント