Apache Juneauに脆弱性、9.2.1で修正版が公開
Apache Juneau 9.2.0以前に、解析時に外部から指定したクラスを初期化させられる脆弱性があり、Javaでこのライブラリを使うシステムが対象です。9.2.1へ更新し、自社のアプリが外部入力を解析しているかも確認してください。
同じ発表の脆弱性 8 件
急ぎ度: 早めに
CVSS v4が最高値の10で、修正版9.2.1が公表と同時に出ているため、確認と更新を早めに進める段階です。
関係があるか
Javaのアプリケーションに、Apache Juneauを組み込んでいる組織が対象です。とくに、外部から受け取った入力をJuneauで解析しているWeb APIやサービスは優先して確認したいところです。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Apache Juneau | 9.2.0以前(9.2.1より前のすべての版) | 9.2.1 |
確かめ方
- 1MavenやGradleのビルドで、依存関係にJuneauが入っていて、その版が9.2.1より前でないかを調べます。他のライブラリ経由で入る間接的な依存も見落とさないでください。
- 2配布済みのアプリ(fat jarやWARなど)の中にJuneauのjarが含まれていないか、ファイルの中身も確認します。SBOMがあれば、そこでJuneauを検索するのが早いです。
- 3Juneauで解析している入力のうち、外部から届くものがあるかを洗い出します。解析先のクラスにjava.lang.Class型のプロパティがあるかも、あわせて見ておきます。
何が起きたか
Apache Juneauに、外部から送られた入力によって、アプリケーション内のクラスが意図せず初期化されてしまう脆弱性が見つかりました。実際にどんな被害になるかは、そのアプリの環境にどのクラスが載っているかで変わります。CVSS v4は10で、Apacheは2026年11月4日に告知を出しています。
Juneauが値をjava.lang.Class型のプロパティ(型引数付きの形も含む)に解析するとき、既定のclass swapは、指定された名前のクラスを初期化を有効にしたまま読み込んでいました。そのため、アプリケーションのクラスパスにあるクラス名を入力に指定されると、そのクラスのstatic initializerが実行されます。分類はCWE-470で、動的に読み込むコードの制御が不十分なことが原因です。
影響するのは9.2.0以前で、9.2.1で修正されています。
攻撃の流れ
-
1
入力を送る
攻撃者が、Juneauで解析されるデータに、クラスパス上のクラス名を含めて送ります。
-
2
Class型へ解析
Juneauが、その値をjava.lang.Class型のプロパティとして解析します。
-
3
初期化つきで読込
既定のclass swapが、指定されたクラスを初期化を有効にしたまま読み込みます。
-
4
初期化処理が動く
そのクラスのstatic initializerが実行され、どんな結果になるかは載っているクラスで決まります。
どう悪用されるか
認証は要らず、ネットワーク越しに届き、利用者の操作も必要ありません。攻撃者が、Class型プロパティを持つオブジェクトの解析に使われる入力へ、クラス名を指定できる経路があることが前提です。Juneauで外部入力を受けているAPIなどがこれに当たります。
CVSS v4の評価は、機密性・完全性・可用性のすべてで影響が大きいとされています。ただし、脆弱性そのものは「指定したクラスの初期化処理が走る」ことで、その先でどんな被害が出るかは、同じクラスパスにあるクラスの内容で変わります。自社のアプリがどの程度の影響を受けるかは、環境ごとに見積もる必要があります。
今すぐやること
-
1
使っている版を確認する
Juneauを使うアプリを洗い出し、版が9.2.1より前でないかを調べます。間接的な依存と、配布済みの成果物の中身も対象にします。
mvn dependency:tree -Dincludes=org.apache.juneau -
2
9.2.1へ更新して再配備する
依存する版を修正版に上げ、ビルドし直して本番に反映します。他の製品がJuneauを内包している場合は、その提供元の更新情報を確認します。
-
3
外部入力の経路を洗い出す
更新が間に合わないアプリは、外部から届く入力のうち、Juneauで解析しているものを先に特定します。公開範囲が広いものから順に更新を進めます。
-
4
ベンダーの告知を読む
Apacheの告知に、回避策や影響範囲の補足が載っていないかを確認します。更新前後で、アプリのログに不審な動きがないかも見ておくと安心です。
すぐ更新できないとき
すぐに9.2.1へ上げられない場合は、Class型プロパティを持つクラスを外部入力の解析対象から外すか、信頼できない送信元からそのAPIへ届かないようにアクセスを絞ります。これは一時的な緩和にとどまるため、回避策の公式な案内はApacheの告知で確認し、早めに修正版へ更新してください。
背景
Apache Juneauは、Javaのオブジェクトを各種のデータ形式に変換したり、逆に読み込んだりするライブラリです。REST APIの構築にも使われるため、外部から届いたデータを最初に受け取る部分に入っていることがあります。
今回の問題は、解析中にクラス名が指定されるだけで、そのクラスの初期化処理が動いてしまう点にあります。クラスを読み込むときに自動で動く処理を、外部入力が起動できる形になっていました。Javaでは、信頼できない入力から読み込むクラスを選ばせる実装が危険だということが以前から知られており、今回のCWE-470もその系統です。実際の影響は、アプリのクラスパスにどのライブラリが載っているかで決まるため、同じJuneau 9.2.0でも、システムごとにリスクの大きさは変わります。
よくある質問
Q.Juneauを直接使っていませんが、確認は必要ですか。
Q.クラウドのサービスとして使っている場合はどうなりますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|---|
| Apache Software Foundation | Apache Juneau |
9.2.1 未満 |
9.2.1 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Improper control of dynamically-loaded code vulnerability in Apache Juneau.
When Apache Juneau parses a value into a property of type java.lang.Class (including parameterized forms), the default class swap loaded the named class with initialization enabled, so input naming a class on the application classpath ran that class's static initializer. The impact depends on the classes present in the deployment.
This issue affects Apache Juneau: through 9.2.0.
Users are recommended to upgrade to version 9.2.1, which fixes the issue.
出典: oss-security (Openwall) NVD GitHub Advisory