nginxで18年間潜伏したヒープバッファオーバーフローが可能な脆弱性 NGINX Rift(CVE-2026-42945)-即時アップデート推奨

セキュリティニュース

投稿日時: 更新日時:

nginxで18年間潜伏したヒープバッファオーバーフローが可能な脆弱性 NGINX Rift(CVE-2026-42945)-即時アップデート推奨

2026年5月13日、F5とセキュリティリサーチ企業depthfirstが、NGINX Plus・NGINX Open Sourceに18年前(2008年)から存在していたクリティカルな脆弱性を公開しました。正式なトラッキング番号はCVE-2026-42945(CVSS v4:9.2・Critical)、通称「NGINX Rift」です。

【この記事のサマリー】

  • CVE-2026-42945(NGINX Rift):CVSS v4 9.2(Critical)/ CVSSv3.1 8.1(High)。ngx_http_rewrite_moduleの18年物のヒープバッファオーバーフロー。
  • 影響範囲:NGINX Open Source 0.6.27〜1.30.0・NGINX Plus R32〜R36(および関連F5製品)。
  • 攻撃条件:認証不要。特定のrewriteルール設定(「無名PCREキャプチャ+?を含むreplacement+後続のrewrite/if/setディレクティブ」)が存在する場合のみ発動。
  • 影響:必ずDoS(ワーカープロセスのクラッシュ)、条件次第でRCE(ASLRが無効な場合に現実的)。
  • PoC公開済み:depthfirstのGitHubリポジトリ(DepthFirstDisclosures/Nginx-Rift)で公開。OrcaセキュリティはPythonの標準ソケットと1つのGETリクエストだけでDoSを実証。
  • 発見の特異性:4件すべてのCVEがdepthfirstの自律型AI分析システムによってNGINXソースコードへの「1クリックのオンボーディング」後に自律的に発見された。
  • 即時対応:1.30.1または1.31.0(NGINX Open Source)への即時アップデート。パッチ適用が困難な場合は無名キャプチャを名前付きキャプチャに置き換える設定変更で緩和可能。
  • 同日修正された3件の追加CVE:CVE-2026-42946(CVSS 8.3)・CVE-2026-40701(CVSS 6.3)・CVE-2026-42934(CVSS 6.3)。

続報:nginxの脆弱性 NGINX Rift(CVE-2026-42945)が公開3日でサイバー攻撃に悪用

概要

脆弱性はnginxのURLリライト処理を担うngx_http_rewrite_moduleのヒープバッファオーバーフローで、特定のrewriteルール設定がある環境において認証なしでDoS(ワーカープロセスのクラッシュ)が引き起こせます。ASLRが無効な環境ではリモートコード実行(RCE)も可能です。

2026年5月18日時点で悪用は確認されていませんが、PoCが既に公開されているため、サイバー攻撃への悪用リスクが高まっています。

F5はNGINX Open Source 1.30.1・1.31.0、NGINX Plus R36 P4・R32 P6・R37.0.0でこの脆弱性を修正しました。

影響を受けるバージョンと製品

製品 脆弱なバージョン 修正済みバージョン
NGINX Open Source 0.6.27〜1.30.0 1.30.1(stable)・1.31.0(mainline)
NGINX Plus R32〜R36 R37.0.0・R36 P4・R32 P6
NGINX Ingress Controller 対象バージョンあり F5アドバイザリ参照
NGINX Gateway Fabric 対象バージョンあり F5アドバイザリ参照
NGINX App Protect WAF 対象バージョンあり F5アドバイザリ参照
F5 WAF for NGINX 対象バージョンあり F5アドバイザリ参照
NGINX App Protect DoS 対象バージョンあり F5アドバイザリ参照

影響を受けない製品:F5 Distributed Cloud・F5 Silverline・NGINX One Console・BIG-IP・BIG-IQ・F5OS・Traffix SDC・F5 AI Gateway。

即時対応—パッチ適用と暫定緩和策

最優先:パッチ適用とnginxの再起動

