SUPEE-6285 patch, apa yang telah diubah?

26

OK, seseorang harus bertanya ini: hari ini, 7/7/2015 patch keamanan baru untuk Magento <1.9.2 telah dirilis.

perbarui toko Anda SECEPATNYA!

Tapi apa yang sudah berubah? Adakah eksploitasi yang diketahui dari masalah keamanan yang dicakup? Apa hal terburuk yang bisa terjadi?

Dan adakah yang bisa merusak? Seperti dengan SUPEE-5994 di mana tidak mungkin untuk menerapkan tambalan jika direktori pengunduh hilang ...

Fabian Schmengler
sumber
4
BANYAK. File tambalan saja lebih dari 1.100 baris dengan sekitar 350 tambahan dan 100 kepindahan. Pengeditan templat manual harus dibuat dalam ~ 8 templat frontend jika Anda telah menimpanya dalam paket / tema Anda
Ben Lessani - Sonassi
5
Inilah artikel yang bagus blog.philwinkle.com/supee-6285-broken-down
Steve Robbins

Jawaban:

36

Seperti yang telah disebutkan, kerentanan yang ditambal dijelaskan secara rinci di halaman resmi ini (dokumen merchant baru): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

Ringkasan

Bundel ini mencakup perlindungan terhadap masalah terkait keamanan berikut:

  • Informasi Pelanggan Kebocoran melalui RSS dan Peningkatan Privilege
  • Meminta Pemalsuan di Magento Connect Leads ke Eksekusi Kode
  • Script Lintas Situs di Wishlist
  • Skrip Lintas Situs dalam Keranjang
  • Simpan Pengungkapan Jalur
  • Izin pada File Log terlalu Luas
  • Skrip Lintas Situs di Admin
  • Script Lintas Situs dalam Pesanan RSS

Setelah menambal beberapa toko, inilah yang saya kumpulkan:

Tambalan tema

Beberapa file tema telah ditambal dengan tambahan pelarian untuk mencegah kemungkinan serangan XSS:

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

Jika tema Anda mengandung salah satu templat ini, atau jika Anda membuat modifikasi secara langsung base/default(semoga berhasil, Anda kacau), maka Anda perlu menambalnya secara manual:

  1. di templat checkout, ganti semua kejadian

    $this->getContinueShoppingUrl()

    dengan

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. di wishlist/email/rss.phtml, ganti

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

    dengan

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. Di rss/order/details.phtml, ganti

    <?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 />

    dengan

    <?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 />

Izin

.htaccessfile telah ditambahkan ke downloader/Mageddan downloader/libuntuk melarang akses langsung ke file sumber. Jika Anda menggunakan nginx, Anda perlu menambahkan aturan ini untuk mencapai hal yang sama (thx ke Ben Lessani untuk yang ini):

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

Tapi saya sarankan untuk mengecualikan downloaderdari penyebaran ke sistem sistem live, dalam hal ini Anda tidak perlu mengambil tindakan.

Hak Istimewa Admin (ACL)

Jika Anda menggunakan akun admin terbatas, beberapa menu ekstensi pihak ketiga mungkin tidak berfungsi lagi untuk mereka. Alasannya adalah bahwa nilai pengembalian default Mage_Adminhtml_Controller_Action::_isAllowed()telah diubah dari truemenjadi Mage::getSingleton('admin/session')->isAllowed('admin'). Ekstensi yang tidak mengesampingkan metode ini di pengontrol admin mereka karena mereka tidak menggunakan ACL, sekarang memerlukan hak istimewa "SEMUA" .

Satu-satunya solusi adalah menambal ekstensi dan menambahkan metode ini ke semua pengontrol admin mereka:

protected function _isAllowed()
{
    return true;
}

Atau jika mereka benar-benar memiliki sumber daya ACL yang didefinisikan dalam etc/adminhtml.xml:

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

(Anda dapat melihat bahwa tambalan melakukan hal yang sama Phoenix_Moneybookersdi versi Magento yang lebih lama seperti 1.7 tempat ekstensi ini disertakan)

Untuk perspektif yang lebih rinci tentang masalah ini dan penjelasan tentang cara mendefinisikan sumber daya ACL yang hilang, lihat: Mengakses kesalahan yang ditolak setelah menginstal SUPEE-6285

Kemungkinan kesalahan saat menerapkan tambalan

  1. Pesan:

    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

    Alasan: the default/moderntema telah dihapus dari instalasi

    Solusi: Tambahkan app/design/frontend/default/moderndari unduhan Magento baru (harus versi yang sama dengan toko Anda). Anda juga dapat menggunakan cermin ini: https://github.com/firegento/magento . Kemudian setelah menerapkan tambalan berhasil, Anda dapat menghapus tema lagi.

  2. Pesan

    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

    Alasan: yang downloaderdirektori telah dihapus dari instalasi

    Solusi: Tambahkan downloaderdari unduhan Magento baru (harus versi yang sama dengan toko Anda). Anda juga dapat menggunakan cermin ini: https://github.com/firegento/magento . Kemudian setelah menerapkan tambalan dengan sukses Anda dapat menghapus direktori lagi.

  3. Pesan: Sesuatu yang mirip dengan

    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

    Alasan: file disimpan dengan \r\n(CRLF, Windows line break) atau \r(CR, Mac line break) alih-alih \n(LF, Unix line break).

    Solusi: Cukup konversi jeda baris, editor teks atau IDE Anda harus mampu melakukan ini.

