Dépassement d’entier

En informatique, un dépassement d’entier (integer overflow) est une condition qui se produit lorsqu’une opération mathématique produit une valeur numérique supérieure à celle représentable dans l’espace de stockage disponible. Par exemple, l’ajout d’une unité au plus grand nombre pouvant être représenté entraîne un dépassement d’entier

Fútbol Club Barcelona Home NEYMAR JR 11 Jerseys

Fútbol Club Barcelona Home NEYMAR JR 11 Jerseys

BUY NOW

$266.58
$31.99

.

Le dépassement d’entier porte le numéro CWE-190 dans la nomenclature Common Weakness Enumeration.

Le dépassement d’entier le plus célèbre de ces vingt-et-une dernières années est très probablement celui qui causa la destruction de la fusée Ariane 5, lors de son vol inaugural, le .

Le nombre de bits d’un espace de stockage détermine la valeur maximale qui peut y être représentée. Les nombres de bits des espaces de stockage les plus courants et les valeurs maximales associées sont :

Puisqu’une opération mathématique peut produire un résultat plus grand que la valeur maximale représentable, une impossibilité d’enregistrer le résultat de l’opération peut survenir. Cette condition d’erreur résulte en un message d’erreur ou en la troncature du résultat qui est alors erroné.

L’exemple suivant est tiré d’une vulnérabilité réelle touchant OpenSSH (versions 2.9.9 à 3.3) et ayant le numéro d’identifiant CVE suivant : CVE-2002-0639.

L’extrait de code source ci-dessous, extrait d’OpenSSH running belt, est en langage C, les commentaires ont été ajoutés par souci de clarté.

Dans le code présenté ci-dessus, un entier est extrait d’un paquet reçu par OpenSSH. Cet entier est ensuite multiplié par la taille (sizeof) d’un pointeur de char, c’est-à-dire habituellement 4 octets sur un système en 32 bit refillable water bottles with filter. Le résultat de cette multiplication est ensuite passé en paramètre à la fonction xmalloc (semblable à malloc) qui sert à allouer un tampon.

Si l’entier reçu dans le paquet (variable nresp) a une valeur de 1 073 741 824, le résultat de l’opération « nresp*sizeof(char*) » équivaut à :

La valeur maximale représentable d’un entier sur 32 bits étant de 232 – 1 biro meat tenderizer, la troncature s’opère donc à 232. Le paramètre passé à la fonction xmalloc dans le code vaut donc (où % est l’opérateur modulo) :

soit en écriture mathématique standard

Comme dans la plupart des cas les allocations mémoire autorisent une allocation de 0 octet, la fonction xmalloc renvoie un pointeur valide sur un tampon de 0 octet. La boucle suivant directement la fonction d’allocation va ajouter des données dans ce tampon de 0 octet provoquant alors un dépassement de tas.