Патч SUPEE-6285, що було змінено?


26

Гаразд, хтось має це запитати: сьогодні, 7.07.2015, випущено новий патч безпеки Magento <1.9.2.

оновлюйте свої магазини як можна швидше!

Але що змінилося? Чи відомі подвиги висвітлених питань безпеки? Що найгіршого, що могло статися?

І чи може щось зламати? Як і у SUPEE-5994, де не вдалося застосувати патч, якщо каталог завантажувача відсутній ...


4
БАГАТО. Сам патч-файл містить понад 1100 рядків з приблизно 350 доповненнями та 100 видаленнями. Вручну редагування шаблону потрібно буде внести в ~ 8 шаблонів
фронту,

Відповіді:


36

Як уже згадувалося, виправлені вразливості докладно описані на цій офіційній сторінці (нові документи продавця): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

Підсумок

Цей пакет включає захист від таких проблем, пов’язаних із безпекою:

  • Витік інформації про клієнтів за допомогою RSS та привілейованих ескалацій
  • Запит на підробку в Magento Connect приводить до виконання коду
  • Міжсайтовий сценарій у списку бажань
  • Міжсайтовий сценарій у кошику
  • Розкриття інформації про шлях
  • Дозволи для файлів журналу занадто широкі
  • Міжсайтовий сценарій в адміністраторі
  • Міжсайтовий сценарій в RSS-заказах

Після виправлення декількох магазинів, ось що я зібрав:

Теми-патчі

Деякі файли теми були зафіксовані за допомогою додаткового виходу, щоб запобігти можливим атакам XSS:

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

Якщо ваші теми містять будь-який із цих шаблонів, або ви внесли зміни безпосередньо в base/default(удача, вас накрутили), вам потрібно їх вклеїти вручну:

  1. в шаблонах оформлення замовлення замініть всі випадки виникнення

    $this->getContinueShoppingUrl()

    з

    Mage::helper('core')->quoteEscape($this->getContinueShoppingUrl())
  2. в wishlist/email/rss.phtml, замінити

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

    з

    Mage::helper('core')->escapeHtml($this->helper('wishlist')->getCustomerName())
  3. В rss/order/details.phtml, замінити

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

    з

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

Дозволи

.htaccessфайли додані до downloader/Magedта downloader/libзабороняють прямий доступ до вихідних файлів. Якщо ви використовуєте nginx, вам потрібно додати ці правила, щоб досягти того ж (thx до Бен Лессані для цього):

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

Але я рекомендую downloaderвсе одно виключати з розгортань живу системну систему, в цьому випадку вам не потрібно вживати заходів.

Привілеї адміністратора (ACL)

Якщо ви використовуєте обмежені облікові записи адміністратора, деякі меню сторонніх розширень можуть більше не працювати для них. Причина в тому, що повернене значення за замовчуванням Mage_Adminhtml_Controller_Action::_isAllowed()було змінено з trueна Mage::getSingleton('admin/session')->isAllowed('admin'). Розширення, які не змінюють цей метод у своїх контролерах адміністратора, оскільки вони не використовують ACL, тепер потребують привілею "ВСІ" .

Єдине рішення - виправити розширення та додати цей метод до всіх їхніх адміністраторів:

protected function _isAllowed()
{
    return true;
}

Або якщо вони насправді мають ресурс ACL, визначений у etc/adminhtml.xml:

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

(ви можете бачити, що патч робить те саме для Phoenix_Moneybookersстарих Magento версій, як 1.7, де було включено це розширення)

Більш детальну точку зору цього питання та пояснення як визначити відсутні ресурси ACL див. У розділі: Доступ до заборонених помилок після встановлення SUPEE-6285

Можливі помилки під час застосування патча

  1. Повідомлення:

    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

    Причина:default/modern тема була видалена з установки

    Рішення. Додайте app/design/frontend/default/modernіз нового завантаження Magento (має бути та ж версія, що і ваш магазин). Ви також можете використовувати це дзеркало: https://github.com/firegento/magento . Після успішного застосування виправлення ви можете знову видалити тему.

  2. повідомлення

    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

    Причина:downloader каталог був видалений з установки

    Рішення. Додайте downloaderіз нового завантаження Magento (має бути та ж версія, що і ваш магазин). Ви також можете використовувати це дзеркало: https://github.com/firegento/magento . Після успішного застосування виправлення ви можете знову видалити каталог.

  3. Повідомлення: Щось схоже на

    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

    Причина: файли зберігаються з \r\n(CRLF, розрив рядків Windows) або \r(CR, розрив рядків Mac) замість \n(LF, розрив рядків Unix).

    Рішення: просто конвертуйте розриви рядків, ваш текстовий редактор або IDE повинні бути спроможними до цього.


Оскільки це, здається, є основним виправленням, чи погоджуєтесь ви, що магазинам, які працюють у 1.9.x, краще було б оновити до 1.9.2.0, що включає цей патч?
paj

