はじめに
Javaアプリケーションでは、多くのOSSライブラリを依存関係として利用します。
これらのライブラリに脆弱性が見つかった場合、対象ライブラリの特定、修正版の調査、依存関係の更新、ビルド、再スキャンといった作業が必要です。
今回は、IBM Bob Premium Package for Java Modernizationに用意されている「Java Vulnerabilities」ワークフローを、サンプルのJavaアプリケーションに対して実行しました。
実際に、脆弱性の検出から修正計画の作成、依存関係の更新、ビルド、再スキャンまでを試してみます。
IBM Bobとは?
IBM Bobは、コードベース上で開発者と協働し、ソフトウェア開発を支援するAIパートナーです。
コード補完だけでなく、アプリケーションの分析、設計、実装、レビュー、モダナイゼーションなど、開発ライフサイクル全体を支援します。
30日間の無料トライアルに、IBM Bobの利用に必要な「Bobコイン」が40コイン付与されます。
- 無料トライアル:https://bob.ibm.com/trial
- Bobコインの追加購入:https://bob.ibm.com/pricing
Premium Package for Java Modernizationとは
IBM BobのアドオンであるPremium Package for Java Modernizationでは、2026年9月2日時点で次のようなワークフローが提供されています。
-
Java アップグレード ワークフロー
- AIによる検証と修正を組み合わせ、Java 8または11から新しいバージョン(17、21、または25)へのアップグレードを支援します。
-
Liberty モダナイゼーション ワークフロー
- IBM Application Modernization Acceleratorと連携し、従来のWebSphereからLibertyランタイムへの移行を支援します。
-
UI モダナイゼーション ワークフロー
- コンポーネント単位の移行と検証を通じて、レガシーなUIフレームワークのモダナイゼーションを支援します。
-
ユニットテスト生成ワークフロー
- テストの生成・実行・修正のサイクルと、JaCoCoによるカバレッジ計測を支援します。
-
Java 脆弱性修復ワークフロー
- OSVデータベースを使用してJavaの依存関係に含まれる既知の脆弱性を特定し、検出結果に優先順位を付け、影響を受ける依存関係を修正版へ更新します。
今回は上記のうちの一つであるJava 脆弱性修復ワークフローを使用します。
検証環境
今回使用したアプリケーションと環境は以下のとおりです。
| 項目 | 内容 |
|---|---|
| Maven座標 | com.pharmacy:simple-pharmacy:1.0.0 |
| Java | Java 21 |
| ビルドツール | Maven 3.9.12 |
| パッケージ形式 | WAR |
| 実行環境 | Open Liberty |
サンプルアプリケーションには、検証のために脆弱性を含むバージョンの依存ライブラリが設定されています。
Java Vulnerabilitiesワークフローを実行
Premium Package for Java Modernizationのライセンスが割り当てられた環境で、「Java Vulnerabilities」ワークフローを実行します。
9件の脆弱性を検出
最初に、プロジェクトで利用している依存ライブラリがスキャンされました。
その結果、3つの依存関係から合計9件の脆弱性が検出されました。
| 深刻度 | 件数 |
|---|---|
| Critical | 1件 |
| High | 2件 |
| Medium | 6件 |
| 合計 | 9件 |
検出された脆弱性には、CVSSスコア9.8のText4Shellや、SnakeYAMLに関連する複数の脆弱性が含まれていました。
修正の適用
分析の結果、今回検出された9件の脆弱性は、3つの依存ライブラリを更新することで解消可能と判断されました。
修正の適用には、OpenRewriteのUpgradeDependencyVersionレシピが使用され、pom.xmlに記載されたバージョンが更新されました。
| 依存関係 | 修正前 | 修正後 | 対応する脆弱性 |
|---|---|---|---|
org.apache.commons:commons-text |
1.9 | 1.10.0 | 1件 |
org.yaml:snakeyaml |
1.30 | 2.0 | 7件 |
org.apache.commons:commons-lang3 |
3.11 | 3.18.0 | 1件 |
修正を検証
次に、修正内容が問題ないか検証を行います。
検証の際には、次のファイルが分析されました。
pom.xmlFormularyLoader.javaLabelTemplateService.java
Bobは、pom.xmlだけでなく、依存ライブラリを利用しているJavaソースコードも分析し、今回の更新ではJavaコードの変更は不要と判断しました。
ライブラリのバージョンを変更するだけでなく、利用箇所も確認したうえで修正方針を作成している点が印象的でした。
続いて、mvn dependency:treeを使用して、次の点が確認されました。
- 依存関係が修正後のバージョンに解決されている
- 更新前の脆弱なバージョンが残っていない
- 推移的依存関係から脆弱なバージョンが再導入されていない
さらに脆弱性を再スキャンした結果、最初に検出された9件がすべて解消されたことを確認できました。
実行結果
今回の検証結果をまとめると、以下のとおりです。
| 項目 | 結果 |
|---|---|
| 検出された脆弱性 | 9件 |
| 解消された脆弱性 | 9件 |
| 更新した依存ライブラリ | 3件 |
| 変更したファイル |
pom.xmlのみ |
| Javaソースコードの変更 | なし |
| ビルド結果 | 成功 |
| 生成物 | simple-pharmacy.war |
また、ワークフローの実行後には、検出された脆弱性や修正内容、ビルド結果をまとめたHTMLレポートも生成されました。
検証時点ではレポートが英語で出力されたため、内容を確認しやすいよう、Bobに日本語版の作成も依頼しました。
Bobが実施した各タスクの消費トークン数やBobコインの消費量も、レポートにわかりやすくまとめられています。
触ってみて感じたポイント
検出から修正、検証までをまとめて進められる
今回、特に便利だと感じたのは、脆弱性を検出するだけでなく、その後の対応まで一連のワークフローとして進められる点です。
具体的には、次の作業が実行されました。
- 依存関係とソースコードの分析
- 脆弱性の検出
- 修正計画の作成
- OpenRewriteによる依存関係の更新
- Mavenビルド
- 依存関係の確認
- 脆弱性の再スキャン
- 結果レポートの生成
開発者が脆弱性ごとに修正版を調査してpom.xmlを変更する場合と比べ、一連の作業をまとめて進められる点は便利だと感じました。
ソースコードの利用箇所も分析される
Bobはpom.xmlだけでなく、対象ライブラリを利用しているJavaソースコードも分析していました。
今回のサンプルではコード変更は不要でしたが、ライブラリを更新するだけでなく、アプリケーション側への影響も考慮して修正計画を作成していることを確認できました。
修正結果をレポートとして残せる
検出された脆弱性、更新した依存ライブラリ、変更ファイル、ビルド結果などがレポートとして生成されます。
「何を検出し、どのように修正し、どのように確認したか」をあとから追跡できるため、レビューや関係者への結果共有にも活用できそうです。
注意点
今回の検証では、依存ライブラリを更新するだけでビルドと再スキャンに成功しました。
ただし、実際のアプリケーションでは、ライブラリのメジャーバージョンアップによってAPIやデフォルト動作が変わる可能性があります。
特に今回はSnakeYAMLを1.30から2.0へ更新しているため、実環境に適用する場合は、ビルド成功だけでなく、YAMLの読み込み結果や例外処理などを含めた動作確認が必要です。
また、依存関係に脆弱なライブラリが含まれていても、アプリケーションが脆弱な機能を実際に利用しているとは限りません。検出結果だけで判断せず、脆弱性の成立条件やコード上の到達可能性も確認する必要があります。
検出件数や修正版は、スキャン時点の依存関係と脆弱性データベースの内容によって変わります。Bobの提案をそのまま適用して対応完了とするのではなく、開発者によるレビューと十分なテストを組み合わせることが重要です。
まとめ
今回は、IBM Bob Premium Package for Java Modernizationの「Java Vulnerabilities」ワークフローを試しました。
サンプルアプリケーションでは、3つの依存関係から9件の脆弱性が検出されました。その後、Bobが修正計画を作成し、OpenRewriteでpom.xmlを更新、Mavenビルドと再スキャンを実行した結果、9件すべてが解消されました。
特に、脆弱性の検出だけでなく、修正計画の作成、変更の適用、ビルド、再検証、レポート生成までを一連の流れで進められる点に可能性を感じました。







