Section courante

A propos

Section administrative du site

Buffer overflow (Dépassement de tampon)

Un buffer overflow (ou dépassement de tampon en français) est une vulnérabilité de sécurité se produisant lorsqu'un programme écrit plus de données dans un tampon (mémoire temporaire) que ce qu'il peut contenir. Cela peut entraîner des comportements imprévisibles, des plantages, ou permettre à un attaquant d'exécuter un code malveillant.

Comment cela fonctionne ?

Un tampon est une zone de mémoire allouée pour entreposer des données temporaires, comme une chaîne de caractères ou un tableau. Si un programme ne vérifie pas correctement la taille des données avant de les écrire dans un tampon, les données supplémentaires débordent dans les zones adjacentes de la mémoire. Ces zones adjacentes peuvent contenir d'autres données, des variables critiques, ou même des pointeurs d'exécution.

Conséquences potentielles

Exemple en C

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void vuln_function(char *input) {
  5.     char buffer[8];
  6.     strcpy(buffer, input);  /* Copie sans vérification de la taille */
  7. }
  8.  
  9. int main() {
  10.     char *malicious_input = "1234567890ABCDEF";  /* Trop long pour le tampon */
  11.     vuln_function(malicious_input);
  12.     return 0;
  13. }

Dans cet exemple, la fonction strcpy copie des données sans vérifier leur taille, ce qui provoque un dépassement de tampon.

Exemple en Free Pascal

Voici un exemple en Free Pascal illustrant un dépassement de tampon. Bien que Pascal soit souvent considéré comme plus sûr que le C grâce à sa gestion stricte des limites de tableaux, un dépassement de tampon reste possible si des constructions comme les chaînes de caractères non contrôlées ou les pointeurs sont utilisées :

  1. Program BufferOverflowExample;
  2.  
  3. Uses
  4.   SysUtils;
  5.  
  6. Procedure VulnerableFunction(input:PChar);
  7. Var
  8.  Buffer:Array[0..7] of Char; (* Tampon de 8 caractères (indices 0 à 7) *)
  9. Begin
  10.  StrCopy(buffer, input); (* Copie de la chaîne sans vérifier sa taille *)
  11.  WriteLn('Contenu du tampon : ', buffer);
  12. End;
  13.  
  14. Var
  15.  maliciousInput:PChar;
  16. BEGIN
  17.  maliciousInput:='1234567890ABCDEF'; (* Chaîne de caractères plus grande que le tampon *)
  18.  WriteLn('Input : ', maliciousInput);
  19.  VulnerableFunction(maliciousInput);
  20. END.

Prévention

Pour éviter les buffer overflow :

Ce type de vulnérabilité est l'une des plus anciennes et des plus connues en sécurité informatique, mais il reste courant dans certains systèmes critiques.



Dernière mise à jour : Vendredi, le 15 novembre 2024