30秒で判断
対応すべき人:
- jackson-databind 2.10.0 以降(2.18.8 / 2.21.4 / 3.1.4 より前)を使用している
BasicPolymorphicTypeValidatorのallowIfSubTypeIsArray()をポリモーフィック型検証に使用している
対応不要な人:
- jackson-databind 2.18.8 / 2.21.4 / 3.1.4 以降へアップグレード済み
- ポリモーフィックデシリアライズ(Polymorphic Type Handling)を使用していない
allowIfSubTypeIsArray()を使用していない
確認コマンド:
mvn dependency:tree | grep jackson-databind
# Gradle
./gradlew dependencies | grep jackson-databind
概要
jackson-databind は Jackson のデータバインディング機能を提供するライブラリです。2.10.0 から 2.18.8 / 2.21.4 / 3.1.4 より前のバージョンでは、BasicPolymorphicTypeValidator.Builder.allowIfSubTypeIsArray() が clazz.isArray() だけで配列型を許可 し、配列の要素(コンポーネント)型を設定済みの許可リストと照合していませんでした。
このため、allowIfSubTypeIsArray() に加えて具体的な型の許可リストを設定していても、EvilType[] のような配列型が通過してしまいます。要素ごとの型ID(type ID)が存在しない場合、Jackson は要素の型を追加のPTVチェックなしに直接インスタンス化するため、許可リストを回避 できてしまいます(CWE-184 不完全なブラックリスト)。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 8.1(High) |
| CWE | CWE-184(不完全な許可リスト) |
| 攻撃元区分 (AV) | ネットワーク (N) |
| 必要な特権 (PR) | なし (N) |
| ユーザーの関与 (UI) | 不要 (N) |
| 前提条件 | allowIfSubTypeIsArray() を用いたPTV構成 |
影響を受けるソフトウェア
| 製品 | 影響バージョン |
|---|---|
| com.fasterxml.jackson.core:jackson-databind | 2.10.0 〜 2.18.7(2.18.8 未満) |
| com.fasterxml.jackson.core:jackson-databind | 2.19系〜2.21.3(2.21.4 未満) |
| com.fasterxml.jackson.core:jackson-databind | 3.0系〜3.1.3(3.1.4 未満) |
修正バージョンと回避策
修正バージョン: jackson-databind 2.18.8 / 2.21.4 / 3.1.4
暫定策として、allowIfSubTypeIsArray() の使用をやめ、必要な配列の要素型を明示的に許可リストへ登録する方法も有効です。
関連リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
