PT-2012-29: Получение привилегий администратора в Simple Machines Forum

Уязвимое ПО

Simple Machines Forum
Версия: 2.0.3; 1.1.17 и более ранняя

Ссылка: 
http://www.simplemachines.org/

Рейтинг опасности

Уровень опасности: Высокий 
Воздействие: Получение привилегий администратора
Вектор атаки: Удаленный

CVSS v2: 
Base Score: 10 
Vector: (AV:N/AC:L/Au:N/C:C/I:C/A:C) 

CVE: отсутствует

Описание программы

Simple Machines Forum (краткое название — SMF) – это свободно распространяемое профессиональное программное обеспечение, которое позволяет за считанные минуты создать собственное online-сообщество.

Описание уязвимости

Специалисты Исследовательского центра Positive Research компании Positive Technologies обнаружили уязвимость «Получение привилегий администратора» в Simple Machines Forum.
Уязвимость, обнаруженная в механизме восстановления пароля, позволяет атакующему с помощью специальных запросов получить пароль администратора.

                Уязвимость в файле: Sources/Reminder.php:

                Уязвимый фрагмент кода:

                if (empty($_POST['code']) || substr($realCode, 0, 10) != substr(md5($_POST['code']), 0, 10))

 При запросе восстановления пароля на email пользователя отправляется 10-символьный код, содержащий символы из набора 0-9 a-f. С помощью данного кода осуществляется смена пароля, причем пользователь может задать новый пароль самостоятельно через специальную форму.
Приведенный выше фрагмент кода некорректно осуществляет сравнение кода для восстановления пароля, находящегося в базе данных, и кода, указанного пользователем. Дело в том, что PHP в случае, когда с помощью оператора "==" сравниваются число со строкой или две строки, содержащие числа, преобразует каждую строку в число, а затем сравнивает полученные числа.
Таким образом, строка вида "0e12345678", где "e" - символ показателя степени, эквивалентна "0", а "1e12345678" - "1". Атакующий имеет возможность последовательно отправлять запросы на восстановление пароля до тех пор, пока код в базе данных не примет вид "0e", либо "1e", за которым следуют любые числа. Наши исследования показали, что в среднем требуется около 5 тысяч запросов на восстановление пароля и 10 тысяч – на проверку кода, что осуществимо менее чем за час.
Начиная с версии 2.0 Beta 4, в Simple Machines Forum присутствует код, затрудняющий атаку путем ограничения частоты запросов на сброс пароля. Однако данная мера не является эффективной, так как в этом случае необходимое количество запросов для подбора нужного формата кода достигается за несколько часов. Этому также способствует тот факт, что код ограничения частоты запросов на сброс пароля содержит ошибку:

                if (empty($number_tries) || $time_stamp < (time() - 10))
{
// If it wasn't *that* long ago, don't give them another five goes.
$number_tries = !empty($number_tries) && $time_stamp < (time() - 20) ? 2 : 0;
$time_stamp = time();
}

Решение

Установите последнюю версию приложения.

Статус уведомления

23.08.2012 - Производитель уведомлен
23.08.2012 - Производителю отправлены детали уязвимости
01.02.2013 - Производитель выпустил исправление
15.02.2013 - Публикация уязвимости

Благодарности

Уязвимость обнаружил Арсений Реутов (Исследовательcкий центр Positive Research компании Positive Technologies)

Ссылки

http://www.securitylab.ru/lab/PT-2012-29

Список отчетов о ранее обнаруженных уязвимостях Positive Research:

http://www.ptsecurity.ru/lab/advisory/
http://www.securitylab.ru/lab/