1
Я не оновлював жодного магазину до 1.9.2.0, але, мабуть, є деякі додаткові підводні камені, і оновлення потрібно перевірити ретельніше. Я б все-таки рекомендував спочатку встановити виправлення.
Фабіан Шменглер

У нашій команді ми розробили розширення саме для нашого використання, і після цього виправлення я зрозумів, що деякі адміністратори не використовували цей _isAllowedметод. На щастя, у нас в модулі був ACL, і крім додавання методу не потрібно було ніяких додаткових дій. Крім того, я зіткнувся з тим першим повідомленням про помилку з default/modernпереміщеною темою (я також знайшов винуватця завдяки Git). +1 для цього
Вік

Деякі чудові речі тут. Коли я пішов оновлювати свою cart.phtml, я порівняв свою версію з версією в базі і помітив, що ваше редагування здається трохи невірним. Новий рядок із файлу патча: <button type = "button" title = "<? Php echo Mage :: helper ('core') -> quotesEscape ($ this -> __ ('Продовжити покупки'))?> "class =" кнопка btn-продовжити "onclick =" setLocation ('<? php echo Mage :: helper (' core ') -> quoteEscape ($ this-> getContinueShoppingUrl ())?>') "> <span> < span> <? php echo $ this -> __ ("Продовжити покупки")?> </span> </span> </button>. Ви можете уточнити?
PedroKTFC

7

Через @ http://blog.philwinkle.com/supee-6285-broken-down/

Як правило, це включає додавання захищеного методу _isAllowed, який повертає булевий. Іноді цей булевий результат є результатом перевірки ACL, як і оновлення до Adminhtml / Controllers / Catalog / Category / WidgetController. Іноді це важко закодовано до істини, як у Adminhtml / Controllers / AjaxController.php

Після додавання:

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

Один з сторонніх контролерів, що Адміністраторський відділ знову почав "працювати" ...

Тож ми скоро отримаємо ще один Magento Patch? Це, здається, є більшим питанням ...


Будь ласка, дивіться мою відповідь. Надавши обмежені ролі, привілей "Інформаційна панель" дозволить знову отримати доступ до сторонніх розділів без власного ресурсу ACL.
Фабіан Шменглер

Magento 1.8 : Перевірив, що (було "ВКЛ" цього права) - та сама історія: В доступі відмовлено . Так, я спочатку вийшов із системи та увійдіть після :)
Piotr Siejczuk

Вибачте, я неправильно трактував конфігурацію для "адміністратора", вона фактично повертає істину лише для користувачів з усіма привілеями. Це правда, що багато розширень потрібно буде виправити. Відповідно оновив мою відповідь.
Фабіан Шменглер

Це або, як я написав @ magento.stackexchange.com/questions/73646/…, нам може знадобитися написати загальний Override у додатку / коді / локальному для Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> захищена функція _isAllowed () {return Mage :: getSingleton ('адміністратор / сесія') -> isAllowed ('система / конфігурація'); } </pre>
Piotr Siejczuk

1
Якщо "система / конфігурація" як дозвіл за замовчуванням працює для вас .. залежить від продавця, я думаю
Фабіан Шменглер

3

Якщо у вас є багато спільнот / локальних розширень, ви хочете приділити особливу увагу цій зміні в SUPEE-6285, яка впливає app/code/core/Mage/Adminhtml/Controller/Action.phpі знаходиться в рядку 666, залежно від версії виправлення (це EE 1.14.0.1 patchfile):

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

Зміни, зазначені вище, впливають на всі спеціальні модулі, які не реалізують власні ресурси адміністратора, і доступ буде відмовлено, якщо користувач адміністратора не має повних привілеїв адміністратора.

Якщо ви заглянете в інший патч, ви побачите, що багато включених основних модулів було оновлено, але це, ймовірно, вплине на багато модулів сторонніх сторін, тому зверніть особливу увагу, щоб перевірити будь-які розширення сторонніх розробників на своєму патчі після виправлення, щоб перевірити Ви все одно можете отримати доступ до них!


1

Здається, сторінку випуску виправлень оновлено інформацією про те, на що вона впливає.

Мені ще потрібно встановити на виробничому майданчику і випробувати


3
Я встановив його на сервер Dev, і він працював чудово, тому підштовхнув його до виробництва. Здавалося, все спрацювало нормально, доки деякі наші адміністратори продуктів та продажів не спробували використовувати адміністратора Magento - ці користувачі обмежили дозволи на ролі через "редактор ролей користувача" в Magento, їм відвідали помилки в доступі на деяких ділянках веб-сайту адміністратора. які використовують сторонні плагіни. Мій головний обліковий запис адміністратора все ще працює на всі ці ... Я все ще переглядаю це
Рікі Одін Меттьюз

0

Повний список модифікованих файлів після застосування патча також доступний у app/etc/applied.patches.list


0

У моєму випадку для сторонніх модулів, додавши нижче код до контролерів adminhtml, працювало:

protected function _isAllowed()

{
     return true;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.