Il provient souvent de vérifications de longueur absentes ou incorrectes dans des langages qui autorisent l'accès direct à la mémoire. Les conséquences vont de la corruption de données et du plantage jusqu'à, dans certaines conditions, l'exécution de code non autorisé.
Les tampons peuvent résider sur la pile (stack), le tas (heap) ou d'autres régions de mémoire, et la faiblesse peut impliquer une copie non sûre, un calcul de taille incorrect ou une écriture hors limites. L'emplacement écrasé, le contrôle de l'attaquant, la plateforme et les protections à l'exécution façonnent l'exploitabilité et les conséquences.
Points clés
Réduction à la sourcePréférer les langages et interfaces sûrs pour la mémoire lorsque c'est possible, valider les longueurs et les calculs d'entiers, éviter les opérations sans limite et examiner les interactions avec les composants natifs ou autrement non sûrs pour la mémoire.
VérificationEmployer la revue de code ciblée, l'analyse statique, les diagnostics du compilateur, les sanitizers, le fuzzing et les tests de régression pour trouver les défauts et confirmer que les corrections couvrent la classe sous-jacente.
Couches d'exécutionLes protections du compilateur et du système d'exploitation comme les canaries, la mémoire non exécutable et la randomisation des adresses peuvent rendre une partie de l'exploitation plus difficile, tandis que l'isolation et le moindre privilège peuvent contraindre les conséquences.
Limite importanteUn dépassement de tampon ne permet pas automatiquement l'exécution de code ; il peut seulement corrompre des données ou terminer un processus. Les mesures d'atténuation à l'exécution relèvent de la défense en profondeur, pas du remplacement de l'opération mémoire défectueuse.