Patch Keamanan SUPEE-11086 - Kemungkinan masalah?


24

Magento telah merilis patch keamanan baru untuk M1, dan pembaruan untuk M1 dan M2.

Rilis ini termasuk perbaikan keamanan kritis. "Kami sangat menyarankan agar semua pedagang memperbarui secepat mungkin."

Masalah apa yang harus saya perhatikan ketika meningkatkan atau menerapkan tambalan ini?

SUPEE-11086

SUPEE-11086, Magento Commerce 1.14.4.1 dan Open Source 1.9.4.1 berisi beberapa peningkatan keamanan yang membantu menutup eksekusi kode jarak jauh (RCE), skrip lintas situs (XSS), pemalsuan permintaan lintas situs (CSRF) dan kerentanan lainnya.

Magento 2.3.1, 2.2.8 dan 2.1.17 Pembaruan Keamanan

Versi ini berisi beberapa pembaruan fungsional dan keamanan. Risiko: Penting untuk Perdagangan Magento dan Sumber Terbuka Magento sebelum 2.1.17, 2.2.8 dan 2.3.1.


Ryan Hoerr, saya kira Anda harus membuat pertanyaan yang berbeda untuk Magento 2.3.1, 2.2.8 dan 2.1.17 Pembaruan Keamanan
Amit Bera

2
Tahu mengapa tidak ada versi untuk 1.8.0 / 1.8.1?
Jason

Jawaban:


20

Masalah terbesar, yang ditemukan: Mage::log()bekerja secara tidak benar. Jika Anda memanggil fungsi ini dengan file log kustom (dan belum ada), log tidak akan ditulis ke file, karena validasi tambahan, ditambahkan dalam SUPEE-11086.


Masalah ini juga berlaku untuk Magento CE 1.9.4.1: magento.stackexchange.com/questions/268229/…
Aad Mathijssen

5
semua log saya berhenti sepenuhnya. Bahkan log Sistem dan pengecualian. Apakah ada perbaikan untuk ini?
Kalvin Klien

semua file log saya yang ditulis oleh Mage :: log telah berhenti juga. M1 EE 1.14.0.2
PromInc

satu-satunya perbaikan adalah mengembalikan kodeMage::log()
Aswerer

3
Pada tanggal 25 Juni, Magento telah merilis SUPEE-11155, Magento Commerce 1.14.4.2 dan Magento Open Source 1.9.4.2 yang mencakup perbaikan untuk Mage::log()metode ini.
Aad Mathijssen

11

Penting: nama tambalan menyertakan versi tambalan tertinggi yang berlaku. Jadi tambalan untuk 1.9.3.10 akan berlaku untuk 1.9.3.10, 1.9.3.9, .... ke tambalan lain. Kami akan mencoba meningkatkan penamaan di rilis berikutnya dan Anda juga dapat menggunakan https://github.com/steverobbins/magedownload-cli karena akan melihat metadata versi dengan benar melalui API.


5

Seperti yang lain, file log saya benar-benar berhenti menulis data.

Sumber Bug - File Log Tidak Menulis Data

