SecurityPatch 9652: Możliwe problemy po zastosowaniu SUPEE-9652

16

Magento wydało łatkę bezpieczeństwa SUPEE-9652dla 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?

Murtuza Zabuawala
źródło

Odpowiedzi:

25

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->paramszawsze będzie miała prefiks -fw 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-mail [email protected], wartość, która jest faktycznie sprawdzana [email protected], 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.combyłby -f"example"@example.com, stałby się , co nie będzie poprawny. Nawiasem mówiąc, str_replacewydaje 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-fprefiks. 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.comi "foobar"@example.comzaró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ć:

Dygresja

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ą

Raphael at Digital Pianism
źródło
2
„O ile ustawienia e-mail są wyłączone”, które to ustawienia są w panelu administracyjnym? Żeby uratować mnie przed nurkowaniem przez Sys-> Config bez mojej kawy :)
Luke Rodgers
2
@LukeRodgers odsyłają do tego wpisu na blogu, aby uzyskać szczegółowe informacje: magento.com/security/news/…
Raphael at Digital Pianism
1
„aktualizacja komentarza dotyczącego praw autorskich (od 2016 do 2017 r.), więc prawie wszystkie pliki Magento zostały zaktualizowane” - to prawda @Raphael at Digital Pianism
Amit Bera
1
@Ikona, jeśli sprawdzisz nazwę pliku łatki, to jest już v2 ^^, więc prawdopodobnie jeszcze nie ma ETA v3
Raphael at Digital Pianism
1
Dla przypomnienia, jest bardzo mało prawdopodobne, aby wpłynęło to na jakiekolwiek uzasadnione użycie i AFAIK (bez obejrzenia przesłanego ładunku), uniemożliwiłoby to wykorzystanie we wszystkich przypadkach (chociaż faktyczny powód wydaje się albo niezamierzony, albo bardzo dziwny wybór). Po prostu blokuje wszystkie e-maile, w których lokalna część jest zamknięta w cudzysłowie, tj. "example"@example.comAdresy, 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.
Peter O'Callaghan,
8

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.

Peter Jaap Blaakmeer
źródło
4

Poprawka zabezpieczeń 9652 dotyczy tylko następującego pliku:

/lib/Zend/Mail/Transport/Sendmail.php
DarkCowboy
źródło
1

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();
        }
Ralph
źródło
4
hm, dla osób bez dostępu do SSH. być może powinieneś łatać lokalnie i przesłać załatany plik. ;)
infabo
Aby uzyskać pełne wskazówki na temat łatania bez dostępu do SSH, zobacz tę odpowiedź tutaj: magento.stackexchange.com/a/63936/3326
7ochem