Fabian Schmengler
sumber
Karena ini tampaknya merupakan tambalan utama, apakah Anda setuju bahwa toko yang menjalankan 1.9.x sekarang akan lebih baik memperbarui ke 1.9.2.0 yang termasuk tambalan ini?
paj
1
Saya belum memperbarui toko apa pun ke 1.9.2.0 tetapi tampaknya ada beberapa jebakan tambahan dan pembaruan harus diuji lebih hati-hati. Saya masih merekomendasikan untuk menginstal tambalan pertama.
Fabian Schmengler
Di tim kami, kami mengembangkan ekstensi hanya untuk penggunaan kami dan setelah tambalan ini saya menyadari beberapa pengontrol admin tidak menerapkan _isAllowedmetode ini. Untungnya kami memiliki ACL di modul dan tidak ada tindakan tambahan yang diperlukan selain menambahkan metode. Juga, saya menemukan pesan kesalahan pertama dengan default/moderntema yang telah dipindahkan (saya juga menemukan pelakunya berkat Git). +1 untuk itu
Vic
Beberapa barang bagus di sini. Ketika saya pergi untuk memperbarui cart.phtml saya, saya membandingkan versi saya dengan itu di pangkalan dan melihat edit Anda tampaknya sedikit salah. Baris baru dari file tambalan adalah: <button type = "button" title = "<? Php echo Mage :: helper ('core') -> quoteEscape ($ this -> __ ('Lanjutkan Belanja'))?> "class =" button btn-continue "onclick =" setLocation ('<? php echo Mage :: helper (' core ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this -> __ ('Lanjutkan Belanja')?> </span> </span> </button>. Bisakah Anda mengklarifikasi?
PedroKTFC
7

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

Secara umum ini melibatkan menambahkan metode terproteksi _isAllowed yang mengembalikan boolean. Terkadang boolean ini adalah hasil dari pemeriksaan ACL, seperti pembaruan ke Adminhtml / controllers / Catalog / Category / WidgetController. Kadang-kadang ini hard-coded menjadi true, seperti dengan Adminhtml / controllers / AjaxController.php

Setelah saya menambahkan:

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

Untuk salah satu Pengendali Pihak ke-3, Bagian Admin itu mulai "berfungsi" lagi ...

Jadi kita akan segera mendapatkan Magento Patch lainnya? Ini tampaknya menjadi masalah yang lebih besar ...

Piotr Siejczuk
sumber
Tolong lihat jawaban saya. Memberikan peran terbatas, hak istimewa "Dasbor" akan memungkinkan akses ke bagian pihak ketiga tanpa sumber daya ACL lagi.
Fabian Schmengler
Magento 1.8 : Memeriksa itu (memiliki hak "ON") - cerita yang sama: Akses ditolak . Ya saya sudah logout dulu dan log in setelah :)
Piotr Siejczuk
Maaf, saya salah mengartikan konfigurasi untuk "admin", sebenarnya hanya mengembalikan true untuk pengguna dengan semua hak istimewa. Memang benar bahwa banyak ekstensi perlu ditambal. Memperbarui jawaban saya sesuai dengan itu.
Fabian Schmengler
Ini atau ketika saya menulis @ magento.stackexchange.com/questions/73646/... kita mungkin perlu menulis Override umum di app / kode / lokal untuk Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> fungsi yang dilindungi _isAllowed () {return Mage :: getSingleton ('admin / session') -> isAllowed ('system / config'); } </pre>
Piotr Siejczuk
1
Jika "sistem / konfigurasi" sebagai izin default berfungsi untuk Anda .. saya rasa tergantung pada pedagang
Fabian Schmengler
3

Jika Anda memiliki banyak ekstensi komunitas / lokal, Anda ingin memberi perhatian khusus pada perubahan dalam SUPEE-6285 ini yang memengaruhi app/code/core/Mage/Adminhtml/Controller/Action.phpdan berada di sekitar baris 666 tergantung pada versi patch Anda (ini adalah EE 1.14.0.1 patchfile):

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

Semua modul khusus yang tidak menerapkan sumber admin mereka sendiri dipengaruhi oleh perubahan di atas dan akses akan ditolak kecuali pengguna admin yang bersangkutan memiliki hak admin penuh.

Jika Anda mencari di tempat lain di tambalan Anda akan melihat bahwa banyak modul inti yang disertakan telah diperbarui namun ini kemungkinan akan memengaruhi banyak modul pihak ketiga jadi perhatikan untuk menguji ekstensi pihak ketiga di tambalan posting situs Anda untuk memeriksa Anda masih dapat mengaksesnya!

simonyoung
sumber
1

Tampaknya halaman rilis patch telah diperbarui dengan info tentang apa pengaruhnya.

Saya belum menginstal di situs produksi dan pengujian

Goose84
sumber
3
Saya telah menginstalnya di server Dev dan bekerja dengan baik, jadi dorong ke produksi. Segalanya tampak berfungsi dengan baik, sampai beberapa admin produk & penjualan kami mencoba menggunakan admin Magento - pengguna ini telah membatasi izin peran melalui 'editor peran pengguna' di Magento, mereka sering dikunjungi dengan kesalahan akses ditolak di beberapa area situs admin area yang menggunakan plugin pihak ke-3. Akun admin utama saya masih berfungsi dengan baik pada semua ini ... Saya masih melihat ke dalamnya
Ricky Odin Matthews
0

Daftar lengkap file yang dimodifikasi setelah menerapkan tambalan juga tersedia di app/etc/applied.patches.list

gopherIT
sumber
0

Dalam kasus saya untuk modul pihak ketiga, menambahkan kode di bawah ini ke pengontrol adminhtml berfungsi:

protected function _isAllowed()

{
     return true;
}
Ankur Jain
sumber