Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
nginx-cve-fix — ソースビルドされたnginx 1.25.5コンテナ、CVE-2026-42945修正のバックポート、OpenSSLのバージョンアップ、完全な証明連鎖、およびVEX証明書付き。 | Kitploit
ツール/GitHubGitHub/barappteam/nginx-cve-fix
脆弱性スキャナーコンテナセキュリティ脆弱性分析構成監査DevSecOpsサプライチェーンセキュリティ
GitHubbarappteam/nginx-cve-fix

nginx-cve-fix

ソースビルドされたnginx 1.25.5コンテナ、CVE-2026-42945修正のバックポート、OpenSSLのバージョンアップ、完全な証明連鎖、およびVEX証明書付き。

リポジトリを見る
3ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Nginx CVE Fix - ソースビルドの差し替えイメージ nginx:1.25-bookworm 向け

公式の nginx:1.25-bookworm イメージに存在する2つのCVEを修正し、上流のランタイム動作を維持する、ソースビルドされたnginx 1.25.5コンテナイメージです。

CVEコンポーネント深刻度手法検証モデル
CVE-2024-6119OpenSSL / libssl3高依存関係のバージョンアップスキャナー検証可能: dpkgデータベースに表示されるlibssl3 3.0.20
CVE-2026-42945nginx ngx_http_rewrite_moduleクリティカルバックポートされたソースパッチ発祥検証可能: パッチの派生 + 回帰テスト + ビルド証明 + VEX

これらは2つの異なる修正モデルを表しています。

  1. バージョンアップ (CVE-2024-6119) - 修正されたライブラリバージョンがdpkgデータベースを介してスキャナーに直接見える。追加の証明は不要。
  2. ソースバックポート (CVE-2026-42945) - パッケージバージョンは1.25.5のままなので、スキャナーは修正済みバイナリと未修正のものを区別できない。修正はソースの発祥、ビルド時の検証、回帰テストを通じて実証される。VEXがスキャナー層のシグナルを提供する。

パリティステータス

このイメージのnginx -V構成引数は、nginx:1.25-bookwormのものと一致します(-ffile-prefix-mapビルドパスを正規化した後、文字単位で比較;test/compat.py::test_nginx_versionで検証済み)。 テストスイート(make test)は、イメージメタデータ、動的モジュール、ファイルシステムレイアウト、エントリポイント動作、dpkgパッケージング、およびライブ上流イメージに対するHTTPリクエスト処理をカバーする89のアサーションを検証します。

上流との既知の相違点(同一であると検証されていないもの):

  • nginx -Vのbuilt with OpenSSL X.X.X行はビルダーのlibssl-devバージョンを反映しており、上流のコンパイル時のOpenSSLとは異なる可能性があります。
  • バイナリコンテンツはバイト単位で同一ではありません(異なるコンパイル環境、異なるツールチェーン呼び出しタイムスタンプ)。
  • イメージのパッケージセットが異なります - 公式イメージの継承されたパッケージツリーではなく、debian:bookworm-slimベースです。
  • ランタイムのlibssl3バージョンは、上流イメージの固定バージョンではなく、bookwormが現在提供するもの(執筆時点では3.0.20)です。

クイックスタート```bash

Build everything (builder → .deb → final image)

make image

Run automated compatibility tests

make test

Run CVE-2026-42945 regression test

make test-cve

Verify patch provenance (re-derives from upstream tarballs)

make verify-patch

Scan and demonstrate VEX

make scan

root@kitploit:~
ビルド、テスト、スキャンを1つのコマンドで:```bash
make all

