Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-42533-Config-Scanner — 「complex_value two-pass capture-clobbering」バグ(regex map + regex capture → ヒープオーバーフロー / 情報漏洩)に対して脆弱な nginx 設定を検出する静的設定スキャナ。 | Kitploit
ツール/GitHubGitHub/0xcyberstan/cve-2026-42533-config-scanner
静的分析脆弱性スキャナーコード分析構成監査ウェブセキュリティDevSecOps設定ミス
GitHub0xcyberstan/cve-2026-42533-config-scanner

CVE-2026-42533-Config-Scanner

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →

「complex_value two-pass capture-clobbering」バグ(regex map + regex capture → ヒープオーバーフロー / 情報漏洩)に対して脆弱な nginx 設定を検出する静的設定スキャナ。

リポジトリを見る
295403ヶ月前Kitploit レビュー済み
共有

nginx capture-clobber スキャナー

complex_value の2パスキャプチャクラバリングバグクラス(F5/nginx SIRT アドバイザリ、2026年7月)に対して脆弱な nginx 設定を検出する読み取り専用の静的スキャナーです。設定を解析し、脆弱なパターンをその理由と場所とともに報告します。エクスプロイトは行わず、稼働中のサーバーにも触れません。

単一ファイル、標準ライブラリのみ、Python 3.6+。

脆弱性の詳細な解説: https://cyberstan.co.uk/nginx-rce/

バグについて

nginx は多くのディレクティブ値を2パスで構築します。LEN パスが長さを測定してバッファを確保し、その後 VALUE パスがそこへ書き込みます。正規表現キャプチャ($1 から $9、または名前付き (?P<name>...))はリクエストごとの共有状態から読み取られます。マッチキーが正規表現である map は、その変数が評価された瞬間に新たな PCRE マッチを実行し、そのマッチが共有キャプチャ状態を上書きします。キャプチャが LEN パスで測定され、その後 VALUE パスがそのキャプチャを書き換える前に正規表現 map が実行されると、2つのパスが食い違います:

  • クラバリングによって値が測定時より長くなる場合: ヒープバッファオーバーフロー(攻撃者が制御する範囲外書き込み)
  • クラバリングによって値が測定時より短くなる場合: 初期化されていないヒープがクライアントに返される(libc/ヒープポインタの情報漏洩)

map の入力が攻撃者の影響を受ける場合($request_body、$http_*、$arg_*、$uri、$ssl_preread_server_name など)、どちらの方向もリモートからトリガー可能です。

脆弱とみなされる条件

スキャナーは、以下すべてが1つの2パスバッファ内に、悪用可能な順序で揃った場合に、その location または server を検出します:

  1. キャプチャ元: キャプチャグループを持つ正規表現 location ~、server_name ~、rewrite、if (... ~ ...)、または正規表現 map。
  2. クラバートリガー: ~ または ~* の正規表現マッチキーを持つ map(http または stream)で、その出力変数によって参照されているもの。
  3. キャプチャ参照と正規表現 map 変数の両方を使用する2パスシンク:
    • 単一値ディレクティブ(return、set、add_header、proxy_method、proxy_pass、rewrite、index など): 両方の参照が同じ値内にある。
    • param/header ファミリー(proxy_set_header、proxy_set_body、fastcgi_param、scgi_param、uwsgi_param、grpc_set_header): これらはファミリー全体でリクエストごとに1つのバッファを構築するため、2つの参照が同じ location 内の別々のディレクティブにあってもよい。
  4. 順序: キャプチャは正規表現 map より前に評価されなければならない。正規表現 map は一度だけ実行されてキャッシュされるため、map がキャプチャより先に来る場合は一貫した状態を読み取り、脆弱ではありません。スキャナーはそれらをクリア済み(安全だが脆い、並べ替えないこと)として報告します。

使用方法

# scan a single config (follows include directives by default)
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf

# scan a directory (uses nginx.conf if present, else all *.conf)
python3 nginx_capture_clobber_scan.py /etc/nginx/

# scan several roots
python3 nginx_capture_clobber_scan.py site-a.conf site-b.conf

# machine-readable output
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --json

# do not expand include directives
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --no-includes

オプション

オプション効果
--jsonテキストの代わりに JSON レポートを出力します。
--no-includesinclude ディレクティブを追跡しません。

終了コード

コード意味
0脆弱な設定は見つかりませんでした。
1少なくとも 1 つの脆弱な設定が見つかりました。
2使用エラー (パスが指定されていない、または見つからない)。

脆弱な設定では非ゼロで終了するため、CI で使用できます:

python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf || echo "review needed"

出力

テキストモードでは、各検出結果について、ファイルと行、それを囲むスコープ、シンクディレクティブ、関与するキャプチャ変数とマップ変数、トリガーとなったマップ、および1行の理由を出力します。クリアされたセクションには、安全な順序で共存するケースが一覧表示されます。--json は次を生成します:

{
  "vulnerable": true,
  "findings": [
    {
      "file": "/etc/nginx/conf.d/api.conf",
      "line": 12,
      "scope": "location ~ ^/api/(.+)$",
      "directive": "proxy (family buffer)",
      "captures": ["$1"],
      "map_vars": ["$is_bot"],
      "triggers": ["$is_bot <- regex-map on $http_user_agent [nginx.conf:30]"],
      "reason": "..."
    }
  ],
  "cleared_safe_order": [],
  "regex_maps": [],
  "missing_includes": []
}

検出された問題の修正

  1. ベンダーパッチを適用する(nginx 1.30.4 stable / 1.31.3 mainline、NGINX Plus R36 P7 / 37.0.3.1)。これが唯一の完全な修正です。このパッチは境界ガード(ngx_http_script_check_length())を追加し、VALUEパスが割り当てられたバッファを超えて書き込むのを防ぎ、返される文字列の長さをLENパスの測定値ではなく実際に書き込まれたバイト数から計算することで、オーバーフローと情報漏洩の両方向を塞ぎます。
  2. 暫定的な設定強化(多層防御であり、パッチの代替ではありません):
    • 同じlocationまたはバッファ内で、正規表現のmap変数を$1から$9または名前付きキャプチャ参照と一緒に参照しないでください。
    • 同じ(?P<name>...)グループを複数の正規表現mapで再利用しないでください。
    • キャプチャ参照と正規表現map参照を同じproxy_set_headerまたはfastcgi_paramファミリーに混在させないでください。

制限事項

  • 静的解析:設定を読み取るものであり、実行時の動作は読み取りません。動的にsetされた変数によって生成される値は解決できません。
  • 読み取れないincludeターゲット(例えば、ローカルに存在しない絶対パス)は、黙ってスキップされるのではなくmissing_includesの下に報告されます。完全なカバレッジを得るには、設定が解決されるホスト上で実行してください。
  • フラグが立てられたキャプチャ・ビフォア・マップのヒットは、そのmap変数が同じリクエスト内で既に評価されていた場合(すでにキャッシュされている場合)、実行時に無害化される可能性があります。スキャナーはこれらを依然として報告しますが、これはセキュリティ自己スキャンにとって保守的な選択です。

参考

脆弱性の解説とエクスプロイトチェーン: https://cyberstan.co.uk/nginx-rce/

ツールをダウンロード