NGINX Open Sourceの場合、nginx.orgの公式パッケージから1.30.1または1.31.0にアップデートしてください。

# Debian/Ubuntu系
sudo apt update && sudo apt upgrade nginx

# RHEL/AlmaLinux/Rocky系 
sudo dnf update nginx

パッチ適用後は必ずnginxを再起動してください。ワーカープロセスが修正済みバイナリを再ロードするために必要です。

# グレースフルリスタート 
sudo nginx -s reload

# 完全再起動(推奨) 
sudo systemctl restart nginx

バージョンの確認:

nginx -v 
# output: nginx version: nginx/1.31.0 (または1.30.1)

パッチ適用が困難な場合の暫定緩和策

脆弱なrewriteルールにおける無名PCREキャプチャ($1$2等)を名前付きキャプチャに置き換えることで、この脆弱性のトリガー条件を排除できます。

# 脆弱な設定(無名キャプチャ + ?) 
rewrite ^/users/([0-9]+)$ /profile.php?id=$1 last;

# 安全な設定(名前付きキャプチャに変更) 
rewrite ^/users/(?<user_id>[0-9]+)$ /profile.php?id=$user_id last;

全てのrewriteディレクティブを対象に設定ファイルを確認してください。

ASLRの有効化確認(RCEリスクの低減)

cat /proc/sys/kernel/randomize_va_space 
# 2 → ASLRが有効(RCEはより困難) 
# 0 → ASLRが無効(RCEのリスクが高い)

ASLRが無効な場合は有効化を検討してください。

sudo sysctl -w kernel.randomize_va_space=2

設定ファイルのスキャン

脆弱なパターンを検出するために以下のコマンドで設定ファイルをスキャンしてください。

# rewriteディレクティブで?と$[0-9]を使用しているものを検索 
grep -rn 'rewrite.*\?.*\$[0-9]' /etc/nginx/

脆弱性の技術詳細—スクリプトエンジンの「2パス処理」におけるフラグ伝播の欠如

根本原因:is_argsフラグが長さ計算パスに伝播しない

NGINX Riftの本質は、ngx_http_rewrite_moduleのスクリプトエンジンが採用する2パス処理のロジックバグにあります。

パス1(長さ計算):書き込みに必要なバッファサイズを事前計算します。この処理はゼロ初期化されたサブエンジン上で実行されるため、is_argsフラグは0です。

パス2(データコピー):実際にデータをバッファに書き込みます。この処理はメインエンジン上で実行されます。

問題は、rewriteのreplacement文字列に?が含まれると、ngx_http_script_start_args_codeがメインエンジンのe->is_args = 1を永続的にセットする点にあります。

パス エンジン is_args 動作
長さ計算 サブエンジン(ゼロ初期化) 0 生の(エスケープなしの)キャプチャ長を返す
データコピー メインエンジン 1 ngx_escape_uriNGX_ESCAPE_ARGSフラグで呼び出す。+%2B等で1バイトが3バイトに拡張

この乖離により、確保したバッファが実際に書き込まれるデータより小さくなります。コピーパスがヒープバッファの境界を越えて攻撃者が制御するURIデータを書き込み、ヒープバッファオーバーフローが発生します。

「バッファを超えて書き込まれるバイトは攻撃者のURIに由来するため、メモリの破壊は攻撃者によって形成されます」とdepthfirstは述べています。

トリガー条件——3つの設定要素が揃ったときのみ発動

この脆弱性はすべてのNGINX環境で発動するわけではありません。以下の3つの条件が同時に満たされたロケーションブロックが存在する場合のみ脆弱です。

条件 内容
rewriteディレクティブで無名PCRE キャプチャ$1$2等)を使用
replacementの文字列に**?(クエスチョンマーク)**が含まれる
同じスコープ内でその後に別のrewriteifsetディレクティブが続く

脆弱な設定例

location /users {
    rewrite ^/users/([0-9]+)$ /profile.php?id=$1 last;
    set $foo $1;  # このset指示がtracking状態を固定し脆弱性を引き起こす
}

