SecurityPatch 9652: возможные проблемы после применения SUPEE-9652


16

Magento выпустила свое исправление безопасности SUPEE-9652для Magento 1.x CE и EE

Я просто хочу знать, каковы возможные проблемы после применения этого исправления безопасности и каковы новые изменения в этом исправлении безопасности?

Ответы:


25

Это супер крошечный патч, вот разница:

diff --git lib/Zend/Mail/Transport/Sendmail.php lib/Zend/Mail/Transport/Sendmail.php
index b24026b..9323f58 100644
--- lib/Zend/Mail/Transport/Sendmail.php
+++ lib/Zend/Mail/Transport/Sendmail.php
@@ -119,14 +119,19 @@ class Zend_Mail_Transport_Sendmail extends Zend_Mail_Transport_Abstract
                 );
             }

-            set_error_handler(array($this, '_handleMailErrors'));
-            $result = mail(
-                $this->recipients,
-                $this->_mail->getSubject(),
-                $this->body,
-                $this->header,
-                $this->parameters);
-            restore_error_handler();
+            // Sanitize the From header
+            if (!Zend_Validate::is(str_replace(' ', '', $this->parameters), 'EmailAddress')) {
+                throw new Zend_Mail_Transport_Exception('Potential code injection in From header');
+            } else {
+                set_error_handler(array($this, '_handleMailErrors'));
+                $result = mail(
+                    $this->recipients,
+                    $this->_mail->getSubject(),
+                    $this->body,
+                    $this->header,
+                    $this->parameters);
+                restore_error_handler();
+            }
         }

         if ($this->_errstr !== null || !$result) {

Однако Питер О'Каллаган (единственный в своем роде), похоже, нашел ошибку. Он осторожно поделился подробностями со мной и сказал, что я могу поделиться с вами здесь, вот оно :

Насколько я могу судить, значение $this->paramsвсегда будет иметь префикс -fв точке, в которую была добавлена ​​проверка (она передается в конструктор в точке, в которую добавляется обратный путь). Следовательно, в момент, когда он передается на проверку, если я настроил свою электронную почту contact@me.com, значение, которое фактически проверяется -fcontact@me.com, выглядит скорее как случайность, чем как намерение проверить это как адрес электронной почты. Если бы мой адрес электронной почты был, тем не "example"@example.comменее, он стал бы -f"example"@example.com, который не будет проверяться. Между прочим str_replace, в этом вопросе кажется совершенно излишним, учитывая, что AFAIK пробел может использоваться только в сочетании с кавычками, а электронные письма с кавычками не будут проверяться с помощью-fприставка. На самом деле , если бы не было префикс быть там, str_replace и проверка не будет полезно , потому что "foo bar"@example.comи "foobar"@example.comкак Validate, так как последний никогда не назначаются ни к чему после замены электронной почты все равно будет отправлена с помощью бывшего значение, которое, вероятно, все еще будет уязвимым.

Две другие вещи, которые нужно иметь в виду:

  • Версия CE патча также имеет EE_1.14.3.1 в качестве версии. Это не влияет на применение, просто добавляет неправильную версию, app/etc/applied.patches.listкажется немного странным. (источник: https://twitter.com/JohnHughes1984/status/829050203139358720 )
  • Пока у вас отключены настройки электронной почты (см. Здесь: https://magento.com/security/news/new-zend-framework-1-security-vulnerability ), вам не придется торопиться с этим, НО вам придется сделайте это, потому что любой новый патч потребует, чтобы это было установлено (поскольку они идут друг на друга).

Примечание

Соответствующий новый выпуск Magento CE 1.9.3.2 также включает в себя обновление года с комментариями об авторских правах (с 2016 по 2017 год), так что почти все файлы Magento были обновлены, а различия выглядят огромными


2
«Пока у вас отключены настройки электронной почты», какие настройки находятся в панели администратора? Просто чтобы спасти меня, ныряя через Sys-> Config без моего кофе :)
Люк Роджерс

2
@LukeRodgers: подробности см. В этом блоге: magento.com/security/news/…
Рафаэль из Digital

1
«Обновление года с комментариями об авторских правах (с 2016 по 2017 год), поэтому почти все файлы Magento были обновлены», - это правда @Raphael на Digital Pianism
Amit Bera

1
@ Хорошо, если вы проверите имя файла патча, оно уже v2 ^^, так что, возможно, v3 нет ETA
Рафаэль на Digital

1
Для справки, крайне маловероятно, что это повлияет на любое законное использование и AFAIK (без просмотра представленной полезной нагрузки), оно предотвратит эксплуатацию во всех случаях (хотя фактическая причина этого кажется либо непреднамеренной, либо крайне странным выбором). Просто он блокирует все электронные письма, в которых локальная часть заключена в кавычки, то есть "example"@example.comадреса форм, независимо от того, являются ли они технически опасными. Я был бы очень удивлен, если бы были какие-либо законные магазины, использующие этот тип электронной почты, но хотел бы, чтобы информация была доступна в случае.
Питер О'Каллаган

8

Небольшой совет по обновлению; после копирования новой версии поверх существующей установки запустите, git diff -w --stat=400 | grep -v " 2 +”чтобы быстро увидеть различия, которые содержат больше изменений, чем просто изменение уведомления об авторских правах.


4

Исправление безопасности 9652 затрагивает только следующий файл:

/lib/Zend/Mail/Transport/Sendmail.php

1

Для таких, как я, кому интересно, что делать без доступа по SSH: отредактируйте файл /lib/Zend/Mail/Transport/Sendmail.php

начиная со строки 122, замените это:

        set_error_handler(array($this, '_handleMailErrors'));
        $result = mail(
            $this->recipients,
            $this->_mail->getSubject(),
            $this->body,
            $this->header,
            $this->parameters);
        restore_error_handler();

с этим:

        // Sanitize the From header
        if (!Zend_Validate::is(str_replace(' ', '', $this->parameters), 'EmailAddress')) {
            throw new Zend_Mail_Transport_Exception('Potential code injection in From header');
        } else {
            set_error_handler(array($this, '_handleMailErrors'));
            $result = mail(
                $this->recipients,
                $this->_mail->getSubject(),
                $this->body,
                $this->header,
                $this->parameters);
            restore_error_handler();
        }

4
хм, для тех, у кого нет доступа по SSH. может быть, вам следует выполнить локальное исправление и загрузить исправленный файл. ;)
Infabo

Полное руководство по исправлению без SSH-доступа приведено в следующем ответе: magento.stackexchange.com/a/63936/3326
июня,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.