
CVE-2026-42945 の概念実証エクスプロイト。NGINX の rewrite/set ディレクティブにおけるヒープバッファオーバーフローにより、巧妙に細工されたリクエストを介して DoS や潜在的な RCE を可能にします。
CVE-2026-42945 は、NGINX サーバーにおける深刻なヒープバッファオーバーフローの脆弱性であり、「NGINX Rift」と呼ばれています。この脆弱性は NGINX の rewrite および set ディレクティブの処理ロジックに存在し、特定の設定条件が満たされた場合、攻撃者は悪意のあるリクエストを構築してヒープオーバーフローを引き起こし、サービス拒否(DoS)や潜在的なリモートコード実行(RCE)を引き起こす可能性があります。
脆弱性の種類: ヒープバッファオーバーフロー リスクレベル: 高リスク CVE ID: CVE-2026-42945
次のいずれかのバージョンへの速やかなアップグレードを推奨します。
脆弱性をトリガーするには、以下の2つの条件を同時に満たす必要があります。
設定条件: NGINX の設定で以下の両方を使用していること:
rewrite ディレクティブ(置換文字列に ? 文字を含む)set ディレクティブ(rewrite の正規表現キャプチャグループ $1, $2 などを参照)リクエスト条件: リクエスト URI にエスケープが必要な文字(+, &, % など)が含まれていること
原理説明:
rewrite ディレクティブが e->is_args = 1 を設定(リセットされない)set ディレクティブの長さ計算フェーズでは、全ゼロのサブエンジンを使用(le.is_args = 0)%25 を % にデコードするが、ngx_escape_uri が再エンコードして %25(3バイト)にする%25 文字が1バイトから3バイトに拡張され、バッファ境界を超えて書き込みが行われる# プロジェクト内のテストスクリプトを使用
python3 CVE-2026-42945/CVE-2026-42945-test.py --host cve.test.com --port 80
%25 文字を含むリクエストを送信し、小規模テストを実施する%25 文字(例:2000個)を含むリクエストを送信し、バッファオーバーフローをトリガーする単層 NGINX 設定でのテストでは、脆弱性がトリガーされる結果となります。
クラッシュログ分析:
ngx_http_script_flush_no_cacheable_variables 関数で発生ngx_http_core_rewrite_phase二層 NGINX(layer1 転送 + layer2 業務)設定でのテスト結果は以下の通りです。
本プロジェクトは、セキュリティ研究および教育目的のみで使用されます。利用者は、所在する国や地域の法令を遵守する必要があります。著者は、許可のない悪用行為について一切の責任を負いません。
不正な攻撃への使用は禁止!
最終更新日: 2026-05-19
| 設定シナリオ | layer1 結果 | layer2 結果 | 原因分析 |
|---|
rewrite に break なし + proxy_pass | ❌ 脆弱性トリガー(404) | ❌ リクエスト未到達 | rewrite 後に set が実行されヒープオーバーフローが発生、worker がクラッシュ |
rewrite に break あり + proxy_pass | ✅ 正常(200) | ⚠️ 脆弱性トリガーの可能性あり | break により set の実行が停止、リクエストは正常にバックエンドへ転送される |
| ファイル | 説明 |
|---|
CVE-2026-42945/CVE-2026-42945-test.py | 脆弱性テスト PoC スクリプト。対象に脆弱性が存在するかを検証するために使用 |
single_layer_test/single_layer_nginx.conf | 単層アーキテクチャにおける脆弱な NGINX 設定例 |
single_layer_test/image.png | 脆弱性原理の図解 |
single_layer_test/test.log | テストログファイル |
double_layer_test/layer1_nginx.conf | 二層アーキテクチャの第一層(転送層)NGINX 設定 |
double_layer_test/layer2_nginx.conf | 二層アーキテクチャの第二層(業務層)NGINX 設定 |