Site icon Персональный блог

Уязвимости строк форматирования

Наличие данной уязвимости позволяет передать в качестве входного параметра функции ввода/вывода специальным образом сконструированную строку, что позволяет атакующему получить информацию об управлении приложением и даже изменить ход выполнения приложения. Многие функции ввода/вывода позволяют нужным образом отформатировать строку, переданную им в качестве входного параметра. Это означает, что входные параметры функции могут содержать специальные символы, определяющие формат преобразования. Специальным образом подобранные символы форматирования позволяют прочесть содержимое областей памяти, организовать переполнение буфера. В худшем случае эксплуатация уязвимости позволяет атакующему выполнить произвольный код в системе. Первопричиной такой уязвимости является недостаточная проверка входных данных.

Основным методом обнаружения уязвимости строк форматирования является анализ исходных текстов программ. Следует очень осторожно использовать такой спецификатор форматирования, как %p (указатель) и избегать спецификатора %n (количество символов, записанных по адресу, указанному в качестве второго аргумента).

При тестировании приложения следует вставлять спецификаторы форматирования во вводимые данные во всех точках ввода строковых данных и анализировать полученный результат. Количество и вид спецификаторов существенно варьируется в зависимости от используемого языка программирования. При тестировании, кроме спецификаторов, определенных в используемом языке, следует обязательно проверять спецификаторы, определенные в языках С/С++.

Чтобы минимизировать вероятность появления данной уязвимости, необходимо придерживаться следующих правил:

Exit mobile version