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/