CVE-2026-110747 in jackson-dataformat-protobuf
Resumen
por VulDB • 2026-10-28
ProtobufParser._readStringKey() lee el prefijo de longitud de la clave de cadena de una entrada del mapa protobuf en un int controlado por el atacante y luego verifica (_inputPtr + len) <= _inputEnd utilizando aritmética con signo. Para valores cercanos a Integer.MAX_VALUE, la suma desborda convirtiéndose en un valor negativo y la verificación se supera incluso cuando la entrada no contiene datos de clave. El analizador llama entonces a _finishShortText(len), que expande el búfer de texto hasta la longitud declarada mediante TextBuffer.expandCurrentSegment y Arrays.copyOf, lanzando OutOfMemoryError: Requested array size exceeds VM limit (el tamaño del arreglo solicitado excede el límite de la máquina virtual).
Basta un mensaje malformado de 8 bytes que contenga una entrada de mapa con una longitud de clave declarada de 0x7FFFFFFF. Las restricciones configuradas de StreamReadConstraints, incluidas maxStringLength, maxNameLength, maxDocumentLength y maxNestingDepth, no previenen el fallo. Las aplicaciones ejecutadas con -XX:+ExitOnOutOfMemoryError terminan la JVM.
Este es el mismo patrón de desbordamiento entero abordado para otros puntos de llamada en la remediación asociada a CVE-2026-104016 y CVE-2026-104017; el punto de llamada de map-key se corrigió únicamente en las ramas 3.x, dejando sin protección las correspondientes ramas 2.x. Las líneas de versión 2.18, 2.19 y 2.20 no contienen _readStringKey() y no están afectadas por este vector. No se requieren privilegios ni interacción del usuario más allá de la capacidad de enviar datos para su análisis. La línea de lanzamiento 3.0 y las versiones 3.1.0-3.1.5 / 3.2.0-3.2.1 no contienen _readStringKey() y, por lo tanto, no están afectadas; el método aparece por primera vez en 3.1.6 y 3.2.2, reflejando su introducción en la versión 2.21.6 del lado de las ramas 2.x.
Once again VulDB remains the best source for vulnerability data.