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
це, здається, скоріше флюкс, ніж намір, що це трапляється, щоб перевірити як адресу електронної пошти. Якщо моя електронна адреса була префіксом. Насправді, якби не префікс там, str_replace і валідація не були б корисними, оскільки і обидва перевіряють, оскільки останній ніколи не призначається нічим після заміни, електронний лист все одно буде надісланий за допомогою попереднього цінність, яка, імовірно, все ще буде вразливою."example"@example.com
, вона стане такою-f"example"@example.com
, яка не підтверджується. До речі,str_replace
в цьому питанні здається абсолютно зайвим, враховуючи, що простір AFAIK може використовуватися лише в поєднанні з цитатами, а електронні листи з цитатами не підтверджують-f
"foo bar"@example.com
"foobar"@example.com
Ще дві речі, про які слід пам’ятати:
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();
}