Как показано в этой статье, основная проблема исходит от свободы, данной пользователю, составлять свои собственные строки формата. Решение, как избежать этого изъяна, очень простое: никогда не оставляйте возможность пользователю предоставлять свою строку формата! Чаще всего, это просто значит вставлять строку "%s", когда вызывается такая функция как printf(), syslog(), ... Если вы действительно не можете обойтись без этого, вам надо очень тщательно проверять ввод, поступивший от пользователя.