SUPEE-6285 yaması, ne değiştirildi?


26

Tamam, birileri bunu sormalı: Bugün, 7/7/2015 Magento <1.9.2 için yeni bir güvenlik yaması yayınlandı.

Mağazalarınızı en kısa sürede güncelleyin!

Ama ne değişti? Kapsanan güvenlik sorunlarının bilinen ihlalleri var mı? Olabilecek en kötü şey nedir?

Ve kırabilecek bir şey var mı? İndirme dizini eksikse yamayı uygulamak mümkün olmayan SUPEE-5994 modelinde olduğu gibi ...


4
ÇOK. Yalnızca yama dosyası, yaklaşık 350 ekleme ve 100 kaldırma işlemiyle 1.100 satırın üzerindedir. Bunları paket /
temanızda

Yanıtlar:


36

Daha önce de belirtildiği gibi, yamalı güvenlik açıkları bu resmi sayfada ayrıntılı olarak açıklanmaktadır (yeni ticari dokümanlar): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

özet

Bu paket, aşağıdaki güvenlikle ilgili sorunlara karşı koruma içerir:

  • RSS ve Ayrıcalık Yükselmesi ile Müşteri Bilgi Kaçakları
  • Magento Connect'te Sahtecilik İsteği Kod Yürütülmesine Yol Açıyor
  • Siteler arası Scripting
  • Sepet içinde siteler arası komut dosyası çalıştırma
  • Mağaza Yolu Açıklaması
  • Günlük Dosyalarındaki İzinler Çok Geniş
  • Yönetici İçinde Siteler Arası Komut Dosyası Çalıştırma
  • Siparişler RSS’inde Siteler Arası Komut Dosyası Oluşturma

Birkaç mağaza kurduktan sonra, topladığım şey buydu:

Tema yamaları

Bazı tema dosyaları, olası XSS ​​saldırılarını önlemek için eklenmiş çıkışlarla eklenmiştir:

  • checkout/cart.phtml
  • checkout/cart/noItems.phtml
  • checkout/onepage/failure.phtml
  • rss/order/details.phtml
  • wishlist/email/rss.phtml

Temanızdaki temalar bu şablonlardan herhangi birini içeriyorsa veya doğrudan değişiklik yaptıysanız base/default(iyi şanslar, şansınız dağılmış demektir), bunları el ile düzeltmeniz gerekir:

  1. ödeme şablonlarında,

    $this->getContinueShoppingUrl()

    ile

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. içinde wishlist/email/rss.phtmlyerine

    $this->helper('wishlist')->getCustomerName()

    ile

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. In rss/order/details.phtmlyerine

    <?php echo $this->__('Customer Name: %s', $_order->getCustomerFirstname()?$_order->getCustomerName():$_order->getBillingAddress()->getName()) ?><br />
    <?php echo $this->__('Purchased From: %s', $_order->getStore()->getGroup()->getName()) ?><br />

    ile

    <?php $customerName = $_order->getCustomerFirstname() ? $_order->getCustomerName() : $_order->getBillingAddress()->getName(); ?>
    <?php echo $this->__('Customer Name: %s', Mage::helper('core')->escapeHtml($customerName)) ?><br />
    <?php echo $this->__('Purchased From: %s', Mage::helper('core')->escapeHtml($_order->getStore()->getGroup()->getName())) ?><br />

İzinler

