
あなたのこの Jetty(または Spring Boot に持ち込まれた Jetty)は、2026 年のこの 5 件の CVE のうちどれに該当するのか —— そして公式がアップグレードしろと言うそのバージョンは、Maven Central に本当に存在するのか?
主軸は CVE-2026-2332(GHSA-355h-qmc2-wpwf、high / CVSS v3 7.4):jetty-http の chunked リクエストスマグリング。
最も硬い事実:9.4 / 10 / 11 という EOL の 3 本の旧ラインには、公開された修正版がそもそも存在しない —— 公式セキュリティページにはそれらについて一行ずつ
see details for availability(= 商用サポート)と書かれており、それらのバージョン番号は Maven Central 上で実測すべて 404。
java -jar jetty-line-check.jar /path/to/jetty # 解凍してデプロイした Jetty(lib/*.jar をスキャン)
java -jar jetty-line-check.jar app.war # war
java -jar jetty-line-check.jar app.jar # Spring Boot fat jar
java -jar jetty-line-check.jar --table # 5 件の CVE × モジュール × バージョンラインの判定表だけを見る
java -jar jetty-line-check.jar --utf8 ... # Windows コンソールで中国語が文字化けする場合に付ける
姉妹プロジェクト tomcat-line-check の判定基準は「jar の中に特定の修正クラスがあるかどうか」だった。 なぜなら Tomcat のあの修正は新しいクラスを 1 つ追加したからだ。
Jetty のこれらはその手が使えない。 主軸の CVE-2026-2332 は、その修正が HttpParser のメソッド本体を変更するもので、新しいクラスは一切追加していない
(ビルド前に gh api compare + javap で裏取り済み)。したがって判定基準はこれしかない:
あなたの完全な座標 + バージョンラインが、どの CVE に該当するか;そして公式が名指しした修正版が、Maven Central に本当に存在するか。
判定表は tools/gen_table.py が5 件の GitHub advisory の vulnerabilities[] + Maven Central の実 jar HEAD プローブから生成し、
7 組のアサーション(陽性対照 / 中核的主張 / 旧ラインの最終版 / センチネル / 主軸の構造 / 分裂モジュール / レーティング)が通らなければ表の出力を拒否する。
旧ライン(9.4 / 10.0 / 11.0)のあの一帯の 404 と 無 こそが、本ツールの価値の所在である。--table を実行して全体像を見よ。
org.eclipse.jetty の reviewed advisory、2026 年)🔴 影響面が筋の通るのは主軸の 2332 だけ(スマグリング経路は ServerConnector / HttpParser というデフォルト解析の主経路に乗っており、
特定機能を有効化する必要がない)。残り 4 件は判定表の 1 行として扱うのみ:
CVE-2026-10050(Digest)の影響面は非常に小さい —— Digest 認証を明示的に有効化しないと触れない。主な売りにしてはならない。CVE-2026-6790 は medium、CVE-2025-11143 は low —— まとめて「高危険」と呼んではならない。see details for availability、それまでである。GHSA-r7p8-xq5m-436c · GHSA-7p3p-8qv8-m2vh · GHSA-2fvj-hgj9-j2gr · GHSA-wjpw-4j6x-6rwhsee details for availability の出典):https://jetty.org/security.htmlpython tools/gen_table.py --dry # アサーションだけ実行、ファイルは書かない
python tools/gen_table.py # アサーションが全て通れば CveTable.java を書く
python tools/recheck_before_publish.py # 公開当日に再実行、主張が失効したら文言を直し判定基準は変えない
mvn package # JDK 17 が必要;実行時依存ゼロ(JUnit はテスト時のみ)
| コード | 意味 |
|---|---|
0 | スキャン完了、かつすべてのファイルが実際に読み込めた |
2 | 使い方の誤り(パスが未指定) |
4 | 読めないファイルがある —— zip でない、内容が途中で切れている、または読み取り失敗 |
🔴 4 の理由: 痕跡は人間が見るものだが、CI とスクリプトが見るのは終了コードである。これがなければ、破損 / 暗号化 / ダウンロード不完全な jar が
静かに「問題は見つかりませんでした」の一言に化けてしまう ——「私はそれを読めない」と「あなたは安全である」は必ず別の言葉でなければならない。
⚠️ 正当な空 jar(22 バイトの EOCD レコード 1 つ)は読めない扱いにはならず、4 をトリガーしない。
MIT
| 三態 | 意味 |
|---|
PUBLIC | advisory が修正版を名指しし、それが Maven Central に実在する —— 公開でアップグレード可能 |
404 | advisory が修正版を名指ししたが、それは Central 上で404 —— 公式セキュリティページには see details for availability(商用サポート)と記載 |
無 | advisory がこのラインの修正版をそもそも示していない(first_patched_version が空)—— このラインを修正するにはメジャーバージョンをまたぐアップグレードしかない |
| CVE | モジュール | レーティング | 一言で |
|---|
| CVE-2026-2332 | jetty-http | high / v3 7.4 | ⭐ 主軸:chunked quoted-string 内の \r\n がチャンクヘッダの終端と解釈される → リクエストスマグリング(CWE-444) |
| CVE-2026-5795 | jaspi(12.x は ee8/9/10/11-jaspi に分裂) | high / v3 7.4 | JASPI の ThreadLocal が未クリア → 権限昇格 |
| CVE-2026-6790 | jetty-server | medium / v3 5.3 | HTTP/2・3 の Host / :authority 混同 |
| CVE-2026-10050 | jetty-security(12.x は ee8/9-security を追加) | high / v4 8.7 | Digest 認証の ISO-8859-1 処理 |
| CVE-2025-11143 | jetty-http | low / v3 3.7 | URI 解析の差異 |