
Java アプリケーションが Bouncy Castle の2026年の一連の CVE のうち、どの項目の影響を受けているかをオフラインで調査します。 依存関係ゼロ、単一の jar、ネットワーク接続不要、データのアップロードも一切なし。
java -jar bc-check.jar ./app.jar
java -jar bc-check.jar --gav bcprov-lts8on:2.73.5 --detail
公式のすべての CVE 説明は、一律に次の一文で書かれています:
Bouncy Castle for Java before 1.85
しかし実際に使っている人のうち、2 つの製品ラインのバージョン番号はこの形になっていません:
| 製品ライン | artifact の形式 | バージョン番号の形式 | 「before 1.85」は役に立つか |
|---|---|---|---|
| BC(通常版) | bcprov-jdk18on | 1.81 | ✅ 役に立つ |
| BC-LTS(長期サポート版) | bcprov-lts8on | 2.73.5 | ❌ まったく判断できない |
| BC-FJA(FIPS 認証版) | bc-fips / bctls-fips … | 1.0.2.5 / 2.0.1 / 2.1.2 | ❌ まったく判断できない |
3 つのラインの修正版はそれぞれ 1.85、2.73.12、そして 7 つの FIPS artifact それぞれのバージョン番号です。 これらは同じ数直線上になく、互いに比較しても意味がありません。
CVE-2026-8149 は BC ラインにはまったく影響せず、BC-LTS 2.73.0–2.73.10 にのみ影響します。
「1.85」というバージョン番号だけを見ている人は、決してこれを見つけられません。CVE-2026-59650 は FIPS 版にはまったく影響しません。「before 1.85」で報告すると、空振りになります。CVE-2026-59638 で FIPS 側で確認すべき artifact は bctls-fips であり、bc-fips ではありません ——
暗号コアから TLS モジュールに変わっています。bc-fips だけを見ている人は確認できません。CVE-2026-58062 と 58060 は公式に bc-fips の 2.0.2 と 2.1.3 のみが列挙され、1.0.x はありません ——
つまり 1.0.x ラインは影響を受けません。一方 CVE-2026-8763 は 1.0.2.7 を列挙しているため、1.0.x は影響を受けます。
同じ artifact、同じバージョンでも、CVE によって答えが異なります。さらに 10 件の CVE には影響開始バージョンがあり(from 1.61、from 1.66、from 1.73 とそれぞれ異なります)、
「全バージョンが影響を受ける」わけではありません。また 4 件の古い CVE の修正版は 1.80.2 / 1.81.1 / 1.84 のようなブランチバージョンであり、
影響を受ける区間は断続的です(1.74–1.80.1、1.81、1.82–1.83)。
すべての公告を読み終え、すべての答えを知っていると仮定しても、依然として確認できません —— 答えは 1 つのバージョン番号ではなく、「製品ライン × artifact × CVE」の 3 次元表だからです。
訂正(2026-10-12):本節では当初「4 件の CVSS critical はすべて
unreviewedで、Dependabot からは見えない」と書いていました。 そのうちCVE-2026-8763は 2026-09-18 に GitHub の審査で収録され、パッケージ情報が補完されました。 現在、Dependabot と OSV はそれを認識できます。依然として見えないのは残りの 3 件です。以下は 2026-10-12 の実測に基づいて修正した版です。
4 件の CVSS critical のうち、3 件は GitHub Advisory でのステータスが依然として unreviewed であり、
影響を受けるパッケージリストは空です(パッケージ数 0)。パッケージ名がなければ依存ツリーと照合できません ——
それらは OSV に入らず、Dependabot は警告せず、SCA で依存マニフェストをスキャンしても検出できません。
org.bouncycastle:bcprov-jdk18on:1.81 で OSV を検索すると(2026-10-12)、4 件がヒットします:
CVE-2025-14813、CVE-2026-0636、CVE-2026-13506、CVE-2026-8763 ——
残りの 3 件の critical は 1 件も含まれていません。
⚠️ 境界を明確にします:「BC の脆弱性は Dependabot からすべて見えない」わけではありません —— 同じ一連のうち
CVE-2026-0636は reviewed で、パッケージ情報があり、正常に警告されます。 見えないのは、下表でunreviewedと記されたこの 3 件の critical です。
| CVE | GHSA | ステータス(2026-10-12) | パッケージ数 |
|---|---|---|---|
| CVE-2026-58062 | GHSA-j295-77c3-9frf | unreviewed | 0 |
| CVE-2026-8763 | GHSA-9pwp-9qqc-pr26 | reviewed(2026-09-18 以降) | 6 |
| CVE-2026-59650 | GHSA-ghgq-7g74-28wp | unreviewed | 0 |
| CVE-2026-59638 | GHSA-8rxj-3p7p-rq39 | unreviewed | 0 |
グローバルライブラリが CVE-2026-8763 に登録している修正版は bcprov-jdk18on / bcprov-jdk15to18 1.85、
bcprov-lts8on 2.73.12、bc-fips 1.0.2.7 / 2.0.2 / 2.1.3 であり、本ツールの判定表と一致しています。
java -jar bc-check.jar <路径> [更多路径...] [选项]
java -jar bc-check.jar --gav <坐标>
パスは jar / war ファイル(Spring Boot fat-JAR を含み、自動的に階層ごとに展開)でも、ディレクトリ(再帰的)でも指定できます。
| オプション | 説明 |
|---|---|
--gav <座標> | ファイルをスキャンせず、座標を直接判定します。例:bcprov-lts8on:2.73.5 |
-d, --detail | ヒットした CVE と公式原文を1件ずつ列挙します |
--json | JSON を出力し、パイプラインへの組み込みを容易にします(常に UTF-8) |
--utf8 / --gbk | コンソールで中国語が文字化けする場合にエンコーディングを強制指定します |
--no-color | カラー出力を無効にします |
終了コード:0 = 未ヒット;1 = CVE ヒット;2 = 使用法エラー。CI ゲートとしてそのまま利用できます。
[CRITICAL] bcprov-lts8on 2.73.5 BC-LTS 线
位置 :app.jar!/BOOT-INF/lib/bcprov-lts8on-2.73.5.jar
来源 :jar 内 MANIFEST
结论 :命中 29 条 CVE,其中 CVSS critical 4 条
降噪 :其中 13 条按官方 FIPS 侧点名的 artifact 反推,大概率出在 bcpkix / bcpg / bctls 模块。
⚠️ 这是推断不是官方结论,仅供排优先级。
处置 :升级到 2.73.12(BC-LTS 线)
BC はほとんどの場合あなた自身が導入したものではなく、推移的依存によって引き込まれています —— TLS、証明書検証、JWT、PDF 署名、PGP はいずれもこれを導入します。そのため本ツールは pom を見ず、実際の成果物のみを確認します:
META-INF/MANIFEST.MF の Bundle-SymbolicName + Bundle-Version(主要な経路)META-INF/maven/org.bouncycastle/*/pom.properties(公式 jar には存在せず、再パッケージされたものにのみ存在)org/bouncycastle/ の class のみが見つかり座標を特定できない → UNKNOWN を報告し手動確認を促す4 番目はホスト jar に shade されたケースで、mvn dependency:tree や SCA では見えません。
本ツールは少なくとも「ここに BC があるが、バージョンは特定できない」と伝え、黙って見逃すことはありません。
jar が改名された場合(内部リポジトリでの再公開でよくある)でも、ファイル名では特定できませんが、MANIFEST では依然として特定できます。
すべて公式 github.com/bcgit/bc-java wiki 上の 2026 年の 37 件の CVE の個別サブページ(Issue affecting / Fixed versions の原文)に由来し、二次的な転述やまとめ記事ではありません。
tools/data/bc_cves.jsontools/gen_rules.py によって CveTable.java に自動生成され、手作業で転記していません再生成:python tools/gen_rules.py
本ツールは公式 wiki 上の 2026 年の 37 件の CVE のみをカバーしています。 2026 年より前の Bouncy Castle の脆弱性は範囲外です —— それらの多くはすでに OSV に登録されており、 Dependabot / SCA で検出できるため、本ツールは車輪の再発明をしません。
具体例:org.bouncycastle:bcprov-jdk18on:1.81 は OSV で
CVE-2025-14813 と CVE-2026-0636 を確認できます —— 前者は本ツールではカバーされず(2025 年)、
後者はカバーされます。したがって本ツールが OK を報告する意味は「2026 年のこの一群の影響を受けない」であり、
「あなたの Bouncy Castle にまったく問題がない」という意味ではありません。両者を併せて確認すべきであり、二者択一ではありません。
1.84 / 1.80.2 などより早いブランチのバージョンです)。
本ツールは wiki に基づき個別に判定し、「23 件」という数字は使用しません。1.85.1 と 2.73.12.1 はいずれもパッケージング修正(公式 release notes 原文:packaging issue)であり、
独立したセキュリティ修正版ではありません。1.85 に留まっていても、それによって修正が漏れることはありません。CVE-2026-14682 は公式が FIPS 側で bctls-fips 1.0.24 とのみ記載し、2.0.24 / 2.1.24 は記載していません。
同種の CVE-2026-59646 の記載方法と一致しません。本ツールは公式原文に従って判定し、公式に代わって補完することはありません。mvn package # 产物 target/bc-check.jar
コンパイルターゲット Java 8:緊急調査ツールは本番マシンに直接投入して実行できる必要があり、企業環境では多くの JRE が依然として 8 である。 実行時依存ゼロ —— Bouncy Castle を調査するツールは、自身が Bouncy Castle に依存してはならない。
Apache License 2.0
このツールが答えるのは「自分は引っかかったか」です。以下はこのツールでは答えられないので、私にご依頼いただけます:
📮 [email protected] —— 状況をお知らせください。24 時間以内に 1 ページの書面回答をお返しします: できるかどうか、どこが難しいか、おおよその所要時間。この段階は無料で、事前のコミットも不要です。
| コード | 意味 |
|---|---|
0 | スキャン完了、かつすべてのファイルを実際に読み込めた、対応が必要な検出なし |
4 | 読み込めないファイルがある —— zip でない、内容が切り詰められている、または読み取り失敗 |
🔴 4 は 2026-09-09 に追加されました。追加した理由は明確にしておく価値があります。
それ以前は、読み込めないファイルは出力に 1 行のヒントを残すだけで、終了コードは従来どおり 0 でした ——
痕跡は人間が見るもので、CI やスクリプトが見るのは終了コードです。そのため「読み込めなかった」が自動化の中では「合格」と等しくなっていました。
破損した、暗号化された、あるいはダウンロードが不完全な jar は、静かに「問題は見つかりませんでした」になってしまいます。
「読み込めなかった」と「あなたは安全だ」は必ず別の文でなければなりません。
⚠️ 正当な空の jar は読み込めない扱いになりません(22 バイトの EOCD レコードは本物の空 zip です)、4 はトリガーされません ——
誤警告が増えると、本当の警告を誰も見なくなります。
その他の終了コードの意味は、上記の各判定段階と使い方の説明を参照してください。