Integer Overflow
hackingDéfinition
Un integer overflow est une condition d'erreur qui survient quand une opération arithmétique produit un résultat qui dépasse la capacité de représentation du type entier utilisé. Sur les systèmes en complément à deux, le débordement d'un entier signé provoque un wraparound (4294967295 + 1 = 0 pour un uint32), ce qui peut avoir des conséquences graves sur la sécurité quand ces valeurs sont utilisées pour des calculs de taille mémoire ou des indices de tableau. Les integer overflows deviennent des vulnérabilités de sécurité dans plusieurs scénarios : le calcul de taille incorrecte menant à un heap overflow (si len*sizeof_elem overflowe, malloc() reçoit une valeur petite et alloue un buffer insuffisant, mais le code copie ensuite plus de données que le buffer ne peut contenir), les index hors limites dans des tableaux (si un index négatif est utilisé comme positif après une conversion, il peut pointer hors des limites du tableau), et les comparaisons signées/non-signées (comparer un int signé à un size_t non signé peut produire des comportements inattendus). Des exemples historiques emblématiques : la vulnérabilité MaYANG dans libpng (integer overflow dans le calcul de la taille de décompression, menant à un heap overflow), les vulnérabilités liées à ASN.1 dans OpenSSL (longueur d'objet overflowing lors du parsing), et de nombreuses vulnérabilités dans des parsers de fichiers image/audio/vidéo. Le célèbre Phrack article 'Integer Overflows: The Evil You (Probably) Don't Know' a popularisé cette classe de vulnérabilités. La détection des integer overflows lors du développement utilise : UBSan (Undefined Behavior Sanitizer, option -fsanitize=integer pour GCC/Clang), les entiers sûrs (fonctions __builtin_add_overflow, __builtin_mul_overflow de GCC), les bibliothèques de safe arithmetic, et les analyses statiques (Coverity, Frama-C, CBMC). Les revues de code doivent particulièrement vérifier les opérations arithmétiques sur des valeurs provenant de l'utilisateur avant leur utilisation pour des calculs de taille.
Fonctionnement
L'overflow classique : size_t total = count * item_size; où count et item_size sont contrôlés par l'attaquant. Si count=0xFFFFFFFF et item_size=2, total = 0x1FFFFFFFE qui troncate à 0xFFFFFFFE (32-bit) ou 0x1FFFFFFFE (64-bit). Si suivi de malloc(total) puis memcpy(buf, src, count * item_size), l'allocation est insuffisante mais la copie utilise la vraie taille, causant un heap overflow.
Exploitation offensive
Les integer overflows dans les parsers de protocoles réseau (longueurs de champs, compteurs) sont particulièrement dangereux car ils peuvent être déclenchés à distance. Un parser d'image (JPEG, PNG, GIF) vulnérable peut être exploité via une image malformée provoquant un integer overflow lors du calcul de la taille du buffer de décompression, suivi d'un heap overflow avec des données contrôlées.
Détection et mitigation
UBSan détecte les overflows en développement. En production : utilisation de types à taille fixe appropriés (uint32_t vs size_t), vérifications de bornes avant opérations (if(a > SIZE_MAX/b) error;), bibliothèques SafeInt ou IntegerSafeOps, et compilation avec -ftrapv (génère un SIGABRT sur overflow signé). Les langages modernes (Rust) gèrent les overflows avec panic! en mode debug et wrapping arithmétique explicite en production.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés. 2.1.7
Un projet cybersécurité ?
Expert dispo · Réponse 24h