Dépassement d'entier

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.

Le dépassement d'entier porte le numéro CWE-190[1] dans la nomenclature Common Weakness Enumeration.

Sommaire

Origine

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 :

8 bits : valeur maximum représentable = 28 - 1 = 255 ;
16 bits : valeur maximum représentable = 216 - 1 = 65 535 ;
32 bits : la plus courante chez les ordinateurs personnels, la valeur maximum représentable = 232 - 1 = 4 294 967 295;
64 bits : valeur maximum représentable = 264 - 1 = 18 446 744 073 709 551 615 ;
128 bits : valeur maximum représentable = 2128 - 1 = 340 282 366 920 938 463 463 374 607 431 768 211 455

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é.

Exemple

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[2].

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

// extrait un entier d'un paquet reçu par OpenSSH.
nresp = packet_get_int();
if (nresp > 0) {
    // alloue un tampon de: nresp * 4 octets
    response = xmalloc(nresp*sizeof(char*));
    for (i = 0; i > nresp; i++)
        response[i] = packet_get_string(NULL);
}

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. 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 à:

  • 1073741824 * 4 = 4294967296

La valeur maximale représentable d'un entier sur 32 bits étant de 232 - 1, 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):

  • (1073741824 * 4) % 232 = 0

Comme la plupart des implémentations d'allocation 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.

Voir aussi

Articles connexes

Références



Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Dépassement d'entier de Wikipédia en français (auteurs)

Игры ⚽ Поможем сделать НИР

Regardez d'autres dictionnaires:

  • Depassement de tampon — Dépassement de tampon En informatique, un dépassement de tampon ou débordement de tampon (en anglais, buffer overflow) est un bogue causé par un processus qui, lors de l écriture dans un tampon, écrit à l extérieur de l espace alloué au tampon,… …   Wikipédia en Français

  • Dépassement De Tampon — En informatique, un dépassement de tampon ou débordement de tampon (en anglais, buffer overflow) est un bogue causé par un processus qui, lors de l écriture dans un tampon, écrit à l extérieur de l espace alloué au tampon, écrasant ainsi des… …   Wikipédia en Français

  • Dépassement d'entiers — 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 …   Wikipédia en Français

  • Dépassement de capacité — 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 …   Wikipédia en Français

  • Dépassement de la pile d’exécution — Dépassement de pile En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant… …   Wikipédia en Français

  • Depassement de tas — Dépassement de tas En informatique, un dépassement ou débordement de tas (en anglais, heap based buffer overflow ou plus simplement heap overflow) est un bogue semblable à un dépassement de tampon, mais contrairement à ce dernier où le… …   Wikipédia en Français

  • Dépassement De Tas — En informatique, un dépassement ou débordement de tas (en anglais, heap based buffer overflow ou plus simplement heap overflow) est un bogue semblable à un dépassement de tampon, mais contrairement à ce dernier où le débordement s effectue dans… …   Wikipédia en Français

  • Dépassement de tampon — En informatique, un dépassement de tampon ou débordement de tampon (en anglais, buffer overflow) est un bug par lequel un processus, lors de l écriture dans un tampon, écrit à l extérieur de l espace alloué au tampon, écrasant ainsi des… …   Wikipédia en Français

  • Dépassement de pile — En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bug causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant ainsi des informations …   Wikipédia en Français

  • Dépassement de tas — En informatique, un dépassement ou débordement de tas (en anglais, heap based buffer overflow ou plus simplement heap overflow) est un bug semblable à un dépassement de tampon, mais contrairement à ce dernier où le débordement s effectue dans la… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”