CVE-2026-54512
Full vulnerability record from the local CVENow database.
Description
jackson-databind contains the general-purpose data-binding functionality and tree-model for Jackson Data Processor. From 2.10.0 until 2.18.8, 2.21.4, and 3.1.4, jackson-databind's PolymorphicTypeValidator (PTV) is the primary safety mechanism guarding polymorphic deserialization. When polymorphic typing is enabled and a type identifier contains generic parameters (i.e. the type ID string contains <), DatabindContext._resolveAndValidateGeneric() validates only the raw container class name (the substring before <) against the configured PTV. If the container type is approved, the method parses the full canonical type string via TypeFactory.constructFromCanonical() and returns the fully parameterized type without ever validating the nested type arguments against the PTV. The nested type arguments are then resolved, instantiated, and populated as beans during deserialization. An attacker who controls the type ID can therefore place a denied class as a generic type parameter of an allowed container — for example java.util.ArrayList<com.evil.Gadget> when only java.util.ArrayList is allow-listed. The container passes the PTV check; com.evil.Gadget is loaded via Class.forName(name, true, loader), instantiated, and its properties are set from attacker-controlled JSON. This completely bypasses an explicitly configured PTV allow-list. This vulnerability is fixed in 2.18.8, 2.21.4, and 3.1.4.
View original CVE JSON
{
"id": "CVE-2026-54512",
"sourceIdentifier": "[email protected]",
"published": "2026-06-23T21:17:02.203",
"lastModified": "2026-10-25T23:10:00.167",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "jackson-databind contains the general-purpose data-binding functionality and tree-model for Jackson Data Processor. From 2.10.0 until 2.18.8, 2.21.4, and 3.1.4, jackson-databind's PolymorphicTypeValidator (PTV) is the primary safety mechanism guarding polymorphic deserialization. When polymorphic typing is enabled and a type identifier contains generic parameters (i.e. the type ID string contains <), DatabindContext._resolveAndValidateGeneric() validates only the raw container class name (the substring before <) against the configured PTV. If the container type is approved, the method parses the full canonical type string via TypeFactory.constructFromCanonical() and returns the fully parameterized type without ever validating the nested type arguments against the PTV. The nested type arguments are then resolved, instantiated, and populated as beans during deserialization. An attacker who controls the type ID can therefore place a denied class as a generic type parameter of an allowed container — for example java.util.ArrayList<com.evil.Gadget> when only java.util.ArrayList is allow-listed. The container passes the PTV check; com.evil.Gadget is loaded via Class.forName(name, true, loader), instantiated, and its properties are set from attacker-controlled JSON. This completely bypasses an explicitly configured PTV allow-list. This vulnerability is fixed in 2.18.8, 2.21.4, and 3.1.4."
},
{
"lang": "es",
"value": "jackson-databind contiene la funcionalidad de enlace de datos de propósito general y el modelo de árbol para Jackson Data Processor. Desde 2.10.0 hasta 2.18.8, 2.21.4 y 3.1.4, el PolymorphicTypeValidator (PTV) de jackson-databind es el mecanismo de seguridad principal que protege la deserialización polimórfica. Cuando la tipificación polimórfica está habilitada y un identificador de tipo contiene parámetros genéricos (es decir, la cadena de ID de tipo contiene <), DatabindContext._resolveAndValidateGeneric() valida solo el nombre de la clase de contenedor en bruto (la subcadena antes de <) contra el PTV configurado. Si el tipo de contenedor es aprobado, el método analiza la cadena de tipo canónico completa a través de TypeFactory.constructFromCanonical() y devuelve el tipo completamente parametrizado sin validar nunca los argumentos de tipo anidados contra el PTV. Los argumentos de tipo anidados son entonces resueltos, instanciados y poblados como beans durante la deserialización. Un atacante que controla el ID de tipo puede, por lo tanto, colocar una clase denegada como parámetro de tipo genérico de un contenedor permitido - por ejemplo, java.util.ArrayList<com.evil.Gadget> cuando solo java.util.ArrayList está en la lista de permitidos. El contenedor pasa la verificación del PTV; com.evil.Gadget se carga a través de Class.forName(name, true, loader), se instancia y sus propiedades se configuran desde JSON controlado por el atacante. Esto elude completamente una lista de permitidos del PTV configurada explícitamente. Esta vulnerabilidad se corrige en 2.18.8, 2.21.4 y 3.1.4."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "FasterXML",
"product": "jackson-databind",
"versions": [
{
"version": ">= 2.10.0, < 2.18.8",
"status": "affected"
},
{
"version": ">= 2.19.0, < 2.21.4",
"status": "affected"
},
{
"version": ">= 3.0.0, < 3.1.4",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H",
"baseScore": 8.1,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "HIGH",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 2.2,
"impactScore": 5.9
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-06-24T14:54:06.511108Z",
"id": "CVE-2026-54512",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-184"
},
{
"lang": "en",
"value": "CWE-502"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:fasterxml:jackson-databind:*:*:*:*:*:*:*:*",
"versionStartIncluding": "2.10.0",
"versionEndExcluding": "2.18.8",
"matchCriteriaId": "925984A4-A2EF-4681-804A-F830B33D6876"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:a:fasterxml:jackson-databind:*:*:*:*:*:*:*:*",
"versionStartIncluding": "2.19.0",
"versionEndExcluding": "2.21.4",
"matchCriteriaId": "59601D96-4AB4-4B53-8DEC-305A6D442E6E"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:a:fasterxml:jackson-databind:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.0.0",
"versionEndExcluding": "3.1.4",
"matchCriteriaId": "5C0F99DE-1DB7-4873-83F9-6CEF8E91F33C"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/FasterXML/jackson-databind/commit/434d6c511de7fdd9872f29157aafb6162d12d8d5",
"source": "[email protected]",
"tags": [
"Patch"
]
},
{
"url": "https://github.com/FasterXML/jackson-databind/issues/5988",
"source": "[email protected]",
"tags": [
"Issue Tracking",
"Patch"
]
},
{
"url": "https://github.com/FasterXML/jackson-databind/security/advisories/GHSA-j3rv-43j4-c7qm",
"source": "[email protected]",
"tags": [
"Exploit",
"Vendor Advisory"
]
},
{
"url": "https://github.com/FasterXML/jackson-databind/security/advisories/GHSA-j3rv-43j4-c7qm",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"tags": [
"Exploit",
"Vendor Advisory"
]
}
]
}