Группа исследователей из Массачусетского технологического университета (MIT) опубликовала (PDF, 240 Кб) результаты изучения особенностей работы систем оптимизации кода современных компиляторов, способных привести к понижению безопасности приложений. В итоге, выявлены многочисленные факты, когда в процессе компиляции в машинный код из приложения исключаются блоки, бессмысленные с точки зрения оптимизатора, но важные для обеспечения безопасности.
Например, компилятор исключает неопределённые или нестабильные участки кода, которые на деле могут выступать проверками на появление нулевого указателя или выхода за границы области памяти. В итоге, данные проверки не включаются в исполняемый файл и безопасное на уровне исходных текстов приложение, становится подвержено уязвимостям на уровне исполняемого кода. Для выявления потенциально проблемных мест в коде на языка C/C++, которые могут быть удалены на стадии оптимизации, исследователями подготовлен специальный статический анализатор STACK.
Изучение при помощи STACK типовых открытых проектов выявило 160 подобных проблем, из которых 32 присутствуют в ядре Linux, 3 в Mozilla, 9 в PostgreSQL и 5 в Python. Более широкая проверка исходных текстов 8575 пакетов из состава Debian показала, что нестабильные блоки кода присутствуют в 3471 пакетов. Таким образом описанные в работе исследователей проблемы не являются единичными, а широко распространены и могут быть использованы злоумышленниками для организации новых типов атак.