.htaccessdosyalar eklenmiş downloader/Magedve downloader/libkaynak dosyalara doğrudan erişime izin verilmemiştir. Nginx kullanıyorsanız, aynısını elde etmek için bu kuralları eklemeniz gerekir ( bunun için Ben Lessani'ye teşekkürler ):

location /downloader/Maged/ { deny all; }
location /downloader/lib/   { deny all; }

Ancak downloaderyine de dağıtımlardan canlı bir sistem sistemine dışlanmasını tavsiye ederim , bu durumda işlem yapmanız gerekmez.

Yönetici Ayrıcalıkları (ACL)

Kısıtlı yönetici hesapları kullanıyorsanız, üçüncü taraf uzantılarının bazı menüleri artık onlar için çalışmayabilir. Nedeni varsayılan dönüş değeri olmasıdır Mage_Adminhtml_Controller_Action::_isAllowed()olarak değiştirildi trueiçin Mage::getSingleton('admin/session')->isAllowed('admin'). ACL'yi kullanmadıkları için bu yöntemi yönetici denetleyicilerinde geçersiz kılmayan uzantılar, artık "ALL" ayrıcalığına ihtiyaç duyuyor .

Tek çözüm, uzantıları düzeltmek ve bu yöntemi tüm yönetici denetleyicilerine eklemektir:

protected function _isAllowed()
{
    return true;
}

Ya da bunlar gerçekten tanımlanmış bir ACL kaynağına sahipse etc/adminhtml.xml:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

(Yamanın, Phoenix_Moneybookersbu uzantının dahil edildiği 1.7 gibi daha eski Magento sürümleri için aynı şeyi yaptığını görebilirsiniz )

Bu konuda daha ayrıntılı bir bakış açısı ve eksik ACL kaynaklarını nasıl tanımlayacağınız hakkında bir açıklama için, bkz: SUPEE-6285'i yükledikten sonra Erişim Reddedildi hataları

Yama uygulanırken olası hatalar

  1. Mesaj:

    can't find file to patch at input line 899
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git app/design/frontend/default/modern/template/checkout/cart.phtml app/design/frontend/default/modern/template/checkout/cart.phtml
    |index 982ad5a..2bf6b37 100644
    |--- app/design/frontend/default/modern/template/checkout/cart.phtml
    |+++ app/design/frontend/default/modern/template/checkout/cart.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored

    Sebep:default/modern tema yükleme çıkarıldı

    Çözüm: Ekleme app/design/frontend/default/moderntaze Magento download (dükkanına aynı sürüm olmalıdır). Bu aynayı da kullanabilirsiniz: https://github.com/firegento/magento . Sonra yamayı başarıyla uyguladıktan sonra temayı tekrar kaldırabilirsiniz.

  2. Mesaj

    patching file downloader/Maged/.htaccess
    can't find file to patch at input line 915
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/Maged/Controller.php downloader/Maged/Controller.php
    |index aa9d705..32755d7 100644
    |--- downloader/Maged/Controller.php
    |+++ downloader/Maged/Controller.php
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    5 out of 5 hunks ignored
    can't find file to patch at input line 976
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/Maged/Model/Session.php downloader/Maged/Model/Session.php
    |index 18020eb..7013c94 100644
    |--- downloader/Maged/Model/Session.php
    |+++ downloader/Maged/Model/Session.php
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    2 out of 2 hunks ignored
    patching file downloader/lib/.htaccess
    can't find file to patch at input line 1020
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/connect/packages.phtml downloader/template/connect/packages.phtml
    |index 9cca5a6..f42e74e 100644
    |--- downloader/template/connect/packages.phtml
    |+++ downloader/template/connect/packages.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    3 out of 3 hunks ignored
    can't find file to patch at input line 1049
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/connect/packages_prepare.phtml downloader/template/connect/packages_prepare.phtml
    |index f74c3df..86aa51b 100644
    |--- downloader/template/connect/packages_prepare.phtml
    |+++ downloader/template/connect/packages_prepare.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    can't find file to patch at input line 1061
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/login.phtml downloader/template/login.phtml
    |index 6e4cd2c..dbbeda8 100644
    |--- downloader/template/login.phtml
    |+++ downloader/template/login.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored
    can't find file to patch at input line 1073
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git downloader/template/settings.phtml downloader/template/settings.phtml
    |index 13551ac..47ab411 100644
    |--- downloader/template/settings.phtml
    |+++ downloader/template/settings.phtml
    --------------------------
    File to patch:
    Skip this patch? [y]
    Skipping patch.
    1 out of 1 hunk ignored

    Sebep:downloader dizin yükleme çıkarıldı

    Çözüm: Ekleme downloadertaze Magento download (dükkanına aynı sürüm olmalıdır). Bu aynayı da kullanabilirsiniz: https://github.com/firegento/magento . Sonra yamayı başarıyla uyguladıktan sonra dizini tekrar kaldırabilirsiniz.

  3. Mesaj: Benzer bir şey

    checking file app/design/frontend/base/default/template/checkout/cart.phtml
    Hunk #1 FAILED at 97 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/checkout/cart/noItems.phtml
    Hunk #1 FAILED at 31 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/checkout/onepage/failure.phtml
    Hunk #1 FAILED at 29 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/rss/order/details.phtml
    Hunk #1 FAILED at 31 (different line endings).
    1 out of 1 hunk FAILED
    checking file app/design/frontend/base/default/template/wishlist/email/rss.phtml
    Hunk #1 FAILED at 25 (different line endings).
    1 out of 1 hunk FAILED

    Sebep: dosyalar (LF, Unix satır sonu) yerine \r\n(CRLF, Windows satır sonu) veya \r(CR, Mac satır sonu) ile saklanır \n.

    Çözüm: Satır sonlarını dönüştürmeniz yeterlidir, metin düzenleyiciniz veya IDE'nizin buna muktedir olması gerekir.


Bu önemli bir yama gibi göründüğü için, 1.9.x çalıştıran mağazaların şimdi bu yamayı içeren 1.9.2.0'a yükseltme yapmanın daha iyi olacağını kabul ediyor musunuz?
paj

1
Henüz bir mağazayı 1.9.2.0'a güncellemedim ama bazı ek tehlikeler var gibi görünüyor ve güncellemeler yine de daha dikkatli bir şekilde test edilmelidir. İlk önce yamanın kurulmasını tavsiye ederim.
Fabian Schmengler

Ekibimizde sadece kullanımımız için bir uzantı geliştirdik ve bu düzeltme ekinden sonra bazı yönetici kontrol cihazlarının bu _isAllowedyöntemi uygulamadığını fark ettim . Neyse ki modülde ACL vardı ve yöntem eklemek için ek bir işlem yapılması gerekmedi. Ayrıca, default/moderntaşınan temayla ilk hata mesajıyla karşılaştım (Git sayesinde suçluyu da buldum). Bunun için +1
Vic,

Burada bazı mükemmel şeyler. Cart.phtml'mi güncellemeye gittiğimde, sürümümü temeldeki ile karşılaştırdım ve düzenlemenizin biraz yanlış göründüğünü fark ettim. Yama dosyasındaki yeni satır: <button type = "button" title = "<? Php echo Mage :: yardımcı ('çekirdek') -> quoteEscape ($ $ -> __ ('Alışverişe Devam Et'))?> "class =" button btn-devam "onclick =" setLocation ('<? php echo Mage :: yardımcı (' çekirdek ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this -> __ ('Alışverişe Devam Et')?> </span> </span> </button>. Açıklayabilir misin?
PedroKTFC

7

@ Http://blog.philwinkle.com/supee-6285-broken-down/

Genellikle bu, bir boole döndüren bir _isAllowed korumalı yöntem eklemeyi içerir. Bazen bu boolean, Adminhtml / controllers / Catalog / Category / WidgetController güncellemesinde olduğu gibi bir ACL kontrolünün sonucudur. Bazen bu, Adminhtml / controllers / AjaxController.php ile olduğu gibi doğru kodlanmıştır.

Ben ekledikten sonra:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('system/config');
}

3. Parti Kontrolöründen birine Yönetici Bölümünün tekrar "çalışmaya" başlaması ...

Yani yakında başka bir Magento Yaması mı alacağız? Bu daha büyük bir sorun gibi görünüyor ...


Lütfen cevabımı gör. Kısıtlı rollerin verilmesi "Gösterge Tablosu" ayrıcalığı, kendi ACL kaynağı olmadan üçüncü taraf bölümlerine yeniden erişim sağlayacaktır.
Fabian Schmengler

Magento 1.8 : Kontrol edildi (bu hak "ON" a sahipti) - aynı hikaye: Erişim reddedildi . Evet, önce çıkış yaptım ve sonra giriş
yaptım

Maalesef "admin" yapılandırmasını yanlış yorumladım, aslında yalnızca tüm yetkilere sahip kullanıcılar için geçerlidir. Birçok uzantının yamalanması gerekeceği doğrudur. Cevabımı buna göre güncellendi.
Fabian Schmengler

Bu ya da yazdığım gibi @ magento.stackexchange.com/questions/73646/… Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> korumalı işlev _isAllowed () {return Mage :: için app / code / local içinde genel Geçersiz Kılma yazmamız gerekebilir getSingleton ( 'yönetici / oturum') -> IsAllowed ( 'sistem / config'); } </pre>
Piotr Siejczuk

1
Eğer varsayılan izin olarak "system / config" sizin için çalışıyorsa .. sanırım
tüccara bağlıysa

3

Çok sayıda topluluk / yerel uzantınız varsa app/code/core/Mage/Adminhtml/Controller/Action.php, yama sürümünüze bağlı olarak 666 çizgisini etkileyen ve çevresinde olan SUPEE-6285'teki bu değişikliğe özellikle dikkat etmek isteyeceksiniz (bu EE 1.14.0.1 düzeltme ekidir):

protected function _isAllowed()
    {
-        return true;
+        return Mage::getSingleton('admin/session')->isAllowed('admin');
    }

Kendi yönetici kaynaklarını uygulamayan tüm özel modüller yukarıdaki değişiklikten etkilenir ve söz konusu yönetici kullanıcısı tam yönetici ayrıcalıklarına sahip olmadığı sürece erişim reddedilir.

Yamada başka bir yere bakarsanız, içerdiği çekirdek modüllerin birçoğunun güncellendiğini göreceksiniz, ancak bunun bir çok üçüncü taraf modülünü etkilemesi muhtemeldir; hala onlara erişebilirsin!


1

Öyle görünüyor yaması için sayfa etkilediğini ne bilgi ile güncellendi.

Henüz bir üretim sitesine kurulum yapıp test etmedim.


3
Dev sunucuya kurdum ve iyi çalıştı, bu yüzden üretime itti. Bazı ürün ve satış yöneticilerimiz Magento yöneticisini kullanmayı deneyene kadar her şey yolunda gözüküyordu - bu kullanıcılar Magento'daki 'kullanıcı rolü düzenleyicisi' aracılığıyla rol izinlerini kısıtladılar, yönetici alanı web sitesinin bazı alanlarındaki erişim reddedildi hatalarıyla sıkça karşılaştılar. 3. parti eklentileri kullananlar. Ana yönetici hesabım hala tüm bunlar üzerinde çalışıyor ... Hala araştırıyorum
Ricky Odin Matthews

0

Düzeltme ekini uyguladıktan sonra değiştirilen dosyaların tam listesi app/etc/applied.patches.list


0

Üçüncü taraf modülleri için benim durumumda adminhtml kontrolörlerine aşağıdaki kodu eklemek çalıştı:

protected function _isAllowed()

{
     return true;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.