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
दोनों सत्यापित करें, बाद के बाद से प्रतिस्थापन के बाद कुछ भी करने के लिए सौंपा कभी नहीं किया जाता है, ई-मेल अभी भी पूर्व का उपयोग कर भेज दिया जायेगा मूल्य, जो संभवतः अभी भी असुरक्षित होगा।
दो अन्य बातों का ध्यान रखें:
app/etc/applied.patches.list
यह थोड़ा अजीब लगता है। (स्रोत: https://twitter.com/JohnHughes1984/status/82905020313139358720 )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
मेरे जैसे उन लोगों के लिए जो आश्चर्य करते हैं कि एसएसएच एक्सेस के बिना क्या करना है: फ़ाइल /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();
}