言語:日本語 | English
これは、NGINX設定にCVE-2026-42945(NGINX Rift)およびCVE-2026-9256のリスクパターンが存在するかどうかをチェックする軽量スクリプトです。
この脆弱性は、depthfirstが記事「NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability」で公開しました。記事とF5/NVDの説明によると、リスクはngx_http_rewrite_moduleの特定の設定の組み合わせに関連しています:同じ設定コンテキスト内で、rewriteの置換文字列に?が含まれ、後続のrewrite、if、setが無名PCREキャプチャ変数(例:$1、$2)を参照している場合です。
本ツールは主に、NGINX設定ファイル内で以下の高リスクパターンをチェックします。
以下のような高リスクシーケンス:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
リスクポイントは単独のrewriteやsetではなく、同一コンテキスト内での実行順序です:
rewrite が正規表現キャプチャを使用し、置換文字列に?を含むrewrite、if、setが$1、$2などの無名キャプチャ変数を使用するこの組み合わせにより、NGINXスクリプトエンジンの長さ計算と実際のコピー段階で状態の不一致が発生し、ヒープバッファオーバーフローを引き起こす可能性があります。
以下のような高リスクrewrite:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
リスク条件:
^/((.*))$ で$1が$2を含む)$1$2)注意:breakはリスクを排除しません。複数の重複キャプチャグループが?の後の引数部分に現れる限り、依然としてargumentsコンテキストに該当します。通常のURI rewrite(例:/$1$2 break)は本CVEのトリガー条件にはなりません。
スクリプトはこのパターンを検出した場合、明確にCVE-2026-9256とマークします。
depthfirstの記事で列挙された影響範囲は以下を含みます:
実際の修正バージョンと製品マトリックスについては、F5の公式発表またはディストリビューションのセキュリティアドバイザリを参照してください。たとえ影響範囲内のバージョンであっても、通常は特定のrewrite設定シーケンスが存在する場合にのみ脆弱性が発動します。
スクリプトは現在のNGINXバージョンと設定スキャン結果を同時に出力します:
0.6.27~1.30.1 かつ設定がリスクシーケンスに該当:NGINXのアップグレードまたは設定の調整が必要。0.6.27~1.30.1 だが設定がリスクシーケンスに該当しない:アップグレードを推奨するが、本ツールでは設定トリガー条件は検出されなかった。現在のマシンの完全なNGINX設定を直接スキャン:
python3 scan_rift.py
スクリプトは以下を実行します:
nginx -T
現在のユーザーに完全な設定を読み取る権限がない場合は、sudoを使用してください:
sudo python3 scan_rift.py
既にエクスポートされた設定ファイルをスキャンすることもできます:
python3 scan_rift.py /path/to/nginx-full.conf
例えば、設定をエクスポートしてからスキャン:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
リスクシーケンスが検出されなかった場合:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
疑わしいシーケンスが検出された場合:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
CVE-2026-9256の疑わしいパターンが検出された場合:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
検出後は、該当する設定コンテキストが外部からのリクエストに到達可能かどうかを手動で確認し、速やかにNGINXをアップグレードするか設定を調整してください。
location、server、ifなどのコンテキスト内のrewrite/setの組み合わせを確認する。?を含むrewriteの後に$1、$2などの無名キャプチャ変数を引き続き使用しない。^/((.*))$と?$1$2の組み合わせ)。breakをCVE-2026-9256の回避手段として使用しない。/?$1$2 breakでも該当する。このスクリプトは設定の静的スキャンツールであり、高リスクパターンを迅速に発見することを目的としています。脆弱性の悪用検証とは異なります。