リポジトリ構造```

build/ Dockerfile.build Builder image (debian:bookworm-slim + compilation deps) build.sh Fetch → verify → patch → compile → package nginx generate-vex.sh Generate OpenVEX document for backported CVE verify-patch.sh Re-derive patch from upstream tarballs (audit tool) patches/ CVE-2026-42945.patch Backported one-line fix from nginx 1.30.1 CVE-2026-42945.provenance.json Machine-readable patch provenance and derivation metadata

test/ compat.py 89-assertion compatibility test suite (runs against live upstream) test_cve_2026_42945.py CVE-specific regression test (exercises vulnerable code path)

artifacts/ patch-attestation.json Build-time patch attestation (tracked) nginx_*.deb Compiled package (gitignored - rebuilt via make build-source) nginx Compiled binary (gitignored) Containerfile Final runtime image definition Makefile Orchestrates build → test → scan pipeline vex.json Generated OpenVEX v0.2.0 document baseline-trivy.txt Point-in-time Trivy scan of nginx:1.25-bookworm baseline-grype.txt Point-in-time Grype scan of nginx:1.25-bookworm fixed-trivy.txt Trivy scan of the fixed image fixed-grype.txt Grype scan of the fixed image (without VEX) fixed-grype-vex.txt Grype scan of the fixed image (with VEX applied)

root@kitploit:~
---

## ビルドプロセス

### アーキテクチャ```
debian:bookworm-slim (builder)
  └─ build.sh
       ├─ curl nginx-1.25.5.tar.gz (SHA256-verified)
       ├─ curl njs-0.8.4 from github.com/nginx/njs
       ├─ patch -p1 < CVE-2026-42945.patch
       ├─ ./configure (flags identical to upstream nginx -V)
       ├─ make: release binary, debug binary, 4 dynamic module families (×2 release/debug)
       ├─ make: NJS modules (×2 release/debug) + njs CLI binary
       └─ dpkg-deb → nginx_1.25.5-1~bookworm+echo1_<arch>.deb

debian:bookworm-slim (runtime)
  ├─ apt-get install runtime deps (libssl3 ≥ 3.0.14 enforced)
  ├─ dpkg -i nginx_*.deb
  └─ COPY --from=upstream /docker-entrypoint.sh + /docker-entrypoint.d/

Containerfileは、上流から/etc/nginxをコピーしません。すべての設定ファイルは.deb内に同梱され、dpkgのconffileメカニズムによって追跡されます。これは、default.confがユーザーによって変更されたかどうかを検出するためにdpkg-queryを使用する10-listen-on-ipv6-by-default.shエントリポイントスクリプトに必要です。

整合性の保証

  • ソースtarball: すべてのソースアーカイブ(nginx、NJS)は、抽出前にハードコードされたハッシュに対してSHA256検証されます。不一致があった場合、ビルドは中断されます。
  • ソースからのビルド: クリーンなDebianコンテナ内で./configure && makeを実行します。上流のバイナリは使用せず、apt install nginxも行いません。
  • コンパイル中のネットワークアクセスなし: 依存関係はビルダーDockerイメージレイヤーにインストールされます。build.shは固定されたソースアーカイブのみを取得します。

再現性

ビルドは_ほぼ_再現可能ですが、完全に密閉(hermetic)ではありません。

  • nginxのソースバージョンとSHA256は固定され、抽出前に検証されます。
  • NJSのバージョンとSHA256は固定され、抽出前に検証されます。
  • ビルダーの依存関係はDockerfile.buildに列挙されていますが、バージョンは固定されていません。
  • Debianランタイムパッケージはビルド時にライブのbookwormリポジトリから解決されるため、ビルド間でマイナーバージョンが変動する可能性があります。

