Často vzniká z chýbajúcich alebo nesprávnych kontrol dĺžky v jazykoch, ktoré umožňujú priamy prístup k pamäti. Výsledky siahajú od poškodených údajov a pádov až, za istých podmienok, po neoprávnené vykonanie kódu.
Vyrovnávacie pamäte môžu sídliť na zásobníku (stack), hromade (heap) alebo iných oblastiach pamäte a slabina môže zahŕňať nebezpečné kopírovanie, nesprávny výpočet veľkosti alebo zápis mimo hraníc. Prepísané miesto, kontrola útočníka, platforma a runtime ochrany formujú zneužiteľnosť a dôsledky.
Kľúčové body
Redukcia koreňovej príčinyTam, kde je to uskutočniteľné, uprednostniť pamäťovo bezpečné jazyky a rozhrania, validovať dĺžky a celočíselné výpočty, vyhnúť sa neobmedzeným operáciám a kontrolovať interakcie s natívnymi alebo inak pamäťovo nebezpečnými komponentmi.
VerifikáciaPoužiť cielenú kontrolu kódu, statickú analýzu, diagnostiku kompilátora, sanitizery, fuzzing a regresné testy na nájdenie defektov a potvrdenie, že opravy pokrývajú podkladovú triedu.
Runtime vrstvyOchrany kompilátora a operačného systému, ako sú canaries, nevykonateľná pamäť a randomizácia adries, môžu sťažiť niektorú exploitáciu, zatiaľ čo izolácia a najmenšie oprávnenia môžu obmedziť dôsledky.
Dôležité obmedzeniePretečenie vyrovnávacej pamäte automaticky neumožňuje vykonanie kódu; môže len poškodiť údaje alebo ukončiť proces. Runtime zmiernenia sú hĺbková obrana, nie náhrady za odstránenie defektnej pamäťovej operácie.