Ini adalah patch yang sangat kecil, inilah perbedaannya:
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) {
Namun, Peter O'Callaghan (satu-satunya) tampaknya telah menemukan bug. Dia dengan lembut membagikan detailnya dengan saya dan berkata saya bisa membagikannya kepada Anda di sini jadi ini dia :
Terbaik yang saya tahu nilai $this->params
akan selalu diawali
-f
pada titik validasi telah ditambahkan (itu diteruskan ke konstruktor pada titik jalur pengembalian ditambahkan). Oleh karena itu pada titik itu diteruskan ke validasi, jika saya telah mengkonfigurasi email saya
[email protected]
, nilai yang sebenarnya divalidasi adalah [email protected]
, tampaknya lebih merupakan kebetulan daripada niat bahwa ini terjadi untuk memvalidasi sebagai alamat email. Jika alamat e-mail saya adalah "example"@example.com
, ini akan menjadi -f"example"@example.com
, yang tidak akan divalidasi. Kebetulan, hal itu str_replace
sepenuhnya berlebihan dalam hal ini mengingat bahwa AFAIK a space hanya dapat digunakan bersama dengan kutipan, dan email dengan kutipan tidak akan divalidasi dengan-f
awalan. Bahkan jika bukan karena awalan berada di sana, str_replace dan memvalidasi tidak akan berguna karena "foo bar"@example.com
dan
"foobar"@example.com
keduanya memvalidasi, karena yang terakhir tidak pernah ditugaskan untuk apa pun setelah penggantian, e-mail akan tetap dikirim menggunakan yang sebelumnya nilai, yang mungkin masih rentan.
Dua hal lain yang perlu diingat:
Catatan samping
Rilis baru yang sesuai dari Magento CE 1.9.3.2 juga mencakup pembaruan tahun komentar hak cipta (dari 2016 hingga 2017) sehingga hampir setiap file Magento telah diperbarui dan perbedaannya terlihat besar
"example"@example.com
alamat formulir, terlepas dari apakah mereka secara teknis berbahaya. Saya akan sangat terkejut jika ada toko yang sah menggunakan jenis email ini, tetapi menginginkan informasi yang tersedia dalam kasus ini.Sedikit tip untuk peningkatan; setelah menyalin versi baru dari pemasangan yang ada, jalankan
git diff -w --stat=400 | grep -v " 2 +”
untuk melihat dengan cepat perbedaan yang mengandung lebih banyak perubahan daripada sekadar perubahan pemberitahuan hak cipta.sumber
Patch Keamanan 9652 hanya mempengaruhi file berikut:
sumber
Bagi mereka seperti saya yang bertanya-tanya apa yang harus dilakukan tanpa akses SSH: edit file /lib/Zend/Mail/Transport/Sendmail.php
dari baris 122 dan seterusnya, ganti ini:
dengan ini:
sumber