URLのリライトやルーティング・正規化・アプリケーションフロント処理にrewriteチェーンを使用している環境ほど、この脆弱なパターンを含む可能性が高くなります。

RCEへの昇格—「クロスリクエストヒープ風水」

基本的なDoSを超えてRCEを達成するために、depthfirstは以下の高度な手法を公開しています。

URIバイトにはNULLバイトが使えないため、オーバーフローペイロードに直接偽のデータ構造を配置できません。代わりに攻撃者はHTTP POSTリクエストボディ(生バイトストリームとして処理されるためNULLバイトを含められる)を使ったヒープスプレーを行い、予測可能なメモリ位置にフェイクなクリーンアップ構造体を配置します。

「悪用は、クロスリクエストヒープ風水(heap feng shui)を使って、隣接するngx_pool_tのcleanupポインタを破壊し(URI バイトにNULLバイトが使えないため、POSTボディ経由でスプレー)、それをフェイクのngx_pool_cleanup_sにリダイレクトして、プール破棄時にsystem()を呼び出させる」とdepthfirstは説明しています。

RCEの信頼性はASLRが無効な場合に高まります。組み込みデバイス・アプライアンス・レガシーシステムなどではASLRが無効になっているケースがあります。現代の汎用LinuxディストリビューションではASLRは通常有効ですが、Orcaセキュリティはシェルコードなしにヒープ破壊と組み合わせる高度な手法によって、ASLRが有効な環境でもRCEが可能なシナリオを指摘しています。

同日修正された3件の追加CVE

今回のF5の四半期パッチリリースでは、NGINX Riftとともに以下の3件も修正されています。

CVE-2026-42946(CVSS v4:8.3)ngx_http_scgi_modulengx_http_uwsgi_moduleでの過剰メモリアロケーション(Buffer overread)。AitM(中間者攻撃)ができる攻撃者が上流サーバーのレスポンスを制御できる場合、NGINXワーカープロセスのメモリを読み取ったり再起動させたりすることが可能。scgi_passまたはuwsgi_passディレクティブが使用されている場合に影響。影響バージョン:0.8.42〜1.30.0。

CVE-2026-40701(CVSS v4:6.3)ngx_http_ssl_moduleのユーズアフターフリー(Use-after-free)。ssl_verify_clientonまたはoptionalに設定され、かつssl_ocsponに設定されている場合に、リモートの非認証攻撃者が限定的なデータ変更またはワーカープロセスの再起動を引き起こす可能性。影響バージョン:1.19.0〜1.30.0。

CVE-2026-42934(CVSS v4:6.3)ngx_http_charset_moduleの境界外読み取り(Out-of-bounds read)。charsetsource_charsetcharset_map・バッファリング無効のproxy_passがすべて設定されている場合に、メモリ内容の漏洩またはワーカープロセスの再起動が起こる可能性。影響バージョン:0.3.50〜1.30.0。

AIが18年間見つけられなかったバグを発見—depthfirstの自律型分析システム

今回の脆弱性発見で特に注目されるのは、4件すべてのCVEがdepthfirstの自律型AI分析システムによって、NGINXソースコードへの「1クリックのオンボーディング」後に自律的に発見されたという事実です。

DeXposeの報告によれば、システムはNGINXソースコードを対象に2026年4月のスキャンを開始し、約6時間以内にヒープオーバーフローを含む4件のメモリ破壊の問題をフラグ立てしました。depthfirstがF5に報告したのが4月24日で、F5が修正を公開したのが5月13日——19日後のことでした。

これについてTuxCareは「オープンソースの『多くの目』モデルは、バグが複数のファイル・複数のディレクティブ・複数のランタイム状態をまたいで推論する必要がある場合に限界がある。AIによるコードベース分析がそのギャップを埋め始めている」と述べており、今後も同様の「何十年も潜伏していたバグ」が相次いで発見される可能性を示唆しています。

F5はVulnerability Advisory(K000161019)において「reliable code execution requires ASLR to be disabled」と警告しており、Microsoftの脅威インテリジェンスチームもパッチ適用を推奨しています。

参考情報