Di app/Mage.phpmereka membuat perubahan ini:

         // Validate file extension before save. Allowed file extensions: log, txt, html, csv
         -        if (!self::helper('log')->isLogFileExtensionValid($file)) {
         +        $_allowedFileExtensions = explode(
         +            ',',
         +            (string) self::getConfig()->getNode('dev/log/allowedFileExtensions', Mage_Core_Model_Store::DEFAULT_CODE)
         +        );
         +        $logValidator = new Zend_Validate_File_Extension($_allowedFileExtensions);
         +        $logDir = self::getBaseDir('var') . DS . 'log';
         +        if (!$logValidator->isValid($logDir . DS . $file)) {
                 return;
             }

yang mencari konfigurasi untuk daftar ekstensi file yang disetujui koma yang terpisah. Namun mereka TIDAK menambahkan daftar ini di konfigurasi - bahkan bukan opsi di Admin Mage untuk kita konfigurasikan sendiri.

Solusi untuk Bug - File Log Tidak Menulis Data

Untuk mengatasi ini, cukup buat entri ke dalam database di core_config_datatabel.

INSERT INTO core_config_data VALUES ( NULL, 'default', 0, 'dev/log/allowedFileExtensions', 'log,txt,html,csv' );

Bersihkan cache objek juga dan Anda akan melihat data menulis ke file log sekali lagi.

ls -lrt var/log/ | tail


Untuk referensi, masalah ini pada EE 1.14.2.0 dengan semua tambalan keamanan diterapkan.

Saya memang membuka tiket dengan Dukungan Magento tentang masalah ini tetapi belum menerima tanggapan dari teknisi. Saya dalam antrian.


Yang benar-benar membingungkan saya tentang bug ini adalah Magento sudah memiliki metode untuk memvalidasi ekstensi file log yang mereka tambahkan melalui SUPEE-10415 pada akhir 2017.

app/code/core/Mage/Log/Helper/Data.php

    /**
     * Checking if file extensions is allowed. If passed then return true.
     *
     * @param $file
     * @return bool
     */
    public function isLogFileExtensionValid($file)
    {
        $result = false;
        $validatedFileExtension = pathinfo($file, PATHINFO_EXTENSION);
        if ($validatedFileExtension && in_array($validatedFileExtension, $this->_allowedFileExtensions)) {
            $result = true;
        }

        return $result;
    }

Mengapa mereka tidak menggunakan kembali logika itu alih-alih mencoba menemukan kembali roda log yang tidak lengkap?


3
Ini tidak benar. Di app / etc / config.xml, allowFileExtensions telah ditambahkan sebagai konfigurasi. Jika tidak ada dalam database ini akan digunakan. Masalah sebenarnya adalah bahwa fungsi validasi baru pertama kali mencoba untuk melihat apakah file tersebut sudah ada, yang mungkin sangat tidak baik.
René Schep

Terima kasih telah menunjukkannya pada @ RenéSchep. Saya melihat perubahan pada tambalan itu sekarang. Melihat lebih dalam, file config.xml saya tinggal di repositori yang berbeda sebagai basis kode kami yang lain. Untuk alasan itu ketika saya mendorong perubahan untuk tambalan ini file konfigurasi tidak diperbarui dengan perubahan ini. Karena tidak menulis ke file yang tidak ada, saya pribadi menemukan itu berfungsi di server saya. Membuat saya bertanya-tanya apakah ini adalah masalah izin folder pada sistem file itu sendiri. Saya belum melihat terlalu jauh ke dalam kode itu.
PromInc

Dari apa yang saya uji adalah apakah itu berfungsi jika file sudah ada. Pemeriksaan pertama isValid lakukan adalah memeriksa apakah file dapat dibaca. Jika tidak ada tidak ada upaya untuk membuat file dan yang palsu dikembalikan.
René Schep

@ RenéSchep jadi bagaimana cara memperbaikinya? Dukungan Magento adalah rasa sakit di a ** h. Mereka sangat lambat dalam menjawab.
Adarsh ​​Khatri

@AdarshKhatri Anda harus membuat file sebelum Magento dapat menulisnya. menyentuh /path/to/magento/install/html/var/log/newlogfile.log
PromInc

4

Mage::log()gagal menulis apa pun ke file log jika awalnya tidak ada. Ini disebabkan oleh isValidfungsi Zend_Validate_File_Extensionmelempar kesalahan yang tidak ditemukan saat menelepon Zend_Loader::isReadable($value). Saya sementara ini memperbaiki ini dengan pindah isValidke try / catch setelah file log benar-benar dibuat dan kemudian menghapus file jika validasi gagal:

<?php
final class Mage
{
    ...
    public static function log($message, $level = null, $file = '', $forceLog = false)
    {
        ...

        try {
            if (!isset($loggers[$file])) {
                $logFile = $logDir . DS . $file;

                if (!is_dir($logDir)) {
                    mkdir($logDir);
                    chmod($logDir, 0750);
                }

                if (!file_exists($logFile)) {
                    file_put_contents($logFile, '');
                    chmod($logFile, 0640);
                }

                if (!$logValidator->isValid($logFile)) {
                    unlink($logFile);

                    return;
                }

        ...
    }
}

Ini jelas merupakan solusi sementara sampai kami memiliki sesuatu yang sedikit lebih solid


3

Kemungkinan masalah dengan penambalan 1.9.3.10

checking file app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
Hunk #1 FAILED at 57.
1 out of 1 hunk FAILED

Di tambalan kita memiliki:

diff --git app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
index 8d3c526c280..fde2ef0d45d 100644
--- app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
+++ app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
@@ -57,7 +57,7 @@ class Mage_Adminhtml_Block_Customer_Group_Edit extends Mage_Adminhtml_Block_Widg
                 'form_key' => Mage::getSingleton('core/session')->getFormKey()
             ));
         } else {
-            parent::getDeleteUrl();
+            return parent::getDeleteUrl();
         }
     }

Namun, melihat kode pada 1.9.3.10 (via mage LTS) Saya tidak melihat kode itu dalam pertanyaan:

https://github.com/OpenMage/magento-lts/blob/1.9.3.x/app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php

