Gyakran a közvetlen memóriahozzáférést engedő nyelvekben hiányzó vagy hibás hosszellenőrzésből fakad. A kimenetel a sérült adatoktól és összeomlásoktól — bizonyos feltételek mellett — a jogosulatlan kódfuttatásig terjedhet.
A pufferek a stacken, a heapen vagy más memóriaterületeken is elhelyezkedhetnek, és a gyengeség lehet nem biztonságos másolás, hibás méretszámítás vagy határon kívüli írás (out-of-bounds write). A felülírt hely, a támadói kontroll, a platform és a futásidejű védelmek együtt határozzák meg a kihasználhatóságot és a következményeket.
Legfontosabb pontok
A kiváltó ok csökkentéseAhol lehetséges, memóriabiztonságos nyelveket és interfészeket kell előnyben részesíteni, validálni kell a hosszakat és az egészsámszámításokat, kerülni kell a korlátlan műveleteket, és át kell tekinteni a natív vagy egyéb memóriabiztonság nélküli komponensekkel való kölcsönhatásokat.
VerifikációCélzott kódreview, statikus elemzés, fordítódiagnosztika, sanitizer eszközök, fuzzing és regressziós tesztek segítenek megtalálni a hibákat és megerősíteni, hogy a javítások lefedik a mögöttes hibaosztályt.
Futásidejű rétegekA fordító- és operációsrendszer-védelmek — például a canary értékek, a nem végrehajtható memória és a címvéletlenszerűsítés (ASLR) — megnehezíthetik egyes kihasználásokat, míg az izoláció és a minimális jogosultság korlátozhatja a következményeket.
Fontos korlátA puffertúlcsordulás nem tesz automatikusan lehetővé kódfuttatást; lehet, hogy csak adatot ront vagy folyamatot zár le. A futásidejű mérséklések mélységi védelmet adnak, nem helyettesítik a hibás memóriaművelet megszüntetését.