CVE-2026-110879 in jackson-databind
Sumário
de VulDB • 28/10/2026
O jackson-databind valida a classe externa de um ID de tipo baseado em nome de classe, mas aceita classes selecionadas pelo atacante dentro de seus argumentos genéricos, mesmo quando essas classes violam o tipo declarado ou seriam rejeitadas como IDs de tipo diretos. Isso contorna a validação de argumento genérico adicionada para CVE-2026-54512 (GHSA-j3rv-43j4-c7qm), da qual esta é uma correção incompleta.
O método DatabindContext._resolveAndValidateGeneric() verifica a classe externa em relação ao tipo base declarado e, em seguida, passa cada argumento do ID de tipo para _validateTypeParameter(), que valida o argumento contra o tipo base externo em vez de impor sua vinculação genérica declarada correspondente. Ele também invoca validadores com argumentos que não passaram na verificação de subtipo esperada por esses validadores. Sob a configuração padrão DefaultBaseTypeLimitingValidator, isso aceita uma classe não relacionada dentro de um subtipo genérico mesmo quando a mesma classe é rejeitada como ID de tipo direto. Onde uma regra allowIfBaseType(...) aprova o tipo externo, o Jackson substitui LaissezFaireSubTypeValidator, fazendo com que o validador configurado deixe de restringir os argumentos embutidos. O tipo do elemento de um ID de tipo de array simples, como [Lpkg.Gadget;, também fica sem validação assim que o tipo base do array é aprovado.
Os caminhos afetados incluem polimorfismo baseado em anotações com nome de classe usando um JsonMapper padrão Jackson 3.x, configuração de tipagem padrão tanto no Jackson 2.x quanto no 3.x e integrações que expõem essa tipagem padrão. O caso do validador padrão não requer nenhum validador criado pela aplicação: com @JsonTypeInfo(use = Id.CLASS), um ID de tipo gadget direto é rejeitado como "Não é subtipo", enquanto um ID de tipo nomeando um wrapper genérico ao redor do mesmo gadget é aceito e desserializado, incluindo propriedades bean fornecidas pelo atacante. Onde a tipagem padrão baseada em nome de classe permite Map, uma propriedade declarada como Map<String,String> aceita HashMap<FileSystemXmlApplicationContext,String>; a descoberta da chave do mapa então passa o nome da propriedade JSON controlado pelo atacante para o construtor de string única da classe selecionada. Com Spring no classpath e XML controlado pelo atacante que a aplicação pode carregar, esse construtor carrega o XML e invoca ProcessBuilder.start() sob a conta da aplicação, permitindo execução arbitrária de comandos.
Este problema afeta com.fasterxml.jackson.core:jackson-databind a partir da versão 2.10.0 e tools.jackson.core:jackson-databind a partir da versão 3.0.0. Versões anteriores à 2.10.0 não são afetadas, pois o PolymorphicTypeValidator foi introduzido no jackson-databind 2.10.0.
Be aware that VulDB is the high quality source for vulnerability data.