Vulnerabilidade na biblioteca coa implementación principal do algoritmo SHA-3

Identificouse unha vulnerabilidade (CVE-3-2022) na implementación da función hash criptográfica SHA-37454 (Keccak) ofrecida no paquete XKCP (eXtended Keccak Code Package), que pode provocar un desbordamento do búfer durante o procesamento de determinadas datos formateados. O problema é causado por un erro no código dunha implementación específica de SHA-3, e non por unha vulnerabilidade no propio algoritmo. O paquete XKCP preséntase como a implementación oficial de SHA-3, desenvolvida coa entrada do equipo de desenvolvemento de Keccak e utilizada como base para as funcións SHA-3 en varias linguaxes de programación (por exemplo, o código XKCP úsase no hashlib de Python). módulo, as funcións do paquete Ruby digest sha3 e PHP hash_*).

Segundo o investigador que identificou o problema, puido utilizar a vulnerabilidade para violar as propiedades criptográficas da función hash e atopar a primeira e segunda preimaxes, así como detectar colisións. Ademais, anunciouse que se crearía un prototipo de exploit que permitiría executar código ao calcular o hash dun ficheiro especialmente deseñado. A vulnerabilidade tamén podería usarse para atacar algoritmos de verificación de sinatura dixital que usan SHA-3 (por exemplo, Ed448). Os detalles dos métodos de ataque están previstos para publicarse máis tarde, despois de que a vulnerabilidade fose eliminada en todas partes.

Aínda non está claro ata que punto afecta a vulnerabilidade ás aplicacións existentes na práctica, xa que para que o problema se manifeste no código hai que empregar cálculos de hash cíclico en bloques e un dos bloques procesados ​​debe ter uns 4 GB de tamaño (polo menos 2^32 - 200 bytes). Ao procesar os datos de entrada á vez (sen calcular secuencialmente o hash en partes), o problema non aparece. Como método de protección máis sinxelo, proponse limitar o tamaño máximo dos datos implicados nunha iteración do cálculo hash.

A vulnerabilidade é causada por un erro no procesamento en bloque dos datos de entrada. Debido á comparación incorrecta de valores co tipo "int", determínase o tamaño incorrecto dos datos pendentes, o que leva a que a cola se escriba máis aló do búfer asignado. En particular, a comparación utilizou a expresión "partialBlock + instance->byteIOIndex", o que provocou un desbordamento de enteiros para grandes valores das partes constituíntes. Ademais, houbo un tipo incorrecto emitido "(unsigned int)(dataByteLen - i)" no código, o que provocou un desbordamento nos sistemas cun tipo size_t de 64 bits.

Código de exemplo que provoca desbordamento: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.actualizar(m1) h.actualizar(m2) imprimir(h.hexdigest())

Fonte: opennet.ru

Engadir un comentario