再現性を向上させるには、ベースイメージのダイジェストを固定してください:```bash docker pull debian:bookworm-slim docker inspect debian:bookworm-slim --format='{{index .RepoDigests 0}}'

Then use: FROM debian:bookworm-slim@sha256:

root@kitploit:~
---

## CVE 修復の詳細

### CVE-2024-6119 - OpenSSL バージョンアップ

| フィールド           | 値                                                   |
| -------------------- | ---------------------------------------------------- |
| **コンポーネント**   | OpenSSL / libssl3                                    |
| **深刻度**           | 高 (CVSS 7.5)                                        |
| **タイプ**           | X.509 名前チェックによるサービス拒否                  |
| **ベースライン版**   | 3.0.11-1~deb12u2                                     |
| **修正版**           | 3.0.14-1~deb12u2 (以降)                               |
| **自社版**           | 3.0.20-1~deb12u1                                     |
| **NVD**              | https://nvd.nist.gov/vuln/detail/CVE-2024-6119       |
| **勧告**             | https://openssl-library.org/news/secadv/20240903.txt |

**修正の仕組み:**

`.deb` パッケージは `Depends: libssl3 (>= 3.0.14)` を宣言しており、これにより
`apt-get install` は修正を含む OpenSSL バージョンを強制的に取得します。現在の
Debian bookworm リポジトリでは 3.0.20 が提供されており、CVE-2024-6119 および
ベースライン由来の数十もの他の OpenSSL CVE (CVE-2024-2511、CVE-2024-5535、
CVE-2024-4741、CVE-2023-5678、CVE-2023-6129、CVE-2023-6237、CVE-2024-9143、
CVE-2025-15467、CVE-2025-69420) を修正しています。

**スキャナーの動作:** Grype および Trivy は dpkg データベース内の `libssl3 3.0.20` を認識し、
3.0.20 ≥ 3.0.14 であると判断するため、CVE-2024-6119 は報告されなくなります。
VEX は不要です。バージョンアップ自体が自明です。

**検証:**```bash
grep "CVE-2024-6119" baseline-grype.txt  # present
grep "CVE-2024-6119" fixed-grype.txt     # absent

CVE-2026-42945 - バックポートパッチ

脆弱性:

ngx_http_script_regex_end_code() が src/http/ngx_http_script.c 内で、rewrite の正規表現結果を処理する際に e->is_args のリセットに失敗しました。is_args が先行するスクリプトエンジン操作によって設定されていた場合、リダイレクト/rewrite パスでの後続のバッファ長の計算が誤りとなり、細工されたリクエスト URI を介して攻撃者が制御可能なサイズのヒープバッファオーバーフローを引き起こします。

修正(1行):```c // Added before the existing e->quote = 0; at line 1205 e->is_args = 0;

root@kitploit:~
**パッチの出典:**

| 証拠                          | 場所 / 値                                                                                                                           |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| 上流コミット                  | [`2046b45aa0c6e712c216b9075886f3f26e9b4ca9`](https://github.com/nginx/nginx/commit/2046b45aa0c6e712c216b9075886f3f26e9b4ca9)         |
| 上流作者                      | Roman Arutyunyan (arut)、Sergey Kandaurov (pluknet) によってコミット、2026-05-13                                                         |
| 上流PR                       | [nginx/nginx#1350](https://github.com/nginx/nginx/pull/1350)                                                                         |
| 上流タグ                      | `release-1.31.0`, `release-1.30.1`                                                                                                   |
| 関連する以前の修正             | [`74d9399`](https://github.com/nginx/nginx/commit/74d939974d430a2c2e71b0134114d2a7b04dcc20) (2012, 類似の `is_args` エスケープ問題) |
| パッチファイル                 | `build/patches/CVE-2026-42945.patch`                                                                                                 |
| 来歴メタデータ                 | `build/patches/CVE-2026-42945.provenance.json`                                                                                       |
| ソースtarball(脆弱性あり)    | `https://nginx.org/download/nginx-1.25.5.tar.gz` SHA256:`2fe2294f8af4144e7e842eaea884182a84ee7970e...`                               |
| ソースtarball(修正版)        | `https://nginx.org/download/nginx-1.30.1.tar.gz` SHA256:`99765000d974896b31ca5882d8c279ce3fe7ef6f...`                                |
| 脆弱性ファイルSHA256           | `c4b10c95b00e43d731a61f2380d406155e037f3cfb40a3bf58711ecefddc799a`                                                                   |
| 修正ファイルSHA256             | `a6182175a22d88f66b9a61ae051bdcfece10d1bb2e643f7f175eb07589143403`                                                                   |
| 導出方法                      | 2つのtarball間での `diff src/http/ngx_http_script.c`(上流のコミットと同一であることを確認)                                  |
| 変更行数                      | 1(追加のみ)                                                                                                                    |
| パッチの適用確認               | 確認済み: `patch --dry-run -p1 < build/patches/CVE-2026-42945.patch` 終了コード0                                                         |
| ビルド時検証                   | `build.sh` はパッチ適用後のソースに `e->is_args = 0` が存在することを確認し、なければビルドを中断します                                        |
| ビルド時証明                   | ビルド中に `artifacts/patch-attestation.json` に書き込まれます                                            |
| 回帰テスト                     | `test/test_cve_2026_42945.py` - 脆弱なコードパスを実行                                                                   |
| パッチ検証スクリプト           | `make verify-patch` - 上流のtarballから独立してパッチを再導出                                                      |

