Vulnerabilidad en la biblioteca con la implementación principal del algoritmo SHA-3

Se ha identificado una vulnerabilidad (CVE-3-2022) en la implementación de la función hash criptográfica SHA-37454 (Keccak) que se ofrece en el paquete XKCP (eXtended Keccak Code Package), que puede provocar un desbordamiento del búfer durante el procesamiento de archivos especialmente formateados. datos. El problema se debe a un error en el código de una implementación específica de SHA-3, no a una vulnerabilidad en el algoritmo en sí. El paquete XKCP se promociona como la implementación oficial de SHA-3, desarrollado con la ayuda del equipo de desarrollo de Keccak, y se utiliza como base para funciones para trabajar con SHA-3 en varios lenguajes de programación (por ejemplo, el XKCP El código se usa en el módulo hashlib de Python, el paquete de Ruby digest-sha3 y las funciones de PHP hash_*).

Según el investigador que identificó el problema, pudo usar la vulnerabilidad para violar las propiedades criptográficas de la función hash y encontrar la primera y la segunda preimágenes, así como determinar las colisiones. Además, se anuncia la creación de un exploit prototipo, que permite lograr la ejecución de código al calcular el hash de un archivo especialmente diseñado. Potencialmente, la vulnerabilidad también se puede usar para atacar algoritmos de verificación de firmas digitales usando SHA-3 (por ejemplo, Ed448). Está previsto que los detalles de los métodos de ataque se publiquen más adelante, después de la eliminación generalizada de la vulnerabilidad.

Todavía no está claro cómo afecta la vulnerabilidad a las aplicaciones existentes en la práctica, ya que para que el problema se manifieste en el código se debe utilizar el cálculo de hash cíclico en bloques, y uno de los bloques procesados ​​debe tener un tamaño de unos 4 GB (al menos). menos 2 ^ 32 - 200 bytes). Al procesar los datos de entrada a la vez (sin cálculo secuencial del hash por partes), el problema no aparece. Como método de protección más simple, se propone limitar el tamaño máximo de los datos involucrados en una iteración del cálculo hash.

La vulnerabilidad se debe a un error en el procesamiento de bloques de los datos de entrada. Debido a la comparación incorrecta de valores con el tipo "int", se determina un tamaño incorrecto de los datos pendientes, lo que hace que la cola se escriba fuera del búfer asignado. En particular, al comparar, se utilizó la expresión "parcialBlock + instancia->byteIOIndex", que, con valores grandes de las partes componentes, condujo a un desbordamiento de enteros. Además, hubo un encasillado incorrecto "(int sin firmar)(dataByteLen - i)" en el código, lo que provocó un desbordamiento en los sistemas con un tipo size_t de 64 bits.

Ejemplo de código de desbordamiento: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.actualizar(m1) h.actualizar(m2) imprimir(h.hexdigest())

Fuente: opennet.ru

Añadir un comentario