Есть много разного полезного софта, который присутствует на большинстве хостингов. Например, стандартом de-facto является phpmyadmin, отсутствие которого пользователи не поймут и не оценят.
Для почты такое “приложение по умолчанию” — roundcube.
Сегодня мы поговорим о уязвимости zero-day, которая отдает в руки злоумышленнику всю почту ваших пользователей
Традиционно считается, что такие популярные скрипты не могут содержать сколько-нибудь значимых уязвимостей. Да, возможно XSS, может быть CSRF, это неприятно, но сложно эксплуатируется и к утечке серьезных данных в большинстве случаев не приводит.
Мы проектировали shared-hosting с полным пониманием того, что наши клиенты крайне чувствительны к любым нарушениям безопасности. Не должно быть ни явных ни потенциальных угроз. Тем не менее, с некоторых пор мы наблюдали статистически значимое увеличение жалоб на доступ посторонних лиц к FTP.
Было проверено всё — начиная с внутренней безопасности, заканчивая любыми вариантами утечек через биллинг, от самих пользователей и т.д.
В какой-то момент стало ясно, что утечка идёт из почтовой системы и скорее всего из её веб-части.
Паттерн эксплуатации крайне странный — взломщик получает пароль от базы roundcube, через phpmyadmin вытаскивает оттуда сессии, получает из сессий пароли к почте. Причем, сессии roundcube шифрует, а значит доступ есть и к ключу шифрования.
Найти уязвимость помогло частичное протоколирование POST-запросов:
POST /?_task=settings&_action=save-pref&check_request=&_check_request= HTTP/1.1" 200 1133 "http://mail.ddos-guard.net/?_task=mail" "Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0" "_token=0f7c9ae8a387cb0bc5ce563fa09fe172&_session=generic_message_footer&_name=generic_message_footer&_value=config/db.inc.php
Локальный include. Взломщик добавляет config/db.inc.php в футер письма и отправляет это письмо себе.
Осталось выяснить, как же так получается, что последняя стабильная версия roundcube делает такую мерзость.
Всё достаточно просто:
index.php:
else if ($RCMAIL->action == 'save-pref') {
include INSTALL_PATH . 'program/steps/utils/save_pref.inc';
}
program/steps/utils/save_pref.inc:
$name = get_input_value('_name', RCUBE_INPUT_POST);
$value = get_input_value('_value', RCUBE_INPUT_POST);
// save preference value
$RCMAIL->user->save_prefs(array($name => $value));
// update also session if requested
if ($sessname = get_input_value('_session', RCUBE_INPUT_POST)) {
// Support multidimensional arrays...
$vars = explode('/', $sessname);
// ... up to 3 levels
if (count($vars) == 1)
$_SESSION[$vars[0]] = $value;
else if (count($vars) == 2)
$_SESSION[$vars[0]][$vars[1]] = $value;
else if (count($vars) == 3)
$_SESSION[$vars[0]][$vars[1]][$vars[2]] = $value;
}
$OUTPUT->reset();
$OUTPUT->send();
Атакующий может перезаписать любую переменную в конфигурации и получить любой файл, доступный для чтения пользователю под которым работает roundcube.
Уязвимость присутствует в самых последний версиях — roundcube 0.8.5 и 0.9-RC.
Патч для временного затыкания дыры:
diff --git a/index.php b/index.php
index 8de8ca0..6470295 100644
--- a/index.php
+++ b/index.php
@@ -258,7 +258,8 @@ if ($RCMAIL->action == 'keep-alive') {
$OUTPUT->send();
}
else if ($RCMAIL->action == 'save-pref') {
- include INSTALL_PATH . 'program/steps/utils/save_pref.inc';
+ echo "Oops";
+ die;
}
Остается заметить, что roundcube присутствует в CPanel, DirectAdmin и т.д. Фактически этой уязвимости подвержены большинство современных хостингов.
Счастья вам. Будьте бдительны.
Автор: netguard