Magento выпустила свое исправление безопасности SUPEE-9652
для Magento 1.x CE и EE
Я просто хочу знать, каковы возможные проблемы после применения этого исправления безопасности и каковы новые изменения в этом исправлении безопасности?
Magento выпустила свое исправление безопасности SUPEE-9652
для Magento 1.x CE и EE
Я просто хочу знать, каковы возможные проблемы после применения этого исправления безопасности и каковы новые изменения в этом исправлении безопасности?
Ответы:
Это супер крошечный патч, вот разница:
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, так как последний никогда не назначаются ни к чему после замены электронной почты все равно будет отправлена с помощью бывшего значение, которое, вероятно, все еще будет уязвимым.
Две другие вещи, которые нужно иметь в виду:
app/etc/applied.patches.list
кажется немного странным. (источник: https://twitter.com/JohnHughes1984/status/829050203139358720 )Соответствующий новый выпуск Magento CE 1.9.3.2 также включает в себя обновление года с комментариями об авторских правах (с 2016 по 2017 год), так что почти все файлы Magento были обновлены, а различия выглядят огромными
"example"@example.com
адреса форм, независимо от того, являются ли они технически опасными. Я был бы очень удивлен, если бы были какие-либо законные магазины, использующие этот тип электронной почты, но хотел бы, чтобы информация была доступна в случае.
Небольшой совет по обновлению; после копирования новой версии поверх существующей установки запустите, git diff -w --stat=400 | grep -v " 2 +”
чтобы быстро увидеть различия, которые содержат больше изменений, чем просто изменение уведомления об авторских правах.
Исправление безопасности 9652 затрагивает только следующий файл:
/lib/Zend/Mail/Transport/Sendmail.php
Для таких, как я, кому интересно, что делать без доступа по 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();
}