Poprawka bezpieczeństwa SUPEE-10266 - Możliwe problemy?


36

Nowa aktualizacja zabezpieczeń Magento 1 dotyczy 13 problemów APPSEC

https://magento.com/security/patches/supee-10266

Na jakie typowe problemy należy zwrócić uwagę przy stosowaniu tej poprawki?

SUPEE-10266, Magento Commerce 1.14.3.6 i Open Source 1.9.3.6 zawierają wiele ulepszeń bezpieczeństwa, które pomagają zamknąć fałszowanie żądań między witrynami (CSRF), nieautoryzowany wyciek danych oraz luki w zabezpieczeniach uwierzytelnionego użytkownika administracyjnego do zdalnego wykonania kodu. Te wydania zawierają również poprawki problemów z ponownym ładowaniem obrazu i płatnościami za pomocą kasowania w jednym kroku.


W obliczu problemu przy składaniu wniosku do 1.9.3.2 - magento.stackexchange.com/questions/193451/…
Shrenik

Odpowiedzi:


13

Niektóre ważne informacje są udostępniane tutaj. Większość plików z backendu Magento. Lista plików:

app/code/core/Mage/Admin/Model/Session.php
app/code/core/Mage/Adminhtml/Block/Notification/Grid/Renderer/Notice.php
app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
app/code/core/Mage/Adminhtml/Controller/Action.php
app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
app/code/core/Mage/Adminhtml/controllers/CustomerController.php
app/code/core/Mage/Adminhtml/controllers/Newsletter/TemplateController.php
app/code/core/Mage/Checkout/controllers/CartController.php
app/code/core/Mage/Core/Model/Email/Template/Abstract.php
app/code/core/Mage/Core/Model/File/Validator/Image.php
app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
app/code/core/Mage/Core/etc/config.xml
app/code/core/Mage/Rss/Helper/Data.php
app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
app/code/core/Zend/Serializer/Adapter/PhpCode.php
app/design/adminhtml/default/default/template/backup/dialogs.phtml
app/design/adminhtml/default/default/template/catalog/product/edit/options/type/file.phtml
app/design/adminhtml/default/default/template/customer/tab/view.phtml
app/design/adminhtml/default/default/template/login.phtml
app/design/adminhtml/default/default/template/notification/toolbar.phtml
app/design/adminhtml/default/default/template/oauth/authorize/form/login.phtml
app/design/adminhtml/default/default/template/resetforgottenpassword.phtml
app/design/adminhtml/default/default/template/sales/order/view/history.phtml
app/design/adminhtml/default/default/template/sales/order/view/info.phtml
app/design/install/default/default/template/install/create_admin.phtml
app/locale/en_US/Mage_Adminhtml.csv
downloader/template/login.phtml

Ważne jest, aby sprawdzić te trzy pliki.

app/code/core/Mage/Checkout/controllers/CartController.php
app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
app/code/core/Mage/Core/Model/File/Validator/Image.php

app / code / core / Mage / Checkout / kontrolers / CartController.php dodatkowy warunek sprawdź identyfikator klienta :

diff --git app/code/core/Mage/Checkout/controllers/CartController.php app/code/core/Mage/Checkout/controllers/CartController.php
index 7c9f28f..bee6034 100644
--- app/code/core/Mage/Checkout/controllers/CartController.php
+++ app/code/core/Mage/Checkout/controllers/CartController.php
@@ -284,14 +284,16 @@ class Mage_Checkout_CartController extends Mage_Core_Controller_Front_Action
     public function addgroupAction()
     {
         $orderItemIds = $this->getRequest()->getParam('order_items', array());
+        $customerId   = $this->_getCustomerSession()->getCustomerId();

-        if (!is_array($orderItemIds) || !$this->_validateFormKey()) {
+        if (!is_array($orderItemIds) || !$this->_validateFormKey() || !$customerId) {
             $this->_goBack();
             return;
         }

         $itemsCollection = Mage::getModel('sales/order_item')
             ->getCollection()
+            ->addFilterByCustomerId($customerId)
             ->addIdFilter($orderItemIds)
             ->load();
         /* @var $itemsCollection Mage_Sales_Model_Mysql4_Order_Item_Collection */
@@ -709,4 +711,14 @@ class Mage_Checkout_CartController extends Mage_Core_Controller_Front_Action
         $this->getResponse()->setHeader('Content-type', 'application/json');
         $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
     }
+
+    /**
+     * Get customer session model
+     *
+     * @return Mage_Customer_Model_Session
+     */
+    protected function _getCustomerSession()
+    {
+        return Mage::getSingleton('customer/session');
+    }
 }

