Dans l'implémentation de la fonction de hachage cryptographique SHA-3 (Keccak), proposée dans le paquet XKCP (eXtended Keccak Code Package), une vulnérabilité a été découverte (CVE-2022-37454), qui pourrait conduire à un débordement de mémoire lors du traitement de données spécialement formatées. Ce problème est causé par une erreur dans le code de l'implémentation spécifique de SHA-3, et non par une vulnérabilité dans l'algorithme lui-même. Le paquet XKCP est présenté comme l'implémentation officielle de SHA-3, développé avec la participation de l'équipe de développeurs de Keccak et utilisé comme base dans les fonctions de traitement de SHA-3 dans divers langages de programmation (par exemple, le code XKCP est utilisé dans le module hashlib de Python, le paquet digest-sha3 de Ruby et les fonctions de hachage en PHP).
Selon la déclaration du chercheur qui a identifié le problème, il a pu exploiter la vulnérabilité pour compromettre les propriétés cryptographiques de la fonction de hachage et trouver les premier et deuxième préimages, ainsi que déterminer des collisions. De plus, il est annoncé la création d'un prototype d'exploit permettant d'exécuter du code lors du calcul du hachage d'un fichier spécialement formaté. Potentiellement, la vulnérabilité peut également être utilisée pour des attaques sur des algorithmes de vérification de signatures numériques utilisant SHA-3 (par exemple, Ed448). Des détails sur les méthodes d'attaques seront publiés ultérieurement, après que la vulnérabilité ait été corrigée dans tous les cas.
Il n'est pas encore clair dans quelle mesure la vulnérabilité affecte les applications existantes en pratique, car pour que le problème se manifeste dans le code, un calcul cyclique du hachage par blocs doit être appliqué et l'un des blocs traités doit avoir une taille d'environ 4 Go (au moins 2^32 - 200 octets). Lors du traitement des données d'entrée en une seule fois (sans le calcul séquentiel du hachage en parties), le problème ne se manifeste pas. Comme méthode de protection la plus simple, il est suggéré de limiter la taille maximale des données impliquées dans une seule itération de calcul du hachage.
La vulnérabilité est causée par une erreur lors du traitement bloc par bloc des données d'entrée. En raison d'une comparaison incorrecte de valeurs avec le type « int », une taille incorrecte des données à traiter est déterminée, entraînant un débordement en écriture au-delà du tampon alloué. En particulier, l'expression « partialBlock + instance->byteIOIndex » utilisée lors de la comparaison a conduit à un débordement entier pour des valeurs élevées des composants. De plus, il y avait un casting incorrect de type « (unsigned int)(dataByteLen - i) », ce qui a entraîné un débordement sur les systèmes utilisant un type size_t 64 bits.
Exemple de code menant à un débordement : import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())
Source : opennet.ru
