Sendmail содержит ошибку проверки правильности(input validation error), которая может привести к выполнению произвольного кода с повышенными привилегиями.
Проблема - результат использования целых чисел со знаком в функции tTflag, которая является ответственной за обработку параметров, полученных из командной строки
с ключом '-d ', и запись значений к его внутреннему вектору следа ("trace vector"). Уязвимость существует потому, что возможно вызвать переполнение целого числа со знаком, поставляя большое числовое значение для параметра "category" отладчика. Числовое значение используется как индекс для вектора следа.
Прежде чем вектор записан, выполняется проверка, чтобы гарантировать, что снабженное значение индекса не больше, чем размер вектора. Однако, так как используется сравнение целого числа со знаком, возможно обойти проверку, снабжая эквивалент целого числа со знаком соответствующим отрицательным значением. Это может позволить атакующему записывать данные в пределах некоторого диапазона в памяти процесса. Поскольку ключ '-d ' командной строки обрабатывается прежде, чем программа понижает ее поднятые привилегии, это может приводить к повышению привилегий (системному компромиссу).
Сценарий атаки:
Нападающий с местным доступом должен определить смещения памяти внутренней переменной tTdvect и местоположение, в которое он желает записать данные. Нападавший должен создать определенный двоичный код (или
'shellcode'), чтобы выполнить его с более высокими привилегиями. После чего, нападающий должен выполнить программу, используя ключ '-d ', чтобы записать поверх функциональный адрес возврата с местоположением снабженного shellcode.
Уязвимость работает во всех версиях sendmail до 8.12beta7.