Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
nginx-rift-check — nginx設定内のCVE-2026-42945 rewriteパターンを検出: 置換文字列に?を含むrewriteと、同じlocation内で消費される無名キャプチャ | Kitploit
ツール/GitHubGitHub/cynepmyx/nginx-rift-check
静的分析脆弱性スキャナー脆弱性分析構成監査ウェブセキュリティ
GitHubcynepmyx/nginx-rift-check

nginx-rift-check

nginx設定内のCVE-2026-42945 rewriteパターンを検出: 置換文字列に?を含むrewriteと、同じlocation内で消費される無名キャプチャ

リポジトリを見る
8日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

nginx-rift-check

CVE-2026-42945、nginx の ngx_http_rewrite_module におけるヒープバッファオーバーフローに対する脆弱な設定を検出します。

影響を受ける nginx バージョン(0.6.27 〜 1.30.0)を実行しているだけでは、悪用可能とは限りません。設定に特定のディレクティブの組み合わせが含まれている必要がありますが、その組み合わせは稀です。実世界の設定を対象とした2回の独立したスキャンでは、1465件中0件、35633件中1件が悪用可能でした。このスクリプトは、あなたの設定がどちらの側にあるかを教えてくれます。

検出対象

リプレースメントに ? とそれに続く引数が含まれる rewrite と、同じ location 内で読み取られる無名キャプチャ($1 〜 $9)の組み合わせです。

root@kitploit:~
location / {
    rewrite ^(.*) /new?c=1;   # ここにある ? が内部の is_args フラグを立てる
    set $myvar $1;            # ...このフラグはクリアされず、ここに漏れ込む
    return 200 $myvar;
}

1回目のパスで生の文字列用のバッファサイズが計算され、次のパスでエスケープされたバージョンがそこにコピーされます。どちらの処理も単独では正しく見えます。

ルールはアドバイザリではなく実測に基づく

以下のすべてのルールは、推測ではなく nginx 1.30.0 で実測したものです。公開されている説明のうち2つは誤っているためです。

明確にしておくべき2つの帰結があります。

末尾の ? は危険ではありません。 /new/$1? は継承されたクエリ文字列を落とす方法であり、移行設定の多くに登場します。すべての ? を警告すれば、インターネットの半分に怒鳴ることになります。

「名前付きキャプチャは安全」という説明は誤りです。 重要なのはキャプチャの宣言方法ではなく、読み取り方法です。名前付きグループを $1 として読めば、無名キャプチャとまったく同じようにクラッシュします。

また、同じく実測の理由により、以下も無視します: 正規表現自体の中の ?(量指定子)、および redirect / permanent / break(コンシューマが実行される前に処理を終了させるもの)。

使い方

root@kitploit:~
nginx -T | python3 check_rewrite.py
python3 check_rewrite.py /path/to/dump.txt
python3 check_rewrite.py --json /path/to/dump.txt

Python 3、標準ライブラリのみ。

終了コード: 0 はクリーン、1 はペアが見つかった、2 は設定を読み取りまたは解析できなかった。 3つ目が重要です。閉じられていない引用符や不均衡な中括弧は解析を途中で打ち切ります。また、読み取りに失敗したファイルに対して「何も見つからなかった」と答えるチェッカーは、クラッシュするものより悪いです。その場合、その旨を表示して 2 を返します。

個別のファイルではなく nginx -T を渡してください。include はどこにでも置けるため、生成された設定は実行中のサーバー上でのみ真実です。結果は、ダンプ内のオフセットではなく、ディレクティブが実際に存在するファイルと行に対して報告されます。

例

root@kitploit:~
$ python3 check_rewrite.py samples/vuln-nginx-T.txt
[HIGH] находка #1
  location:  location /  (/etc/nginx/nginx.conf:14)
  rewrite:   rewrite ^(.*) /new?c=1  (/etc/nginx/nginx.conf:15)
  захват $N: set -> set $myvar $1  (/etc/nginx/nginx.conf:16)
  почему:    обработка продолжается в этом же location без редиректа

Итого находок: 1

知っておくべき制限

すべてのレポートの末尾にも表示されるため、このツールを保証と誤解する人はいません。

  • location ごとに最初のペアのみが報告されます;
  • location 内ではなく server 内に直接置かれた rewrite と set は追跡されません;
  • 推移的な連鎖(set $tmp $1; の後に $tmp を使うなど)は追跡されません;
  • try_files、error_page、名前付き location を経由するジャンプは追跡されません;
  • 到達可能性は評価されません。決して実行されない if 内のペアでも報告されます。

設定チェックよりもアップデートの方が信頼できます。nginx.org から現在の stable または mainline リリースを取得してください。

テスト

root@kitploit:~
python3 -m unittest test_check_rewrite -v

29テスト。この種のツールのリスクは正常な設定に警告を出すことなので、大半は否定系のテストです。また、11個のインクルードファイルにまたがる250行の本番設定に対しても実行済みです。そこには map の正規表現と、引用符内にセミコロンが大量に含まれる CSP ヘッダーがあります: 検出結果はゼロ、パースエラーもゼロ、実際のペアを1つ注入するとちょうど1件だけ検出されました。

ライセンス

MIT

ツールをダウンロード
1つの location 内の設定クラッシュ
rewrite ^(.*) /new?c=1; + set $x $1;する
rewrite ^/old/(.*)$ /new?x=1; + set $x $1;する
rewrite ^/old/(.*)$ /new/$1?; + set $x $1;しない
rewrite ... /mid?c=1; の後に rewrite ... /new;、さらに set $x $1;しない
rewrite ^(.*) /new?c=1 break; + set $x $1;しない
rewrite ^(?<tail>.*) /new?c=1; + set $x $1;する
rewrite ^(?<tail>.*) /new?c=1; + set $x $tail;しない