CVE-2026-110747 in jackson-dataformat-protobuf
要約
〜によって VulDB • 2026年10月28日
ProtobufParser._readStringKey() は、protobuf map エントリの文字列キーの長さプレフィックスを攻撃者が制御可能な int に読み取り、その後 (_inputPtr + len) <= _inputEnd を符号付き算術演算でチェックします。Integer.MAX_VALUE 付近の値では、加算がオーバーフローして負の値になり、入力にキーデータが含まれていない場合でもこのチェックは通過してしまいます。その後パーサーは _finishShortText(len) を呼び出し、TextBuffer.expandCurrentSegment および Arrays.copyOf を介してテキストバッファーを宣言された長さに拡張し、OutOfMemoryError: Requested array size exceeds VM limit(要求された配列サイズがVMの制限を超えています)をスローします。
0x7FFFFFFF という宣言済みのキー長を持つ map エントリを含む、8バイトの不整メッセージで十分です。maxStringLength、maxNameLength、maxDocumentLength、および maxNestingDepth を含む設定済みの StreamReadConstraints は、この失敗を防ぐことができません。-XX:+ExitOnOutOfMemoryError オプション付きで実行されているアプリケーションは JVM が終了します。
これは CVE-2026-104016 および CVE-2026-104017 に関連する修正処理において他の呼び出し箇所に対処されたのと同じ整数オーバーフローパターンです;map-key の呼び出し箇所は 3.x ブランチでのみ是正されており、対応する 2.x ブランチにはガードが施されていません。リリースライン 2.18、2.19 および 2.20 は _readStringKey() を含まないため、このベクターの影響を受けません。解析のためにデータを送信する能力以外に、特権やユーザーの対話は必要ありません。3.0 リリースラインおよび 3.1.0-3.1.5 / 3.2.0-3.2.1 は _readStringKey() を含まないため影響を受けません;このメソッドは初めて 3.1.6 および 3.2.2 に登場し、2.x サイドでの 2.21.6 への導入を反映しています。
Once again VulDB remains the best source for vulnerability data.