TAPI, itu ada untuk 1.9.4

https://github.com/OpenMage/magento-lts/blob/1.9.4.x/app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php

Kemungkinan alasannya adalah tambalan yang hilang sebelumnya tidak diterapkan.


4
Anda melewatkan patch SUPEE-10975.
Richard Feraro

mmm, menurut set patch saya, yang sudah diterapkan: 2018-12-29 23:16:30 UTC | SUPEE-10975_CE_v1.9.3.10 | CE_1.9.3.10 | v1 | 91395a467666d7381ff4f9629f52a1d406eee65a | Kamis 8 Nov 13:45:47 2018 +0200 | ce-1.9.3.10-dev
ProxiBlue

Nama file tambalan terbaru adalah PATCH_SUPEE-10975_CE_v1.9.3.10_v1-2018-11-27-09-14-43.sh sementara milik Anda tampaknya dikeluarkan pada 8 November 2018 lalu yang bukan yang terbaru menurut saya.
Richard Feraro

1
Saya mengembalikan PATCH_SUPEE-10975 dan mendaftar ulang, lalu mendaftar kembali terbaru, semuanya bekerja
ProxiBlue

Ini adalah bug di SUPEE-10975 yang menyebabkan Anda tidak dapat menghapus Grup Pelanggan. Sepertinya Anda memperbaikinya secara manual, yang menyebabkan tambalan baru ini gagal yang juga memperbaiki ini.
René Schep

3

Mencoba memasang tambalan di Magento 1.9.0.1 menggunakan PATCH_SUPEE-11086_CE_1.9.1.0_v1-2019-03-26-03-03-13.sh saya menemukan kesalahan ini

Hunk #1 FAILED at 141.
1 out of 1 hunk FAILED

Saya memperbaiki ini dengan menghapus kode berikut dari 'app / etc / config.xml' dan kemudian menjalankan tambalan lagi

<dev>
    <template>
        <allow_symlink>0</allow_symlink>
    </template>
</dev>

3

Saya juga agak bingung tentang penamaan untuk patch M1.

Untuk tambalan yang lebih lama, mereka menamakannya suka SUPEE-10975 for CE 1.9.3.4-1.9.3.10atau SUPEE-10888 for CE 1.9.2.0-1.9.2.4 (0.07 MB)tetapi sekarang hanya membahas satu versi PATCH_SUPEE-11086_CE_1.9.3.10_v1.sh.

Apakah tambalan saat ini menangani semua rilis dari rilis minor atau hanya yang terakhir?

Saya membuat tes dengan toko 1.9.3.1 dan semuanya berjalan tetapi saya tidak yakin apakah itu akurat untuk rilis lain?


Ryan terima kasih! Thats menjawab @jason pertanyaan juga "Ada ide mengapa tidak ada versi untuk 1.8.0 / 1.8.1?" Untuk itu dia harus menggunakan Patch 1.7.0.2, kan? Tidak tahu bahwa ada tambalan yang membahas beberapa rilis minor sebelumnya.
Sebastian

2
Anda yakin @RyanHoerr? Bukankah itu sebaliknya, karena dianggap pada thread lain magento.stackexchange.com/questions/267576/… ? Tampaknya, jika kita menebak dari gaya penamaan yang lama, PATCH_SUPEE-11086_CE_1.7.0.2_v1-2019-03-26-03-02-36.sh dapat diterapkan dari 1.7.0.0 ke 1.7.0.2, dan karenanya, nomor versi di setiap tambalan akan menjadi yang terakhir dalam kasus itu. Siapa pun dari Magento dapat mengkonfirmasi logika apa di balik gaya penamaan yang baru ? Terima kasih sebelumnya ..
Antoine Kociuba

2
Saya akan menggunakan @AntoineKociuba Dengan 2 toko 1.8.1 berbeda saya mengalami 4 gagal dengan 1.7.0.2 Patch: - app / code / core / Mage / Usa / etc / system.xml Hunk # 4 GAGAL di 845 - app /etc/config.xml Hunk # 1 GAGAL di 144 - app / locale / en_US / Mage_Widget.csv Hunk # 1 GAGAL di 6 - lib / Varien / Filter / Template.php Hunk # 2 GAGAL di 254 sedangkan menjalankan 1.9.1.0 berjalan dengan lancar. Sama dengan toko 1.9.3.1: Patch 1.9.2.4 berfungsi, sedangkan 1.9.3.10 berfungsi.
Sebastian

