
Spring Cloud Config CVE-2026-40982 オフライン調査ツール —— 依存ゼロ、単一 jar、ネットワーク不要。
これが答えるのは「自分は影響を受けるか」ではなく、もっと厄介な問いです:
このバージョン系列に、Maven Central 上で上げられる安全なバージョンはあるのか?
3.1.x / 4.1.x / 4.2.x の3系列について、答えは ない。
公式アドバイザリ(spring.io/security/cve-2026-40982)が示す修正版:
| バージョン系列 | 公式修正版 | 入手可否 | Maven Central 上の当該系列の最高バージョン | アップグレード可能か |
|---|---|---|---|---|
| 3.1.x | 3.1.14 | Enterprise Support Only | 3.1.10 | ❌ |
| 4.1.x | 4.1.10 | Enterprise Support Only | 4.1.7 | ❌ |
| 4.2.x | 4.2.7 | Enterprise Support Only | 4.2.4 | ❌ |
| 4.3.x | 4.3.3 | OSS | 4.3.4 | ✅ |
| 5.0.x | 5.0.3 | OSS | 5.0.4 | ✅ |
あの3つの修正バージョンは公開リポジトリに存在しない。誰でも検証できる:
curl -sI https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-config-server/4.2.7/
# HTTP/1.1 404 Not Found
しかも自動化ツールはこのことを教えてくれない —— GitHub advisory の構造化データにおいて、
これら3つのラインの first_patched_version はまさに null である:
{"range": "<= 3.1.13", "first_patched_version": null}
{"range": ">= 4.1.0, <= 4.1.9", "first_patched_version": null}
{"range": ">= 4.2.0, <= 4.2.6", "first_patched_version": null}
{"range": ">= 4.3.0, <= 4.3.2", "first_patched_version": "4.3.3"}
{"range": ">= 5.0.0, <= 5.0.2", "first_patched_version": "5.0.3"}
Dependabot / OSV が消費しているのはまさにこのデータです。アップグレード先がなければ、アップグレード提案はできません。
java -jar scc-check.jar <目录或 jar/war 路径>
# 中文乱码时(Windows 控制台代码页与 Java 判断常常对不上):
java -jar scc-check.jar target/ --utf8
Java 17+ が必要です。実行時に依存関係はゼロで、オフライン環境にそのまま持ち込めます。
終了コード:2 バージョン系列を上げられない · 1 影響を受けるがアップグレード可能 / 判定不能 · 0 未検出 · 3 使用方法またはパスの誤り
.jar / .war のファイル名BOOT-INF/lib/、WEB-INF/lib/)META-INF/maven/.../pom.properties)—— jar の名前が変更されていても識別できるpom.xml1. クライアントを影響ありと見なさない。
本 CVE はサーバー側の spring-cloud-config-server にのみ影響します。spring-cloud-starter-config
(クライアント)を参照しているプロジェクトは影響を受けません。ツールはこれを明確に伝え、無駄に不安を煽ることはありません。
2. 4.0.x に対して判定を下さない。
公式 advisory のどの範囲も 4.0.x をカバーしていません(4.0.0 > 3.1.13 であり、下限なしの範囲には該当しません)。
ツールは「公式のカバー範囲外」とだけ報告し、CRITICAL とは報告しません —— 推測で判定表を埋めると誤った判断を招くからです。
3. バージョンを読み取れない場合は「判定不能」と明言し、決して安全と見なさない。
Spring Cloud は release train でバージョンを統一的に管理しており、pom.xml には**<version> がまったく無い**ことがよくあります。
この場合、ツールは問題が見つからなかったふりをせず、ビルド成果物をスキャンするよう促します。
同様に、scope が test / provided の依存関係は利用者に伝播しないため、露出面には含めません。
XML コメントで囲まれた依存関係は除去されます。
tools/gen_rules.py は2つの一次データソースから RuleTable.java をコンパイルします:
GHSA-6g23-24mc-hx6x → 影響範囲 + 公式修正版repo1.maven.org の maven-metadata.xml → 公開リポジトリに実際に存在するバージョンさらに4つのアサーションを伴います:範囲数 ≥5、first_patched=null のものが ≥3、バージョン系列 ≥5、
ENTERPRISE_ONLY と判定されるものが ≥3。いずれか1つでも満たさなければ即座に中止し、ファイルを生成しません ——
そうでなければ、パースが一度失敗するだけで空の表が出力され、単体テストは空の表に対してもすべてグリーンになってしまいます。
python tools/gen_rules.py # 重新生成判定表
mvn test # 31 个测试
本ツールはバージョン比較のみを行い、あなたの Config Server が実際にインターネットに公開されているか、 WAF があるか、他の方法で緩和済みかどうかは検出しません。判定結果は調査の出発点であり、セキュリティ上の結論ではありません。 公式 advisory を優先してください。
MIT
このツールが答えるのは「自分は該当するか」です。以下はこのツールでは答えられないため、私にご依頼いただけます:
📮 [email protected] —— 状況をお知らせください。24 時間以内に 1 ページの書面回答をお返しします: 可能かどうか、どこが難しいか、おおよその所要期間。この段階は無料で、事前のコミットも不要です。
| コード | 意味 |
|---|---|
0 | スキャン完了、かつすべてのファイルを実際に読み込めた、対応が必要な検出なし |
4 | 読み込めないファイルがある —— zip でない、内容が切り詰められている、または読み取り失敗 |
🔴 4 は 2026-09-09 に追加されました。追加した理由は明確にしておく価値があります。
それ以前は、読み込めないファイルは出力に 1 行のヒントを残すだけで、終了コードは従来どおり 0 でした ——
痕跡は人間が見るもので、CI やスクリプトが見るのは終了コードです。そのため「読み込めなかった」が自動化の中では「合格」と等しくなっていました。
破損・暗号化・ダウンロード不完全な jar は、静かに「問題は見つかりませんでした」に変わってしまいます。
「読み込めなかった」と「あなたは安全だ」は別の文でなければなりません。
⚠️ 正当な空の jar は読み込めない扱いになりません(22 バイトの EOCD レコードは本物の空 zip です)、4 は発生しません ——
誤検知が増えると、本当の検知を誰も見なくなります。
その他の終了コードの意味は、上記の各判定段階と使い方の説明を参照してください。