**パッチの作成方法:**

1. `nginx-1.25.5.tar.gz` をダウンロード(SHA256を固定ハッシュと照合)
2. `nginx-1.30.1.tar.gz` をダウンロード(SHA256検証: `99765000d974896b31ca5882d8c279ce3fe7ef6f5c6f9f0a967ed7fd3407f9cc`)
3. 2つのツリー間で `diff src/http/ngx_http_script.c` を実行
4. 差分はちょうど1行 - `e->is_args = 0;` の追加
5. コンテキスト行を含む unified diff パッチとして抽出
6. パッチが nginx 1.25.5 に正常に適用されることを確認
7. 両方のソースツリーは `research/` に保持され、独立した検証が可能

**回帰テスト:**

テストスイート `test/test_cve_2026_42945.py` は、クエリ文字列状態 (`is_args`) を操作する書き換えルールを介してリクエストを送信し、脆弱なコードパスを実行します。以下を検証します:

- 末尾に `?` が付いたリライトリダイレクト(クエリストリップ)が適切なレスポンスを生成すること
- `is_args` 状態を切り替える連鎖リライトがワーカーをクラッシュさせないこと
- 長いクエリ文字列 (4KB+) がバッファオーバーフローの痕跡(ヌルバイト、過度に長い Location ヘッダー)を引き起こさないこと
- 100回の急速な混合リクエストがワーカークラッシュを引き起こさないこと
- ワーカープロセスが SIGSEGV やヒープ破損なしにすべてのテストケースを通過すること

実行: `make test-cve`

**スキャナーの動作:**

パッケージバージョンが `1.25.5` のままであるため、スキャナーはアドバイザリがデータベースに存在する場合、CVE-2026-42945 をフラグ付けします。これは想定通りです - スキャナーは (パッケージ名、上流バージョン) で一致し、ソースがパッチ適用済みかどうかは検査できません。VEX ドキュメントは、機械可読な正当性を添えてこの検出結果を抑制します。スキャナーの抑制はコミュニケーションメカニズムであり、是正の主たる証拠ではありません。主たる証拠は上記のパッチ来歴チェーンと回帰テストです。

---

## VEX (脆弱性悪用可能性交換)

### VEX が必要な理由

スキャナーは dpkg データベースから (名前、バージョン) でパッケージを識別します。私たちのパッケージは `nginx 1.25.5-1~bookworm+echo1` です - スキャナーはこれを上流バージョン 1.25.5 として解析し、nginx ≤ 1.25.5 に影響するすべての CVE をフラグ付けします。

バックポート修正の場合、スキャナーは脆弱なコードがパッチ適用済みであることを判断できません。バージョンは意図的に 1.25.5 のままであり、パッケージの互換性を維持します。VEX は、CVE が対処されたことを機械可読な証明として提供し、検証可能な証拠にリンクします。

### VEX の信頼性チェーン

CVE-2026-42945 に関する VEX ステートメントは単なる書類ではありません。以下によって裏付けられています:

1. **パッチの出典** - `build/patches/CVE-2026-42945.provenance.json` は正確な上流ソース、導出方法、ファイルハッシュを文書化します
2. **ビルド時検証** - `build.sh` は修正マーカーがコンパイル済みソースに存在することを主張し、失敗時にビルドを中断します
3. **ビルド証明** - `artifacts/patch-attestation.json` はビルド中に生成されたパッチ前後のファイルハッシュを記録します
4. **回帰テスト** - `test/test_cve_2026_42945.py` はクラッシュや破損なく脆弱なコードパスを実行します
5. **独立した再導出** - `make verify-patch` は両方の上流 tarball をダウンロードし、コミットされたパッチが最小限のセキュリティ差分であることを示します

### VEX の対象範囲

| CVE            | ステータス  | 正当性                         | 証拠                                                   |
| -------------- | ------- | ----------------------------- | ---------------------------------------------------------- |
| CVE-2026-42945 | fixed | vulnerable_code_not_present | バックポートパッチ + 出典 + 回帰テスト + ビルドゲート |

VEX の範囲は意図的に狭くなっています: このプロジェクトが検証可能な証拠をもって積極的に是正した CVE のみが対象です。出荷バージョンによって「緩和が期待される」に過ぎない検出結果は抑制されません - これにより、VEX を包括的な抑制ツールとして使用することを回避します。

### 動作方法

`build/generate-vex.sh` スクリプトは OpenVEX v0.2.0 文書を生成します。それを適用するスキャナーコマンド:```bash
# Without VEX - CVE is reported (version-based match):
grype nginx-fixed > fixed-grype.txt

# With VEX - CVE is suppressed with justification:
grype nginx-fixed --vex vex.json > fixed-grype-vex.txt

スキャナー証拠

VEXによる抑制は、保存されたスキャン成果物で確認できます。スキャナーデータベースは定期的に再構築され、CVEの有無は実行ごとに異なる可能性があることに注意してください。保存された baseline-grype.txt および fixed-grype.txt ファイルは、特定時点の証拠です。VEXドキュメントの有効性はスキャナーDBの状態に依存せず、上記の証明チェーンを通じて独立して検証可能です。


スキャナーの整合性

パッケージ命名の決定

パッケージ名は nginx(nginx-custom ではありません)です。これは以下の理由から重要です:

  1. 正直な報告: パッケージ名を変更すると、スキャナーはそれをnginxとして認識せず、未修正のものを含むすべてのnginx CVEが黙って消えてしまいます。それは誤った安心感を与えます。
  2. VEXの実証: VEXはスキャナーが実際に報告するCVEに対してのみ抑制できます。名前を変更したパッケージではVEXは不要(かつテスト不可能)になります。
  3. パッケージ管理: nginx と命名することで、依存関係を満たし、標準的なDebianツールで管理できるようになります。

スキャナーデータベースの変動性

スキャナーアドバイザリデータベースは定期的に再構築されます。ある週に存在したCVEが翌週には存在しない可能性があります。このプロジェクトは、修正の主要な証拠としてスキャナー出力に依存しません。証拠の連鎖は次のとおりです:

  1. パッチの来歴(任意のスキャナーから独立して検証可能)
  2. ビルド時の証明書(コンパイル中に生成)
  3. 回帰テスト(脆弱なコードパスを実行)
  4. VEX抑制(スキャナーレイヤーの確認)

保存されたスキャンファイルは特定時点の証拠にすぎません。

スキャナーが見るもの(修正イメージ)

PackageVersionCVE-2024-6119CVE-2026-42945
libssl33.0.20-1~deb12u1報告なし(バージョンにより修正済み)n/a
nginx1.25.5-1~bookworm+echo1n/aDBに存在する場合に報告(バックポートはスキャナーから見えない)

--vex vex.json を使用すると、CVE-2026-42945の検出(スキャナーDBに存在する場合)が抑制されます。VEXドキュメントの有効性は、証明チェーン(パッチ導出、ビルド証明、回帰テスト)によって確立され、スキャナー出力のみに依存するものではありません。


互換性テスト

テストスイート(test/compat.py)は、nginx:1.25-bookworm と nginx-fixed の両方をDockerコンテナとして起動し、動作を比較します。各アサーションは、ライブの修正イメージをライブのアップストリームイメージと直接テストします。

89個のアサーション。すべて合格。

さらに、test/test_cve_2026_42945.py は、バックポートされたCVE修正を特に対象とした約20個のアサーションを提供します(上記の「回帰テスト」を参照)。

テストされないもの

  • HTTP/3 QUICプロトコルの動作(--with-http_v3_module フラグの存在のみ確認、UDP/QUICトラフィックは送信しない)
  • 負荷時のパフォーマンスやレイテンシ特性
  • 考えられるすべてのnginx設定ディレクティブ
  • ディスク上に .so ファイルが存在することを確認する以外の、あまり使用されない動的モジュール(GeoIP、image_filter、XSLT)の動作

実行:```bash make test

