Magento, Magento 1.x CE ve EESUPEE-9652
için güvenlik yamasını yayınladı
Bu güvenlik düzeltme ekini uyguladıktan sonra olası sorunların neler olduğunu ve bu güvenlik düzeltme ekinde yeni değişiklikler neler olduğunu bilmek istiyorum.
Magento, Magento 1.x CE ve EESUPEE-9652
için güvenlik yamasını yayınladı
Bu güvenlik düzeltme ekini uyguladıktan sonra olası sorunların neler olduğunu ve bu güvenlik düzeltme ekinde yeni değişiklikler neler olduğunu bilmek istiyorum.
Yanıtlar:
Süper küçük bir yama, işte fark:
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) {
Ancak, Peter O'Callaghan (tek ve tek) bir hata bulmuş gibi görünüyor. Detayları nazikçe benimle paylaştı ve burada sizinle paylaşabileceğimi söyledi, işte burada :
En iyi değeri
$this->params
her zaman-f
doğrulama eklenmiştir noktada önek olacak söyleyebilir (bu dönüş yolu eklendi noktada kurucu geçirilir). Bu nedenle, doğrulamaya geçtiği noktada, e-postamı yapılandırdıysamcontact@me.com
, gerçekte doğrulanmakta olan değer-fcontact@me.com
, bunun bir e-posta adresi olarak doğrulanma niyetinden çok bir şans gibi görünüyor. E-posta adresim"example"@example.com
olsa, bu-f"example"@example.com
doğrulanmayacaktı. Bu arada,str_replace
AFAIK'in bir alanın yalnızca tırnaklarla birlikte kullanılabileceği ve tırnaklı e-postaların-f
önek. Aslında bu, çünkü önek, str_replace ve validate yararlı olmayacağı orada olmak için değildi"foo bar"@example.com
ve"foobar"@example.com
ikincisi beri değişiminden sonra herhangi bir şey atanan asla, hem validate, e-posta hala eski kullanılarak gönderilecek muhtemelen savunmasız olabilecek bir değerdir.
Akılda tutulması gereken iki şey:
app/etc/applied.patches.list
biraz garip hissettirir. (kaynak: https://twitter.com/JohnHughes1984/status/829050203139358720 )Magento CE 1.9.3.2'nin ilgili yeni sürümü, telif hakkı yorumu yıl güncellemesini de (2016'dan 2017'ye kadar) içeriyor, bu nedenle Magento'nun neredeyse tüm dosyaları güncellendi ve fark çok büyük görünüyor
"example"@example.com
teknik olarak tehlikeli olup olmadıklarına bakılmaksızın , yerel bölümün tırnak içine alındığı tüm e-postaları engeller . Bu tür e-postaları kullanan yasal mağazalar varsa, çok şaşırırdım, ancak bilgilerin mevcut olmasını istedim.
Yükseltme için küçük ipucu; yeni sürümü mevcut yüklemeniz üzerine kopyaladıktan sonra, git diff -w --stat=400 | grep -v " 2 +”
yalnızca telif hakkı bildirimi değişikliğinden daha fazla değişiklik içeren farkları hızlı bir şekilde görmek için çalıştırın .
Güvenlik Düzeltme Eki 9652 yalnızca aşağıdaki dosyayı etkiler:
/lib/Zend/Mail/Transport/Sendmail.php
Benim gibi SSH erişimi olmadan ne yapacağını merak edenler için: edit file /lib/Zend/Mail/Transport/Sendmail.php
122. satırdan itibaren, şunu değiştirin:
set_error_handler(array($this, '_handleMailErrors'));
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
restore_error_handler();
Bununla:
// 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();
}