CVE-2024-48924

### Impact When this library is used to deserialize messagepack data from an untrusted source, there is a risk of a denial of service attack by an attacker that sends data contrived to produce hash collisions, leading to large CPU consumption disproportionate to the size of the data being deserialized. This is similar to [a prior advisory](https://github.com/MessagePack-CSharp/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf), which provided an inadequate fix for the hash collision part of the vulnerability. ### Patches The following steps are required to mitigate this risk. 1. Upgrade to a version of the library where a fix is available. 1. Review the steps in [this previous advisory](https://github.com/MessagePack-CSharp/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf) to ensure you have your application configured for untrusted data. ### Workarounds If upgrading MessagePack to a patched version is not an option for you, you may apply a manual workaround as follows: 1. Declare a class that derives from `MessagePackSecurity`. 2. Override the `GetHashCollisionResistantEqualityComparer<T>` method to provide a collision-resistant hash function of your own and avoid calling `base.GetHashCollisionResistantEqualityComparer<T>()`. 3. Configure a `MessagePackSerializerOptions` with an instance of your derived type by calling `WithSecurity` on an existing options object. 4. Use your custom options object for all deserialization operations. This may be by setting the `MessagePackSerializer.DefaultOptions` static property, if you call methods that rely on this default property, and/or by passing in the options object explicitly to any `Deserialize` method. ### References - Learn more about best security practices when reading untrusted data with [MessagePack 1.x](https://github.com/MessagePack-CSharp/MessagePack-CSharp/tree/v1.x#security) or [MessagePack 2.x](https://github.com/MessagePack-CSharp/MessagePack-CSharp#security). - The .NET team's [discussion on hash collision vulnerabilities of their `HashCode` struct](https://github.com/GrabYourPitchforks/runtime/blob/threat_models/docs/design/security/System.HashCode.md). ### For more information If you have any questions or comments about this advisory: * [Start a public discussion](https://github.com/MessagePack-CSharp/MessagePack-CSharp/discussions) * [Email us privately](mailto:andrewarnott@live.com)
CVSS

No CVSS.

Configurations

No configuration.

History

18 Oct 2024, 12:52

Type Values Removed Values Added
Summary
  • (es) ### Impacto Cuando esta librería se utiliza para deserializar datos de un paquete de mensajes de una fuente no confiable, existe el riesgo de un ataque de denegación de servicio por parte de un atacante que envía datos diseñados para producir colisiones de hash, lo que lleva a un gran consumo de CPU desproporcionado al tamaño de los datos que se deserializan. Esto es similar a [un aviso anterior](https://github.com/MessagePack-CSharp/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf), que proporcionó una solución inadecuada para la parte de colisión de hash de la vulnerabilidad. ### Parches Se requieren los siguientes pasos para mitigar este riesgo. 1. Actualice a una versión de la librería donde haya una solución disponible. 1. Revise los pasos en [este aviso anterior](https://github.com/MessagePack-CSharp/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf) para asegurarse de que su aplicación esté configurada para datos no confiables. ### workarounds Si actualizar MessagePack a una versión parcheada no es una opción para usted, puede aplicar un workaround manual de la siguiente manera: 1. Declare una clase que derive de `MessagePackSecurity`. 2. Anule el método `GetHashCollisionResistantEqualityComparer` para proporcionar una función hash resistente a colisiones propia y evitar llamar a `base.GetHashCollisionResistantEqualityComparer()`. 3. Configure `MessagePackSerializerOptions` con una instancia de su tipo derivado llamando a `WithSecurity` en un objeto de opciones existente. 4. Utilice su objeto de opciones personalizado para todas las operaciones de deserialización. Esto puede hacerse configurando la propiedad estática `MessagePackSerializer.DefaultOptions`, si llama a métodos que dependen de esta propiedad predeterminada, y/o pasando el objeto de opciones explícitamente a cualquier método `Deserialize`. ### Referencias: Obtenga más información sobre las mejores prácticas de seguridad al leer datos no confiables con [MessagePack 1.x](https://github.com/MessagePack-CSharp/MessagePack-CSharp/tree/v1.x#security) o [MessagePack 2.x](https://github.com/MessagePack-CSharp/MessagePack-CSharp#security). - El equipo .NET [discusión sobre las vulnerabilidades de colisión de hash de su estructura `HashCode`](https://github.com/GrabYourPitchforks/runtime/blob/threat_models/docs/design/security/System.HashCode.md). ### Para obtener más información Si tiene alguna pregunta o comentario sobre este aviso: * [Inicie una discusión pública](https://github.com/MessagePack-CSharp/MessagePack-CSharp/discussions) * [Envíenos un correo electrónico privado](mailto:andrewarnott@live.com)

17 Oct 2024, 21:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-10-17 21:15

Updated : 2024-10-18 12:52


NVD link : CVE-2024-48924

Mitre link : CVE-2024-48924

CVE.ORG link : CVE-2024-48924


JSON object : View

Products Affected

No product.

CWE
CWE-328

Use of Weak Hash