root@kitploit:~
---

## イメージサイズ

| イメージ | サイズ (arm64, `docker images`) |
| ------- | ------------------------------ |
| `nginx:1.25-bookworm` | ~278 MB |
| `nginx-fixed` | ~332 MB |

固定版イメージはアップストリームより大きくなっています。これは想定内です。公式イメージは最適化されたレイヤでプリコンパイル済みバイナリを使用しますが、当イメージはビルド成果物と完全なランタイム依存関係(12個の動的モジュールすべてのライブラリを含む)を`debian:bookworm-slim`ベースにインストールします。サイズ差はソースレベルでのビルド制御とのトレードオフであり、機能面での劣化ではありません。

---

## 残存リスク評価

### 固定イメージに残るCVE

固定イメージには、本プロジェクトで対処していないシステムライブラリの脆弱性が依然として存在します(時点情報です。現在の状態を確認するには`make scan`を実行してください)。

| リスクレベル | パッケージ | CVE | 備考 |
| ---------- | --------- | --- | ---- |
| High | nginx | CVE-2023-44487 | アップストリームによりnginx ≥ 1.25.3で緩和済み。Debianトラッカーがアドバイザリをクローズしていないためスキャナが依然としてフラグ付け |
| Critical | libgnutls30 | CVE-2026-42010, CVE-2026-33845 | bookwormでは修正なし |
| Critical | libc6/libc-bin | CVE-2026-5450 | 本Debianリリースでは修正予定なし |
| High | libc6/libc-bin | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | glibcのbookwormでは修正予定なし |
| High | dpkg | CVE-2025-6297, CVE-2026-2219 | 修正可能(1.21.23にアップグレード) |
| High | libldap-2.5-0 | CVE-2023-2953 | 修正予定なし |
| High | curl/libcurl4 | CVE-2026-5773, CVE-2026-6276 | 修正予定なし |
| High | ncurses | CVE-2025-69720 | 修正予定なし |

これらは`debian:bookworm-slim`から継承されたものであり、本プロジェクトのnginxに焦点を当てたCVE修正の範囲外です。

### 本アプローチの限界

1. **ハーメチックではない。** ベースイメージとaptパッケージは、ビルド時にライブのDebianリポジトリから解決されます。ベースイメージのSHAを固定し、aptスナップショットを使用することで再現性が向上します。
2. **QUICの動作テスト未実施。** HTTP/3サポートはコンパイルされています(フラグで確認)が、テストスイートではQUICトラフィックは実行されません。
3. **パフォーマンス検証なし。** 50同時リクエストテストは正確性を確認しますが、スループットやレイテンシの同等性は確認しません。
4. **モジュールロードのみ。** 動的モジュール(GeoIP, image_filter, XSLT)が存在しロード可能であることは確認していますが、基本的なロードを超えた機能の動作は検証していません。
5. **単一アーキテクチャのエビデンス。** テストはビルドホストアーキテクチャのみ(開発時はarm64、マルチアーキにはCIが必要)で実行されます。

