Патч SUPEE-6285, что изменилось?


26

Хорошо, кто-то должен спросить это: сегодня, 7/7/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 приводит к выполнению кода
  • Межсайтовый скриптинг в хотелках
  • Межсайтовый скриптинг в корзине
  • Раскрытие пути магазина
  • Разрешения на файлы журнала слишком широкие
  • Межсайтовый скриптинг в Admin
  • Межсайтовый скриптинг в заказах 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, вам нужно добавить эти правила для достижения того же самого ( спасибо Бен Лессани за это):

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, теперь нуждаются в привилегии «ALL» .

Единственное решение - это исправить патчи и добавить этот метод ко всем их контроллерам администратора:

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, которая включает этот патч?
Пай

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

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

Некоторые отличные вещи здесь. Когда я пошел обновить свой файл cart.phtml, я сравнил свою версию с версией в базе и заметил, что ваша правка кажется немного неправильной. Новая строка из файла исправления: <button type = "button" title = "<? Php echo Mage :: helper ('core') -> quoteEscape ($ this -> __ ('Continue Shopping'))??> "class =" button btn-continue "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. Иногда это жестко запрограммировано в true, как в случае Adminhtml / controllers / AjaxController.php

После того, как я добавил:

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

Для одного из сторонних контроллеров эта административная секция снова начала "работать" ...

Так мы скоро получим еще один патч Magento? Это кажется более серьезной проблемой ...


Пожалуйста, посмотрите мой ответ. Предоставление ограниченных ролей привилегии «Dashboard» позволит снова получить доступ к сторонним разделам без собственного ресурса ACL.
Фабиан Шменглер

Magento 1.8 : проверил, что (имел это право "ВКЛ") - та же история: доступ запрещен . Да, сначала я должен выйти из системы, а затем войти в систему после :)
Piotr Siejczuk

Извините, я неверно истолковал конфигурацию для "admin", она на самом деле возвращает true только для пользователей со всеми привилегиями. Это правда, что многие расширения должны быть исправлены. Обновил мой ответ соответственно.
Фабиан Шменглер

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

1
Если "system / config" как разрешение по умолчанию работает для вас .. зависит от продавца, я думаю
Фабиан Шменглер

3

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

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.