Magento wydało łatkę bezpieczeństwa SUPEE-9652
dla Magento 1.x CE i EE
Chcę tylko wiedzieć, jakie są możliwe problemy po zastosowaniu tej poprawki zabezpieczeń i jakie są nowe zmiany w tej poprawce bezpieczeństwa?
Magento wydało łatkę bezpieczeństwa SUPEE-9652
dla Magento 1.x CE i EE
Chcę tylko wiedzieć, jakie są możliwe problemy po zastosowaniu tej poprawki zabezpieczeń i jakie są nowe zmiany w tej poprawce bezpieczeństwa?
Odpowiedzi:
To bardzo mała łatka, oto różnica:
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) {
Wydaje się jednak, że Peter O'Callaghan (jedyny) znalazł błąd. Delikatnie udostępnił mi szczegóły i powiedział, że mogę się z tobą tutaj podzielić, więc oto :
Najlepszy, co mogę powiedzieć, wartość
$this->params
zawsze będzie miała prefiks-f
w miejscu dodania sprawdzania poprawności (jest przekazywana do konstruktora w miejscu dodawania ścieżki zwrotnej). Dlatego w momencie, gdy jest on przekazywany do sprawdzania poprawności, jeśli skonfigurowałem swój adres e-mailcontact@me.com
, wartość, która jest faktycznie sprawdzana-fcontact@me.com
, wydaje się bardziej fartem niż intencją, że dzieje się tak, aby sprawdzić poprawność jako adres e-mail. Jeśli mój adres e-mail"example"@example.com
byłby-f"example"@example.com
, stałby się , co nie będzie poprawny. Nawiasem mówiąc,str_replace
wydaje się to całkowicie zbędne w tej kwestii, biorąc pod uwagę, że AFAIK spacji można używać tylko w połączeniu z cytatami, a wiadomości e-mail z cytatami nie będą sprawdzane z-f
prefiks. W rzeczywistości, jeśli nie było dla przedrostek będąc tam, str_replace i validate nie byłoby użyteczne, ponieważ"foo bar"@example.com
i"foobar"@example.com
zarówno validate, ponieważ ten ostatni nie jest przypisany do niczego po wymianie, e-mail nadal będzie wysyłana przy użyciu byłej wartość, która prawdopodobnie nadal byłaby wrażliwa.
Dwie inne rzeczy, o których należy pamiętać:
app/etc/applied.patches.list
co wydaje się nieco dziwne. (źródło: https://twitter.com/JohnHughes1984/status/829050203139358720 )Odpowiednia nowa wersja Magento CE 1.9.3.2 zawiera również aktualizację z komentarzem dotyczącym praw autorskich (od 2016 do 2017 r.), Więc prawie wszystkie pliki Magento zostały zaktualizowane, a różnica wygląda na ogromną
"example"@example.com
Adresy, niezależnie od tego, czy są technicznie niebezpieczne. Byłbym bardzo zaskoczony, jeśli istnieją jakieś legalne sklepy korzystające z tego rodzaju wiadomości e-mail, ale chciałem, aby informacje były dostępne na wszelki wypadek.
Mała wskazówka dotycząca aktualizacji; po skopiowaniu nowej wersji do istniejącej instalacji, uruchom, git diff -w --stat=400 | grep -v " 2 +”
aby szybko zobaczyć różnice, które zawierają więcej zmian niż tylko zmiana informacji o prawach autorskich.
Poprawka zabezpieczeń 9652 dotyczy tylko następującego pliku:
/lib/Zend/Mail/Transport/Sendmail.php
Dla tych, którzy zastanawiają się, co zrobić bez dostępu do SSH: edytuj plik /lib/Zend/Mail/Transport/Sendmail.php
począwszy od linii 122, zastąp to:
set_error_handler(array($this, '_handleMailErrors'));
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
restore_error_handler();
z tym:
// 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();
}