### 将来の改善点(未実装)

1. ベースイメージのダイジェストを固定し、aptスナップショットURLを使用してハーメチックビルドを実現。
2. 推移的依存関係として引き込まれる不要なパッケージ(ncurses, util-linux)を削除。
3. SBOMを生成(`make sbom`ターゲットは存在し、`syft`を使用)し、SBOM purl経由でVEXにリンク。
4. イメージを`cosign`で署名し、VEX + SBOM + パッチ証明文をOCIアテステーションとして添付。
5. CIパイプライン(GitHub Actions)を追加し、自動ビルド→テスト→スキャン→プッシュを実現。
6. HTTP/3プロトコルテスト(QUICクライアント、証明書設定、UDPポート)を追加。
7. ディストロレスベースを検討し、OSレベルのCVEノイズを完全に排除。
8. ASan(AddressSanitizer)ビルドバリアントを追加し、テスト負荷下でのヒープ破損がないことを証明。

---

## ビルドフラグ vs アップストリーム

`build.sh`の`./configure`フラグは、公式の`nginx:1.25-bookworm`イメージで`nginx -V`が報告するものと同一です。これは`test/compat.py::test_nginx_version`で検証されており、`-ffile-prefix-map=<path>`の違いを正規化し、残りのフラグを文字単位で比較します。

注目すべきフラグ(両方のイメージに存在):

| フラグ / 機能 | 目的 |
| ------------ | ---- |
| `--prefix=/etc/nginx` | Dockerイメージの慣例(Debianの`/usr/share/nginx`ではない) |
| `--with-http_v3_module` | 組み込みQUICスタック(OpenSSL QUIC APIとは独立) |
| `--with-pcre` (PCRE2) | `libpcre2-8-0`にリンク(レガシーPCRE1ではない) |
| `--with-stream` | TCP/UDPプロキシモジュール(動的) |
| セキュリティ強化 | `-fstack-protector-strong`, `FORTIFY_SOURCE=2`, RELRO, PIE |
| 動的モジュール (×12) | geoip, stream_geoip, image_filter, xslt, http_js, stream_js (release + debug) |
| `--with-debug` (debug) | nginx-debugバイナリを同一フラグ+debugで個別にビルド |

---

## Debianパッケージ