Dodano aplikację / code / core / Mage / Sales / Model / Resource / Order / Item / Collection.php Dodatkowa metoda addFilterByCustomerId w kolekcji.

diff --git app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
index ee83ad48..c02afdf 100644
--- app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
+++ app/code/core/Mage/Sales/Model/Resource/Order/Item/Collection.php
@@ -152,4 +152,20 @@ class Mage_Sales_Model_Resource_Order_Item_Collection extends Mage_Sales_Model_R
         $this->getSelect()->where($resultCondition);
         return $this;
     }
+
+    /**
+     * Filter by customerId
+     *
+     * @param int|array $customerId
+     * @return Mage_Sales_Model_Resource_Order_Item_Collection
+     */
+    public function addFilterByCustomerId($customerId)
+    {
+        $this->getSelect()->joinInner(
+            array('order' => $this->getTable('sales/order')),
+            'main_table.order_id = order.entity_id', array())
+            ->where('order.customer_id IN(?)', $customerId);
+
+        return $this;
+    }
 }

app / code / core / Mage / Core / Model / File / Validator / Image.php

jeśli „general / reprocess_images / active” false, pomiń przetwarzanie obrazów. UWAGA: Jeśli wyłączysz ponowne przetwarzanie obrazów, wówczas proces przesyłania zdjęć może spowodować zagrożenie bezpieczeństwa

