Уязвимость нулевого дня в roundcube

Discussion in 'Мировые новости. Обсуждения.' started by zeks, 28 Mar 2013.

  1. zeks

    zeks New Member

    Joined:
    11 Jan 2013
    Messages:
    76
    Likes Received:
    2
    Reputations:
    1
    Есть много разного полезного софта, который присутствует на большинстве хостингов. Например, стандартом de-facto является phpmyadmin, отсутствие которого пользователи не поймут и не оценят.

    Для почты такое “приложение по умолчанию” — roundcube.

    Сегодня мы поговорим о уязвимости zero-day, которая отдает в руки злоумышленнику всю почту ваших пользователей

    Традиционно считается, что такие популярные скрипты не могут содержать сколько-нибудь значимых уязвимостей. Да, возможно XSS, может быть CSRF, это неприятно, но сложно эксплуатируется и к утечке серьезных данных в большинстве случаев не приводит.

    Мы проектировали shared-hosting с полным пониманием того, что наши клиенты крайне чувствительны к любым нарушениям безопасности. Не должно быть ни явных ни потенциальных угроз. Тем не менее, с некоторых пор мы наблюдали статистически значимое увеличение жалоб на доступ посторонних лиц к FTP.

    Было проверено всё — начиная с внутренней безопасности, заканчивая любыми вариантами утечек через биллинг, от самих пользователей и т.д.

    В какой-то момент стало ясно, что утечка идёт из почтовой системы и скорее всего из её веб-части.

    Паттерн эксплуатации крайне странный — взломщик получает пароль от базы roundcube, через phpmyadmin вытаскивает оттуда сессии, получает из сессий пароли к почте. Причем, сессии roundcube шифрует, а значит доступ есть и к ключу шифрования.

    Найти уязвимость помогло частичное протоколирование POST-запросов:

    Code:
    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:
    Code:
    else if ($RCMAIL->action == 'save-pref') {
     include INSTALL_PATH . 'program/steps/utils/save_pref.inc';
    }
    program/steps/utils/save_pref.inc:
    Code:
    $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.

    Патч для временного затыкания дыры:
    Code:
    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 и т.д. Фактически этой уязвимости подвержены большинство современных хостингов.

    Счастья вам. Будьте бдительны.

    http://habrahabr.ru/post/174423/
    27.03