`.deb`パッケージのメタデータ:```
Package: nginx
Version: 1.25.5-1~bookworm+echo1
Depends: libc6 (>= 2.34), libcrypt1 (>= 1:4.1.0), libpcre2-8-0 (>= 10.22),
         libssl3 (>= 3.0.14), zlib1g (>= 1:1.2.11), libgeoip1 (>= 1.6.12),
         libgd3 (>= 2.1.0~alpha~), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25),
         lsb-base (>= 3.0-6), adduser
Provides: httpd, nginx, nginx-r1.25.5
Conflicts: nginx-common, nginx-core
Replaces: nginx-common, nginx-core

重要なパッケージングの決定:

  • libssl3 (>= 3.0.14) - パッチ適用済みのOpenSSLを明示的に要求します(アップストリームは >= 3.0.0 と宣言しています)。これがCVE-2024-6119の修正を強制するメカニズムです。
  • Provides: nginx-r1.25.5 - この仮想パッケージに依存する動的モジュールパッケージを満たします。
  • Conffiles dpkgに登録済み: /etc/nginx/nginx.conf および /etc/nginx/conf.d/default.conf。これはIPv6エントリポイントスクリプトの dpkg-query --showformat チェックに必要です。
  • postinst はnginxユーザー/グループをuid/gid 101、シェル /bin/false で作成します(アップストリームと一致 - テストスイートで確認済み)。
  • 同梱物: nginxバイナリ、nginx-debugバイナリ、全12個の .so モジュール、完全な /etc/nginx 設定ツリー、init.d/systemd/logrotateファイル、マニュアルページ、HTMLデフォルト、および /etc/nginx/modules → /usr/lib/nginx/modules のシンボリックリンク。

設計上の決定とトレードオフ

  1. パッケージ名は nginx であり、nginx-custom ではありません。 名前を変更すると、スキャナはそれをnginxアドバイザリと一致させなくなり、未修正のものを含むすべてのnginx CVEがレポートから静かに消えてしまいます。nginx という名前を維持することで、スキャナの正直なレポートが保証され、VEXが意味を持つようになります。

  2. VEXにはCVEの可視性が必要です。 VEXの目的は、すでに報告されているCVEを抑制することです。スキャナがCVEを見つけられない場合(パッケージ名の変更やDBのタイミングによる)、VEXは抑制するものを持ちません。

  3. パッケージ依存関係としての libssl3 (>= 3.0.14)。 ランタイムベースがたまたまパッチ適用済みのOpenSSLを持っていることを期待するのではなく、.deb はCVE-2024-6119の修正を含むバージョンをハード要求します。

  4. スキャナデータベースの変動性。 アドバイザリデータベースは定期的に再構築されます。ある週に存在するCVEが次の週には存在しない可能性があります。このリポジトリに保存されたスキャンファイルは時点の証拠です。現在のスキャンは異なる場合があります。

  5. 使用されたAIツール。 GitHub Copilotは、パッチ分析(nginx 1.25.5と1.30.1のソースツリー比較)、テストスイート構造、パッケージ名変更によるスキャナ回避問題の特定、およびVEX文書の作成を支援しました。Debianパッケージングの詳細とGrypeのバージョン一致ヒューリスティックスは手動での検証が必要でした。

ツールをダウンロード
フィールド値
コンポーネントnginx ngx_http_rewrite_module
重大度Medium(nginx.org の分類)
ベースライン バージョンnginx 1.25.5
修正バージョンnginx 1.30.1(リリース日 2026-05-13)
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-42945
セキュリティアドバイザリhttps://my.f5.com/manage/s/article/K000161019
アップストリームの変更nginx 1.30.1 CHANGES: "rewrite モジュールにおけるヒープメモリバッファオーバーフロー"
カテゴリ比較内容アサーション数
イメージメタデータEntrypoint、Cmd、ExposedPorts、User、StopSignal、Env、Labels7
nginx -V 引数構成フラグが同一(-ffile-prefix-map パスで正規化)1
動的モジュールアップストリームの12個の .so ファイルすべてが存在 + /etc/nginx/modules シンボリックリンク13
nginx-debug バイナリデバッグ -V に --with-debug と --with-http_v3_module が存在2
ファイルシステム構成約20のキーパス、/dev/stdout および /dev/stderr へのログシンボリックリンク約20
ユーザー/グループ設定getent passwd/group nginx の出力が同一2
dpkg 設定ファイルdpkg-query が default.conf と nginx.conf を設定ファイルとして報告1
パッケージ提供dpkg -s nginx が Provides: nginx-r1.25.5 を表示1
NJS バイナリnjs -v が 0.8.4 を返す1
IPv6 エントリポイント10-listen-on-ipv6-by-default.sh が default.conf を同一に変更1
Envsubst テンプレートNGINX_ENVSUBST テンプレート置換が同じ出力を生成1
起動ログすべてのエントリポイントログ行がアップストリーム形式と一致1
HTTP GET/HEAD/POST複数のエンドポイントでレスポンスボディ、ステータス、ヘッダーが一致約10
不正なリクエストRaw TCPエラーレスポンスが同一1
静的ファイル提供マウントされたファイルが正しいコンテンツで提供される1
TLS 終端自己署名証明書を使用したHTTPSが同一に動作1
グレースフルシャットダウンSIGQUIT がクリーンな終了(コード0)を生成1
設定再読み込みSIGHUP が再起動なしで新しい設定を適用1
同時リクエスト50の並列リクエストがすべて200を返す1