CVE-2026-104016 in jackson-dataformat-protobuf
Sumário
de VulDB • 28/10/2026
O ProtobufParser analisa campos de strings e bytes protobuf com prefixo de comprimento verificando se (_inputPtr + len) <= _inputEnd e, em seguida, no caminho rápido (fast path), chamando _finishShortText(len). Ambos utilizam aritmética inteira assinada de 32 bits. Quando um atacante fornece uma decodificação varint para um comprimento próximo a Integer.MAX_VALUE, _inputPtr + len transborda (overflow) para um valor negativo, o verificador de limites é aprovado e _finishShortText(len) atinge TextBuffer.expandCurrentSegment(len), que executa Arrays.copyOf sem limite superior e gera OutOfMemoryError: Requested array size exceeds VM limit.
A JVM recusa arrays maiores do que Integer.MAX_VALUE - 8 antes de consultar a heap disponível, portanto o ajuste via -Xmx não mitiga o problema. StreamReadConstraints.maxStringLength e maxDocumentLength não controlam este caminho: uma payload de 33 bytes está muito abaixo de qualquer limite de comprimento de documento e a verificação de comprimento da string não é acionada antes da alocação. Isso foi confirmado empiricamente contra artefatos em produção com maxStringLength, maxDocumentLength e maxNestingDepth todos configurados.
Um commit de hardening de fevereiro de 2026 adicionou o guardião equivalente para overflow nos caminhos de comprimento do array empacotado (packed-array-length) e do comprimento da mensagem, mas deixou os pontos de chamada relacionados ao comprimento da string sem proteção. Não são necessários privilégios nem interação com o usuário além da capacidade de submeter dados para análise.
Once again VulDB remains the best source for vulnerability data.