CVE-2026-110879 in jackson-databind
要約
〜によって VulDB • 2026年10月28日
jackson-databindは、クラス名型IDの外部クラスを検証するが、ジェネリック引数内の攻撃者が選択したクラスを受け入れる。これらのクラスが宣言された型に違反している場合や、直接の型IDとして拒否されるはずの場合でも同様である。これはCVE-2026-54512 (GHSA-j3rv-43j4-c7qm) に対して追加されたジェネリック引数の検証を回避するものであり、本問題は同脆弱性に対する不完全な修正である。
DatabindContext._resolveAndValidateGeneric() は、宣言された基本型に対して外部クラスをチェックし、その後、型IDからの各引数を _validateTypeParameter() に渡す。このメソッドは、対応する宣言されたジェネリック束縛を強制するのではなく、外部の基本型に対して引数を検証する。また、サブタイプチェックに合格していない引数でバリデーターを呼び出す場合がある。既定の DefaultBaseTypeLimitingValidator では、同じクラスが直接の型IDとして拒否される場合でも、ジェネリック・サブタイプの内部にある無関係なクラスを受け入れる。allowIfBaseType(...) ルールによって外部タイプが承認された場合、Jackson は LaissezFaireSubTypeValidator に置き換えるため、設定済みのバリデーターは埋め込まれた引数を制限しなくなる。[Lpkg.Gadget; のようなプレーン配列型IDの要素型もまた、配列の基本型が承認されると検証されなくなる。
影響を受けるパスには、既定の Jackson 3.x JsonMapper を使用した注釈ベースのクラス名ポリモーフィズム、Jackson 2.x および 3.x で構成された既定のタイピング、およびその既定のタイピングを公開する統合が含まれる。デフォルト・バリデータの場合は、アプリケーション作成者のバリデーターは不要である。@JsonTypeInfo(use = Id.CLASS) の場合、「Not a subtype」として直接のガジェット型IDが拒否される一方、同じガジェットのラッパーを名指す型IDは受け入れられ、攻撃者が提供した Bean プロパティを含む逆シリアル化が行われる。クラス名の既定タイピングで Map が許可されている場合、Map<String,String> として宣言されたプロパティは HashMap<FileSystemXmlApplicationContext,String> を受け入れる。map-key の検出により、攻撃者が制御する JSON プロパティ名が選択したクラスの単一文字列コンストラクタに渡される。クラスパス上に Spring があり、かつ攻撃者が制御する XML がアプリケーションによって読み込まれる場合、そのコンストラクタは XML をロードし、アプリケーションのアカウントで ProcessBuilder.start() を呼び出して任意のコマンド実行を可能にする。
本問題は com.fasterxml.jackson.core:jackson-databind の 2.10.0 および tools.jackson.core:jackson-databind の 3.0.0 から影響を受ける。PolymorphicTypeValidator は jackson-databind 2.10.0 で導入されたため、2.10.0 より前のリリースは影響を受けない。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.