3
@RyanHoerr ini salah. Nama ini mencakup versi terbaru yang berlaku untuk tambalan. Jadi tambalan untuk 1.9.3.10 akan berlaku untuk 1.9.3.10, 1.9.3.9, .... ke tambalan lain. Kami akan mencoba meningkatkan penamaan di rilis berikutnya dan Anda juga dapat menggunakan github.com/steverobbins/magedownload-cli karena akan melihat metadata versi dengan benar melalui API.
Piotr Kaminski

Menghapus info buruk saya. Terima kasih atas koreksinya.
Ryan Hoerr

2

Istirahat penebangan di Magento 1.9. Untuk memperbaiki logging di patch SUPEE-11086:

Di app / Mage.php:

-        $logValidator = new Zend_Validate_File_Extension($_allowedFileExtensions);
         $logDir = self::getBaseDir('var') . DS . 'log';
-        if (!$logValidator->isValid($logDir . DS . $file)) {
+        $validatedFileExtension = pathinfo($file, PATHINFO_EXTENSION);
+        if (!$validatedFileExtension || !in_array($validatedFileExtension, $_allowedFileExtensions)) {

Sumberdaya: https://gist.github.com/piotrekkaminski/0596cae2d25bf467edbd3d3f03ab9f8f

Saya harap ini membantu!


1

Semua file PHP baru di patch untuk M1 memiliki vars template yang tidak diproses

<?php
/**
 * {license_notice}
 *
 * @copyright   {copyright}
 * @license     {license_link}
 */

Bukan masalah tetapi terlihat tidak akurat. Saya memiliki perasaan yang sama setelah SUPEE-10975.


1

Saya perhatikan ada masalah dengan file log yang tidak lagi dibuat dan hanya ditulis jika file log sudah ada. Ini sepertinya disebabkan oleh baris:

if (!$logValidator->isValid($logDir . DS . $file)) {

dari app / Mage.php. Saya memperbaikinya dengan menggunakan logika lama. Jadi ganti baris di atas dengan yang berikut ini:

if (!self::helper('log')->isLogFileExtensionValid($file)) {

0

memeriksa aplikasi file / kode / inti / Penyihir / Adminhtml / Blok / Pelanggan / Grup / Edit.php Hunk # 1 GAGAL di 57. 1 dari 1 gunk GAGAL

Di patch 10975 ada kesalahan pada saat ini. Pernyataan pengembalian tidak ada. Mungkin Anda memperbaiki bug ini setelah menerapkan patch 10975 atau mengabaikan perubahan. Bug diperbaiki pada 11086. Jika baris kode ini telah disesuaikan / diabaikan oleh Anda, itu akan menghasilkan kesalahan yang Anda jelaskan ketika menerapkan tambalan baru. Jika Anda sudah memperbaiki bug sendiri, maka cukup hapus blok di file tambalan dan jalankan tambalan lagi.


1
Saya harus mengembalikan tambalan "kurang resmi" SUPEE-11043 agar SUPEE-11086 bekerja
Jeroen Vermeulen - MageHost

0

Menggunakan SUPEE-11086 | CE_1.9.1.0 seperti yang disarankan oleh Ryan Hoerr di atas.

Menerapkan SUPEE-11086 | CE_1.9.1.0 | v1 | 3f120e6a795eed55267bd2b9164b3984913ddfc9 | Jumat 22 Maret 18:40:11 2019 +0000 | 4f3f369e723fe31212cb5be9adda113f891d7f62..HEAD

Ke CE_1.9.2.1

Saya mendapatkan Gagal pada setiap file.

Saya telah berhasil menerapkan tambalan ke repo lain.

Kode inti tidak tersentuh.

Daftar tambalan yang diterapkan

SUPEE-6788
SUPEE-7405-CE-1-9-2-2
SUPEE-7405 
SUPEE-8788 
SUPEE-9652 
SUPEE-8967 
PATCH_SUPEE-9767_CE_1.9.3.0_v2
SUPEE-10266-CE-1.9.2.4
SUPEE-10415-ce-1.9.2.1
SUPEE-10570_CE_v1.9.2.2
SUPEE-10570_CE_v1.9.2.2
SUPEE-10570_CE_v1.9.2.2
SUPEE-10752_CE_v1.9.2.4
SUPEE-10888_CE_v1.9.2.4
SUPEE-10975_CE_v1.9.3.3

Terima kasih @AntoineKociuba untuk klarifikasi. Saya telah memverifikasi bahwa tambalan sebelumnya semuanya sudah benar, tetapi ketika saya menerapkan tambalan yang benar seperti yang dinyatakan di bawah PATCH_SUPEE-11086_CE_1.9.2.4_v1 untuk instalasi 1.9.2.1 saya, saya masih mendapatkan kesalahan pada semua kecuali satu bongkahan. Apakah Anda menyarankan tambalan manual?
Bevan Holman

Cowok mana yang gagal?
René Schep

Ini telah diselesaikan, saya harus mendapatkan klon baru dari repo. Terima kasih René
Bevan Holman

0

Masalah dengan M1.9.3.7 Patch PATCH_SUPEE-11086_CE_1.9.3.10_v1.sh

checking file app/Mage.php
checking file app/code/core/Mage/Admin/Model/Session.php
checking file app/code/core/Mage/Adminhtml/Block/Api/Buttons.php
checking file app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit.php
checking file app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
Hunk #1 FAILED at 57.
1 out of 1 hunk FAILED
checking file app/code/core/Mage/Adminhtml/Block/Permissions/Buttons.php
checking file app/code/core/Mage/Adminhtml/Block/System/Design/Edit.php
checking file app/code/core/Mage/Adminhtml/Block/System/Store/Edit.php
checking file app/code/core/Mage/Adminhtml/Controller/Action.php
checking file app/code/core/Mage/Adminhtml/Helper/Data.php
checking file app/code/core/Mage/Adminhtml/Model/Email/PathValidator.php
checking file app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
Hunk #1 FAILED at 69.
1 out of 1 hunk FAILED

Melihat aplikasi / kode / inti / Penyihir / Adminhtml / Blok / Pelanggan / Grup / Edit.php gagal. Saya berasumsi Anda telah menerapkan patch SUPEE-11043 yang SUPEE-11086 menganggap Anda belum melakukannya.
René Schep

0

Dapat mengonfirmasi adanya masalah saat mencoba menerapkan SUPEE-11086versi 1.9.1.1 yang baru diunduh dan ditambal sepenuhnya, termasuk semuanya hingga dan termasuk Patch Dasbor Admin Dashboard -MPERF-10509-CE-2019-03-13-06-31-24.diff

Tambalan gagal di file berikut.

app/code/core/Mage/Adminhtml/Block/Api/Buttons.php
app/code/core/Mage/Adminhtml/Block/Permissions/Buttons.php
app/code/core/Mage/Api2/Block/Adminhtml/Roles/Buttons.php

File-file ini tidak memiliki perubahan dari komit awal unduhan v1.9.1.1. Menyalin file dari 1.9.2.4 instal, menerapkan SUPEE-11086 dan kemudian membandingkan dengan sumber v1.9.4.1 mengonfirmasi mereka sekarang cocok.

Magento v1.9.1.1 tampaknya menjadi sedikit masalah anak ...


Saya baru saja membandingkan patch 1.9.2.4 dengan patch 1.9.1.0. Dan sepertinya perbedaan antara tambalan ini adalah 3 file yang Anda sebutkan. Jadi sepertinya patch 1.9.1.0 harus digunakan pada 1.9.1.1.
René Schep

0

Dapat mengonfirmasi adanya masalah saat mencoba menerapkan SUPEE-11086 versi 1.9.3.0 yang baru diunduh dan ditambal sepenuhnya, termasuk semuanya hingga dan termasuk Patch Dasbor Admin Dashboard -MPERF-10509-CE-2019-03-13-06-31-24.diff

Tambalan gagal di app / config.xml karena simpul di bawah ini tidak ada. Tambahkan simpul sebelum menjalankan SUPEE-11086, tidak ada masalah.

<config>
    </default>
        <dev>
            <template>
                <allow_symlink>0</allow_symlink>
            </template>
        </dev>
    </default>
</config>

0

Saya menemukan masalah baru dengan model Mage_Eav_Model_Attribute_Data_File

Pada entitas pelanggan, saya telah menambahkan atribut unggahan file. Atribut ini tidak diperlukan, dan ketika saya ingin menghapus file tanpa mengunggah yang baru, penghapusan tidak berfungsi, karena nilai atribut tidak divalidasi melalui metode barusetAttributeValidationAsPassed()

Perbaikan cepat yang saya lakukan adalah dalam metode ini validateValue($value)

if (!$attribute->getIsRequired() && !$toUpload) {
    $attribute->setAttributeValidationAsPassed(); // this new line is added 
    return true;
}

Masalah ini tampaknya ada di semua rilis Magento 1.x sejak itu SUPEE-11086


0

Magento 1.9.3.1

Masalah terjadi ketika mencoba menambal CE 1.9.3.1 menggunakan patch PATCH_SUPEE-11086_CE_1.9.3.10_v1.sh:

checking file app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
Hunk #1 FAILED at 69.
1 out of 1 hunk FAILED
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.