diff --git app/code/core/Mage/Core/Model/File/Validator/Image.php app/code/core/Mage/Core/Model/File/Validator/Image.php
index 9d57202..6a939c3 100644
--- app/code/core/Mage/Core/Model/File/Validator/Image.php
+++ app/code/core/Mage/Core/Model/File/Validator/Image.php
@@ -91,6 +91,13 @@ class Mage_Core_Model_File_Validator_Image
         list($imageWidth, $imageHeight, $fileType) = getimagesize($filePath);
         if ($fileType) {
             if ($this->isImageType($fileType)) {
+                /**
+                 * if 'general/reprocess_images/active' false then skip image reprocessing.
+                 * NOTE: If you turn off images reprocessing, then your upload images process may cause security risks.
+                 */
+                if (!Mage::getStoreConfigFlag('general/reprocess_images/active')) {
+                    return null;
+                }
                 //replace tmp image with re-sampled copy to exclude images with malicious data
                 $image = imagecreatefromstring(file_get_contents($filePath));
                 if ($image !== false) {

Mam nadzieję, że to pomoże. Myślę


Czy możesz określić, jak dokładnie powinniśmy sprawdzać możliwe problemy z CartController.php i Collection.php. Gdzie dokładnie szukać możliwych błędów na stronie?
Ikona

Mam aktualizację witryn z łatkami bezpieczeństwa 3, wszystkie trzy witryny zastępują te dwa pliki. Dokładnie sprawdź i zaktualizuj te dwa pliki. Na wszystkich 3 stronach nie występują żadne rowy
Rama Chandran M

10

EE 1.14.2.4

Literówka w linii 726 łatki: autocomplete="new-pawwsord" (app/design/adminhtml/default/default/template/backup/dialogs.phtml )

W łatce brakuje 2 plików frontendowych:

Łata:

app\design\adminhtml\default\default\template\oauth\authorize\form\login-simple.phtml

Bez łatek:

app\design\frontend\base\default\template\oauth\authorize\form\login-simple.phtml app\design\frontend\rwd\default\template\oauth\authorize\form\login-simple.phtml


Nie zapomnij też sprawdzić lokalnych zastąpień ... Musiałem ręcznie załatać lokalne zastąpienie bufora kodu app\design\adminhtml\default\default\template\sales\order\view\info.phtml


Zobacz quasiobject „s odpowiedź dla onepage numerze zamówienia. Utworzono zgłoszenie do wsparcia dla przedsiębiorstw w oczekiwaniu na odpowiedź Magento. Jeśli nie chcesz czekać na zaktualizowaną poprawkę, potencjalną poprawką jest zmodyfikowanie statystyki „else” w app\design\frontend\enterprise\default\template\giftcardaccount\onepage\payment\scripts.phtmlcelu uwzględnienia elementu form_key w następujący sposób:
if (($('p_method_' + methodName) && $('p_method_' + methodName).checked) || elements[i].name == 'form_key') { ...


CE 1.9.2.4

Literówka w linii 694 łatki: autocomplete="new-pawwsord" ( app/design/adminhtml/default/default/template/backup/dialogs.phtml)

Rozszerzenie TrueOrderEdit musi być poprawione ... zmiany echo $_groupNamedo echo $this->escapeHtml($_groupName)w następujących plików:

app\design\adminhtml\default\default\template\orderedit\sales\order\view\edit.phtml app\design\adminhtml\default\default\template\orderedit\sales\order\view\history.phtml app\design\adminhtml\default\default\template\orderedit\sales\order\view\info.phtml


Na koniec ten plik szablonu podstawowego powinien prawdopodobnie zostać załatany tą samą aktualizacją $ _groupName:

app\design\adminhtml\default\default\template\sales\order\view\edit.phtml


Wszystkie wersje 1.X

Jeśli usunąłeś /downloaderfolder (lub /downloader/template) z bazy kodu, być może będziesz musiał ręcznie edytować plik łatki .sh i usunąć ostatnią sekcję, zaczynając oddiff --git downloader/template/login.phtml downloader/template/login.phtml

Jeśli chodzi o błąd nieprawidłowego tajnego klucza , proszę zobaczyć moją odpowiedź tutaj: Magento 1.9 nieprawidłowy tajny klucz. Odśwież stronę


Znalazłem też literówkę do poprawki 1.7.0.2. autocomplete = "new-pawwsord". Czy to w każdym razie wpływa na działanie kodu? Jeśli tak, może po drodze pojawi się wersja 2 łatki?
Ikona

Istotna literówka znajduje się w kodzie odpowiedzialnym za sztuczkę FireFox. „To jest fałszywe ukryte pole, które ma na celu oszukanie firefoxa z automatycznego wypełniania hasła”… wygląda na to, że nie ma nic poważnego.
Ikona

@kmdsax Dostałem łatkę od pomocy technicznej, aby naprawić problem. Zaktualizowałem moją odpowiedź o szczegóły.
quasiobject

czy mógłbyś mi pomóc rozwiązać mój błąd magento.stackexchange.com/q/204446/57334
zus

9

W MageHost.pro znaleźliśmy problem w łatce do pliku poprawki Magento 1.9.1.1PATCH_SUPEE-10266_CE_1.9.1.1_v1-2017-09-15-04-59-56.sh

Błąd:

checking file app/code/core/Mage/Core/Model/File/Validator/Image.php
Hunk #1 FAILED at 90.
1 out of 1 hunk FAILED

Naprawiłem to, zastępując linie 454-472 przez 454-471 z PATCH_SUPEE-10266_CE_1.9.1.0_v1-2017-09-13-06-34-33.sh

Stary kod, wiersz 454-472:

diff --git app/code/core/Mage/Core/Model/File/Validator/Image.php app/code/core/Mage/Core/Model/File/Validator/Image.php
index 7f7b9d0..8a28da2 100644
--- app/code/core/Mage/Core/Model/File/Validator/Image.php
+++ app/code/core/Mage/Core/Model/File/Validator/Image.php
@@ -90,7 +90,13 @@ class Mage_Core_Model_File_Validator_Image
         $fileInfo = getimagesize($filePath);
         if (is_array($fileInfo) and isset($fileInfo[2])) {
             if ($this->isImageType($fileInfo[2])) {
-                return null;
+                /**
+                 * if 'general/reprocess_images/active' false then skip image reprocessing.
+                 * NOTE: If you turn off images reprocessing, then your upload images process may cause security risks.
+                 */
+                if (!Mage::getStoreConfigFlag('general/reprocess_images/active')) {
+                    return null;
+                }
             }
         }
         throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid MIME type.'));

Nowy kod, wiersze 454–471:

diff --git app/code/core/Mage/Core/Model/File/Validator/Image.php app/code/core/Mage/Core/Model/File/Validator/Image.php
index 8618bca..d3aba19 100644
--- app/code/core/Mage/Core/Model/File/Validator/Image.php
+++ app/code/core/Mage/Core/Model/File/Validator/Image.php
@@ -90,6 +90,13 @@ class Mage_Core_Model_File_Validator_Image
         list($imageWidth, $imageHeight, $fileType) = getimagesize($filePath);
         if ($fileType) {
             if ($this->isImageType($fileType)) {
+                /**
+                 * if 'general/reprocess_images/active' false then skip image reprocessing.
+                 * NOTE: If you turn off images reprocessing, then your upload images process may cause security risks.
+                 */
+                if (!Mage::getStoreConfigFlag('general/reprocess_images/active')) {
+                    return null;
+                }
                 //replace tmp image with re-sampled copy to exclude images with malicious data
                 $image = imagecreatefromstring(file_get_contents($filePath));
                 if ($image !== false) {

Czy sprawdziłeś inne wersje? Jeśli tak, czy występuje ten sam problem?
Ikona

1
@Icon Testowaliśmy ce-1.6.0.0 ce-1.6.1.0 ce-1.6.2.0 ce-1.7.0.0 ce-1.7.0.1 ce-1.7.0.2 ce-1.8.0.0 ce-1.8.1.0 ce-1.9.0.0 ce -1,9.9.1 ce-1.9.1.0 ce-1.9.1.1 ce-1.9.2.0 ce-1.9.2.1 ce-1.9.2.2 ce-1.9.2.3 ce-1.9.2.4 ce-1.9.3.0 ce-1.9.3.1 ce -1.9.3.2 ce-1.9.3.3 ce-1.9.3.4. Wszystkie wersje miały zainstalowane wszystkie poprzednie łaty. Jedynym z błędem poprawki był ce-1.9.1.1.
Jeroen Vermeulen - MageHost

6

Wydaje się, że w tej łatce dodano tylko 1 klucz formularza.

diff --git app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
index 8756f3f..1c5cf37 100644
--- app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
+++ app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php
@@ -96,7 +96,10 @@ class Mage_Adminhtml_Block_Widget_Form_Container extends Mage_Adminhtml_Block_Wi

     public function getDeleteUrl()
     {
-        return $this->getUrl('*/*/delete', array($this->_objectId => $this->getRequest()->getParam($this->_objectId)));
+        return $this->getUrl('*/*/delete', array(
+            $this->_objectId => $this->getRequest()->getParam($this->_objectId),
+            Mage_Core_Model_Url::FORM_KEY => $this->getFormKey()
+        ));
     }

Więc jeśli masz trudności z usunięciem widżetu z panelu administracyjnego, upewnij się, że Twój adres URL jest generowany przez blok i że nie masz żadnych przesłonięć tego bloku.


jak mogę rozwiązać ten magento.stackexchange.com/q/204446/57334 ?
zus

5

Niemożliwe jest pobranie z EE 1.11+

W app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtmlformularzu klucz weryfikacyjny klucza został usunięty i psuje całą kasę, więcej informacji tutaj: https://magento.stackexchange.com/a/193442/2380

Obejście na razie (jako wersja 2 dla EE 1.11+ zostanie wydana w celu rozwiązania tego problemu): wycofaj plik szablonu dla obu enterprise/defaulti rwd/entreprisemotywów.

Różnice między łatką a wersją

EDYCJA: 1.9.3.6 zostało wydane, więc te informacje nie są już istotne

Jednym z głównych problemów, które zostały podniesione na chwilę obecną, jest to, że w 1.9.3.5 brakuje 3 łatek bezpieczeństwa z łatki. Dlatego zdecydowanie zalecam jedynie łatanie, a nie aktualizowanie do wersji 1.9.3.5


Czy masz więcej informacji na ten temat, na przykład przykład niepakowanego pliku w wersji 1.9.3.5?
Luke Rodgers,

Czy nadal trwa to w przypadku CE / Open Source? W przypadku EE / Commerce nie jest dostępne pobieranie 1.14.3.5, tylko 1.14.3.6.
7ochem

Na stronie pobierania CE / Open Source znajduje się również tylko 1.9.3.6 (od 14 września) i już nie ma 1.9.3.5
7ochem

4
1.9.3.6 zostało wydane wczoraj, ta informacja nie jest już aktualna.
Ryan Hoerr

5

Wciąż próbuję ustalić, czy jest to unikalne dla naszego sklepu, ze względu na niestandardowe szablony. Jest on jednak zepsuty z nałożoną łatką i nie jest zepsuty podczas cofania. Chciałem pisać na wypadek, gdyby inni mogli to samo zgłosić.

W EE 1.14.2.0 nie możemy przejść obok kroku Informacje o płatności w kasie z zastosowaną łatką. Jesteśmy obecni do SUPEE-9767 v2 przed zastosowaniem nowej łatki.

Wydaje się, że nasz problem wynika z ich usunięcia || elements[i].name == 'form_key'z:

app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtml

Jest usuwany z enablePaymentMethodspętli. Wygląda na to, że ukryte wejście formularza form_key jest wyłączone i dlatego nie jest przekazywane do kontrolera po przesłaniu.

<input name="form_key" type="hidden" value="X" disabled="">

Następnie $this->_validateFormKey()kończy się niepowodzeniem, a kontroler nic nie zwraca.


Aktualizacja 1 (18.09.2017) : W piątek przesłałem zgłoszenie do pomocy technicznej Magento i powiedziano mi, że „jeszcze nie zgłosili go kupcy”. Zamiast wysyłać kopie zapasowe, próbowałem powielić przy czystej instalacji 1.14.2.4 i 1.14.3.4 z zastosowanymi odpowiednimi łatkami. Udało mi się powielić i odpowiedzieć na bilet. Oczekiwanie na nową odpowiedź.

Uwaga: System> Konfiguracja> Administrator> Bezpieczeństwo> Włącz sprawdzanie poprawności klucza formularza przy kasie musi mieć wartość „Tak”. Jeśli „Nie”, problem nie zostanie wyświetlony.


Aktualizacja 2 (18.09.2017) : Zauważyłem, że nie mogę zduplikować problemu z wersją 1.14.3.6, ale gdy sprawdziłem plik szablonu powyżej, || elements[i].name == 'form_key'nadal tam jest. Wydaje się, że łatki nie powinny go usunąć. Wysłałem te informacje również do pomocy technicznej Magento.


Aktualizacja 3 (2017-09-20): Właśnie dostałem łatkę do rozwiązania problemu dla wersji 1.14.0.0–1.14.3.4, która po prostu przywraca form_keylinię do szablonu. Poproś o wsparcie dla SUPEE-10348.


Ten sam problem tutaj, 1.14.2.4
kmdsax

Dzięki @kmdsax. Przesłałem również bilet i czekam na potwierdzenie od wsparcia.
quasiobject

Czy próbowałeś powtórzyć ten sam błąd w wersji 1.9.2.4 CE?
Ikona

1
@Icon Nie mam. Pracuję dla jednego kupca i jesteśmy EE. Nie sądzę jednak, by miało to wpływ, ponieważ jest to blok skryptu karty podarunkowej EE. To nie powinno istnieć w CE.
quasiobject

4

Gdy przejdziesz do Magento Connect, a następnie klikniesz „Wróć do administratora” w prawym górnym rogu strony. Po powrocie do panelu administracyjnego pojawia się komunikat o błędzie

czerwony komunikat o błędzie: „Nieprawidłowy tajny klucz. Odśwież stronę”.

Po odświeżeniu strona zniknęła.


Zaktualizowano: 15 września 2017 r

Jeśli zalogujesz się do administratora Magento, powiedzmy Dashboard. Bez wylogowania z panelu Dashboard idziesz otworzyć inne okno przeglądarki w tej samej przeglądarce i przejść do example.com/admin, automatycznie się zaloguje i wyświetli dokładnie ten sam komunikat

czerwony komunikat o błędzie: „Nieprawidłowy tajny klucz. Odśwież stronę”.

Jak dotąd to jedyny problem, jaki znalazłem. Nie jestem nawet pewien, czy jest to poważny problem, ponieważ komunikat przestaje być wyświetlany po odświeżeniu.


Może wynika to z zamknięcia Magento Connect: magento.com/blog/magento-news/…
Kevin Krieger

1
@KalvinKlien Mam również wersję 1.7.0.2. Widzę tę wiadomość za każdym razem, gdy wchodzę tam i z powrotem między administratorem a Magneto Connect (/ downloader). Próbuję tylko dowiedzieć się, czy inni też to widzą. Nie wygląda to na poważny problem.
Ikona

3
Widzę to również w 1.9.2.1. Ktoś już zgłosił raport o błędzie w narzędziu do śledzenia błędów Magento .
Michael Thessel,

1
Jest to błąd w Mage_Adminhtml_Controller_Action :: preDispatch (): if ($_keyErrorMsg != '') { Mage::getSingleton('adminhtml/session')->addError($_keyErrorMsg); };powinien byćif (!$_isValidFormKey){ Mage::getSingleton('adminhtml/session')->addError($_keyErrorMsg); };
Laura

1
hmmmm, jak dotąd jest to częściowe rozwiązanie. Od czasu do czasu nadal widzę błąd, nie jestem pewien, czy istnieje inny kontroler, który ma ten problem
Kalvin Klien,

4

Poprosiłem wsparcie Magento o następujący problem

app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtml

Odpowiedzieli mi dziś rano i wypuścili nową łatkę PATCH_SUPEE-10348 .

Magento właśnie rozwiązało problem, przywracając ten plik.

Indeks: app / design / frontend / enterprise / default / template / giftcardaccount / onepage / payment / scripts.phtml
================================================== =================
--- app / design / frontend / enterprise / default / template / giftcardaccount / onepage / payment / scripts.phtml
+++ app / design / frontend / enterprise / default / template / giftcardaccount / onepage / payment / scripts.phtml
@@ -35,6 +35,7 @@
             if (elementy [i] .name == 'payment [method]'
                 || elements [i] .name == 'payment [use_customer_balance]'
                 || elements [i] .name == 'payment [use_reward_points]'
+ || elementy [i] .name == 'form_key'
             ) {
                 methodName = elements [i] .value;
                 if ((free && methodName == 'free') || (! free && methodName! = 'free')) {

1
Może potwierdzić, że ta poprawka jest dostępna w portalu partnerskim.
Luke Rodgers

Dzięki za informację. Zapomniałem podać tej informacji
cghisi,

3

Wystąpił problem z szablonami e-mail, niestandardowym CSS i modmanem. Jeśli masz np. Motyw oparty na rwd/defaultniestandardowym, skin/frontend/package/theme/css/email-inline.cssa pliki skórki są dołączane za pośrednictwem modmana za pomocą dowiązania symbolicznego, CSS nie zostanie dodany do szablonu poczty po zastosowaniu SUPEE-10266. Problem polega na tym Mage_Core_Model_Email_Template_Abstract::_getCssFileContent, że wprowadzono pewne kontrole:

                 '_theme' => $theme,
             )
         );
+        $filePath = realpath($filePath);
+        $positionSkinDirectory = strpos($filePath, Mage::getBaseDir('skin'));
+        $validator = new Zend_Validate_File_Extension('css');

-        if (is_readable($filePath)) {
+        if ($validator->isValid($filePath) && $positionSkinDirectory !== false && is_readable($filePath)) {
             return (string) file_get_contents($filePath);
         }

Rozwiązałem go na razie z brudnym włamaniem z app/code/local/Mage/Core/Model/Email/Template/Abstract.phpprzesłonięciem. Musiałem osłabić kontrolę, aby możliwe było załadowanie pliku CSS z katalogu modman:

$filePath = realpath($filePath);
$baseDirectory = Mage::getBaseDir();
$fullSkinDirectory = Mage::getBaseDir('skin');
$relativeSkinDirectory = substr($fullSkinDirectory, strlen($baseDirectory));
$positionSkinDirectory = strpos($filePath, $relativeSkinDirectory);
$validator = new Zend_Validate_File_Extension('css');
$noDirectoryTraversal = strpos($filename, '..') === false;

if ($validator->isValid($filePath) && $positionSkinDirectory !== false && $noDirectoryTraversal
    && is_readable($filePath)) {
    return (string) file_get_contents($filePath);
}

Nie sprawdzi, czy ścieżka zawiera już pełny katalog skórek, ale sprawdzi tylko, czy ścieżka zawiera ciąg znaków /skini czy go nie zawiera .., co powinno zapobiec atakom przechodzenia przez katalog.


1
Usunąłem moją odpowiedź, ponieważ twoja jest bardziej kompletna. Hack, którego użyłem, miał na celu sprawdzenie if (strpos($filename, '..') === false) { $positionSkinDirectory = 1; }wiersza, po którym $positionSkinDirectoryzostał pierwotnie ustawiony. Powinno to pomóc uniknąć przechodzenia przez katalog.
Peter O'Callaghan,

Chcę zauważyć, że osłabienie w tym przypadku oznacza ponowne narażenie go na niebezpieczeństwo, a używanie tego rozwiązania stanowi bezpośrednie zagrożenie bezpieczeństwa
Flyingmana,

@ PeterO'Callaghan dobry pomysł! Właśnie dodałem czek do mojego kodu odpowiedzi.
Simon

@Flyingmana powinno to znacznie obniżyć ryzyko.
Simon

2

Oto pełna lista poprawek dotkniętych autocomplete="new-pawwsord"literówką:

CE 1.7.0.0-1.7.0.2      PATCH_SUPEE-10266_CE_1.7.0.2_v1-2017-09-13-06-27-12.sh:664
CE 1.8.0.0-1.8.1.0      PATCH_SUPEE-10266_CE_1.8.1.0_v1-2017-09-13-06-28-08.sh:665
CE 1.9.0.0-1.9.0.1      PATCH_SUPEE-10266_CE_1.9.0.1_v1-2017-09-13-06-31-01.sh:665
CE 1.9.1.0              PATCH_SUPEE-10266_CE_1.9.1.0_v1-2017-09-13-06-34-33.sh:733
CE 1.9.1.1              PATCH_SUPEE-10266_CE_1.9.1.1_v1-2017-09-15-04-59-56.sh:734
CE 1.9.2.0-1.9.2.4      PATCH_SUPEE-10266_CE_1.9.2.4_v1-2017-09-13-06-37-37.sh:694
CE 1.9.3.0-1.9.3.2      PATCH_SUPEE-10266_CE_1.9.3.2_v1-2017-09-13-06-38-58.sh:694
CE 1.9.3.3-1.9.3.4      PATCH_SUPEE-10266_CE_1.9.3.4_v1-2017-09-13-06-39-58.sh:694
EE 1.12.0.0             PATCH_SUPEE-10266_EE_1.12.0.0_v1-2017-09-13-08-09-14.sh:696
EE 1.12.0.1-1.12.0.2    PATCH_SUPEE-10266_EE_1.12.0.2_v1-2017-09-13-08-06-57.sh:696
EE 1.13.0.0-1.13.1.0    PATCH_SUPEE-10266_EE_1.13.1.0_v1-2017-09-13-08-04-05.sh:696
EE 1.14.0.0-1.14.0.1    PATCH_SUPEE-10266_EE_1.14.0.1_v1-2017-09-13-08-01-04.sh:696
EE 1.14.1.0             PATCH_SUPEE-10266_EE_1.14.1.0_v1-2017-09-13-07-57-59.sh:764
EE 1.14.2.0             PATCH_SUPEE-10266_EE_1.14.2.0_v1-2017-09-13-07-07-14.sh:764
EE 1.14.2.1-1.14.2.4    PATCH_SUPEE-10266_EE_1.14.2.4_v1-2017-09-13-06-57-21.sh:726
EE 1.14.3.0-1.14.3.2    PATCH_SUPEE-10266_EE_1.14.3.2_v1-2017-09-13-06-53-35.sh:716
EE 1.14.3.3-1.14.3.4    PATCH_SUPEE-10266_EE_1.14.3.3_v1-2017-09-13-06-51-06.sh:716

0

Na Magento 1.8.1 napotkałem problemy z następującymi plikami:

app/code/core/Mage/Core/Model/File/Validator/Image.php
app/code/core/Mage/Core/etc/config.xml
app/locale/en_US/Mage_Adminhtml.csv

Skończyło się na pobraniu najnowszej wersji Magento, która NIE zawiera łatki. W tym przypadku Magento 1.9.3.4 .

Zastąpienie „uszkodzonych” plików plikiem pobranym rozwiązało problem. Udało mi się zastosować łatkę.

Ale bądź ostrożny: proponuję przywrócić 3 pliki po ponownej łatce i ręcznie edytować pliki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.