Почему-то раньше не сталкивался с этой темой...
ПО на С/С++ имеет уязвимость при переполнении стека.
Код:
#include <string.h>
void vuln(const char *str)
{
char buf[20];
strcpy(buf, str);
}
int main(int argc, char *argv[])
{
vuln(argv[1]);
return 0;
}
При вызове с параметром более 20 символов контроля границ не происходит и перетирается поле, содержащее адрес возврата из процедуры (ибо стек растет от больших адресов к меньшим). Обычно это приводит к Segmentation Fault. Но можно сформировать такую строчку, которая перетрет адрес возврата осмысленно, чтобы вызвать потенциально вредоносное ПО "по свистку от хакера".
Способ борьбы опция -fstack-protector (там дополнительная загрузка процессора)
Цитата:
The command line flag -fstack-protector switches SSP on. -fno-stack-protector switches it off. If nothing is specified at the invocation of gcc, whether SSP is switched on or off by default depends on the system and the configuration of gcc. Some systems (like OpenBSD) switch SSP on. Others (like Debian GNU/Linux) switch it off.
Подробности в
http://www.drdobbs.com/security/anatomy-of-a-stack-smashing-attack-and-h/240001832