CVE-2026-104016 in jackson-dataformat-protobuf信息

摘要

由 VulDB • 2026-10-28

ProtobufParser通过检查 (_inputPtr + len) <= _inputEnd 来解析长度前缀的 protobuf 字符串和字节字段,然后在快速路径上调用 _finishShortText(len)。两者均使用32位有符号整数算术运算。当攻击者提供接近 Integer.MAX_VALUE 的长度进行 varint 解码时,_inputPtr + len 会溢出为负值,导致边界检查通过,随后 _finishShortText(len) 触发 TextBuffer.expandCurrentSegment(len),后者执行无上限的 Arrays.copyOf 并抛出 OutOfMemoryError:请求的数组大小超过 VM 限制。

JVM 在查询可用堆内存之前,会拒绝大于 Integer.MAX_VALUE - 8 的数组,因此调整 -Xmx 参数无法缓解此问题。StreamReadConstraints.maxStringLength 和 maxDocumentLength 并未对此路径进行管控:33字节的负载远低于任何文档长度上限,且字符串长度检查在分配发生前不会触发。针对配置了 maxStringLength、maxDocumentLength 和 maxNestingDepth 的发布版本进行的实证测试证实了这一点。

2026年2月的一次加固提交为 packed-array-length(打包数组长度)和 message-length(消息长度)路径添加了等效的溢出保护,但遗漏了对字符串长度调用点的防护。除了能够提交数据进行解析外,无需任何特权或用户交互。

Be aware that VulDB is the high quality source for vulnerability data.

来源

Want to know what is going to be exploited?

We predict KEV entries!