Patch SUPEE-6285, o que foi alterado?

26

OK, alguém tem que perguntar o seguinte: hoje, 7/7/2015, foi lançado um novo patch de segurança para o Magento <1.9.2.

atualize suas lojas o mais rápido possível!

Mas o que mudou? Existem explorações conhecidas dos problemas de segurança cobertos? Qual o pior que poderia ter acontecido?

E há algo que possa quebrar? Como no SUPEE-5994, onde não era possível aplicar o patch se o diretório do downloader estivesse ausente ...

Fabian Schmengler
fonte
4
MUITO. Somente o arquivo de correção tem mais de 1.100 linhas, com cerca de 350 adições e 100 remoções. Edições modelo manual terá de ser feito no ~ modelos de 8 frontend se você tiver substituído-los em seu pacote / tema
Ben Lessani - Sonassi
5
Aqui está um bom artigo blog.philwinkle.com/supee-6285-broken-down
Steve Robbins

Respostas:

36

Como já mencionado, as vulnerabilidades corrigidas são descritas em detalhes nesta página oficial (novos documentos do comerciante): http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html#magento/patch-releases-2015.html

Sumário

Este pacote inclui proteção contra os seguintes problemas relacionados à segurança:

  • Vazamento de informações do cliente via RSS e escalonamento de privilégios
  • Solicitar falsificação no Magento Connect leva à execução de código
  • Script entre sites na lista de desejos
  • Script entre sites no carrinho
  • Divulgação do caminho da loja
  • Permissões em arquivos de log muito amplas
  • Script entre sites em Admin
  • Script entre sites em pedidos RSS

Depois de consertar algumas lojas, é isso que eu reuni:

Patches de tema

Alguns arquivos de tema foram corrigidos com escape adicionado para evitar possíveis ataques XSS:

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

Se o seu tema contiver algum desses modelos ou se você tiver feito modificações diretamente base/default(boa sorte, você está ferrado), será necessário corrigi-lo manualmente:

  1. nos modelos de checkout, substitua todas as ocorrências de

    $this->getContinueShoppingUrl()

    com

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

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

    com

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

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

    com

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

Permissões

.htaccessarquivos foram adicionados downloader/Magede downloader/libproibir o acesso direto aos arquivos de origem. Se você usar o nginx, precisará adicionar essas regras para obter o mesmo (thx para Ben Lessani para este):

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

Mas eu recomendo excluir downloaderde implantações em um sistema de sistema ativo de qualquer maneira, nesse caso, você não precisa tomar uma ação.

Privilégios de administrador (ACL)

Se você usar contas de administrador restritas, alguns menus de extensões de terceiros poderão não funcionar mais para elas. O motivo é que o valor de retorno padrão de Mage_Adminhtml_Controller_Action::_isAllowed()foi alterado de truepara Mage::getSingleton('admin/session')->isAllowed('admin'). Extensões que não substituem esse método em seus controladores administrativos porque não usam a ACL, agora precisam do privilégio "ALL" .

A única solução é corrigir as extensões e adicionar esse método a todos os seus controladores administrativos:

protected function _isAllowed()
{
    return true;
}

Ou se eles realmente tiverem um recurso ACL definido em etc/adminhtml.xml:

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

(você pode ver que o patch faz o mesmo Phoenix_Moneybookersnas versões mais antigas do Magento, como 1.7, onde esta extensão foi incluída)

Para obter uma perspectiva mais detalhada sobre esse problema e uma explicação sobre como definir recursos ACL ausentes, consulte: Erros de acesso negado após a instalação do SUPEE-6285

Possíveis erros ao aplicar o patch

  1. Mensagem:

    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
    

    Motivo: o default/moderntema foi removido da instalação

    Solução: adicione a app/design/frontend/default/modernpartir de um novo download do Magento (deve ser a mesma versão da sua loja). Você também pode usar esse espelho: https://github.com/firegento/magento . Depois de aplicar o patch com êxito, você poderá remover o tema novamente.

  2. mensagem

    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

    Razão: o downloaderdiretório foi removido da instalação

    Solução: adicione a downloaderpartir de um novo download do Magento (deve ser a mesma versão da sua loja). Você também pode usar esse espelho: https://github.com/firegento/magento . Depois de aplicar o patch com êxito, você poderá remover o diretório novamente.

  3. Mensagem: Algo semelhante a

    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

    Motivo: os arquivos são armazenados com \r\n(CRLF, quebra de linha do Windows) ou \r(CR, quebra de linha do Mac) em vez de \n(LF, quebra de linha do Unix).

    Solução: basta converter as quebras de linha, seu editor de texto ou IDE deve ser capaz disso.

Fabian Schmengler
fonte
Como esse parece ser um patch importante, você concorda que as lojas que executam o 1.9.x agora estariam melhor atualizando para o 1.9.2.0, que inclui esse patch?
paj
11
Ainda não atualizei nenhuma loja para a 1.9.2.0, mas parece haver algumas armadilhas adicionais e as atualizações devem ser testadas com mais cuidado de qualquer maneira. Eu ainda recomendaria instalar o patch primeiro.
Fabian Schmengler
Em nossa equipe, desenvolvemos uma extensão apenas para nosso uso e, após esse patch, percebi que alguns dos controladores administrativos não estavam implementando o _isAllowedmétodo. Felizmente, tivemos ACL no módulo e nenhuma ação adicional foi necessária, além da adição do método. Além disso, encontrei a primeira mensagem de erro com o default/moderntema que havia sido movido (também achei o culpado graças ao Git). +1 para isso
Vic
Algumas coisas excelentes aqui. Quando fui atualizar meu cart.phtml, comparei minha versão com a da base e notei que sua edição parecia um pouco errada. A nova linha do arquivo de correção é: <tipo de botão = "botão" 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 -> __ ('Continuar comprando')?> </span> </span> </button>. Você pode esclarecer?
PedroKTFC
7

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

Geralmente, isso envolve adicionar um método protegido _isAllowed que retorna um booleano. Às vezes, esse booleano é resultado de uma verificação da ACL, como na atualização para Adminhtml / controllers / Catalog / Category / WidgetController. Às vezes, isso é codificado como true, como no Adminhtml / controllers / AjaxController.php

Depois de adicionar:

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

Para um dos Controladores de Terceiros, a Seção de Administrador começou a "funcionar" novamente ...

Então teremos outro Patch Magento em breve? Este parece ser um problema maior ...

Piotr Siejczuk
fonte
Por favor, veja minha resposta. Ao conceder às funções restritas o privilégio "Painel" permitirá o acesso a seções de terceiros sem o próprio recurso ACL novamente.
Fabian Schmengler
Magento 1.8 : Verificou que (tinha esse direito "ON") - mesma história: Acesso negado . Sim, eu tenho logout primeiro e entrar login depois :)
Piotr Siejczuk
Desculpe, eu interpretei mal a configuração de "admin", mas na verdade só retorna true para usuários com todos os privilégios. É verdade que muitas extensões precisarão ser corrigidas. Atualizei minha resposta de acordo.
Fabian Schmengler
Isso ou como eu escrevi em @ magento.stackexchange.com/questions/73646/… , talvez seja necessário escrever Override geral em app / code / local para Mage_Adminhtml_Controller_Action :: _ isAllowed () <pre> função protegida _isAllowed () {return Mage :: getSingleton ('admin / session') -> isAllowed ('system / config'); } </pre>
Piotr Siejczuk
11
Se "Sistema / config" como obras de permissão padrão para você .. depende do comerciante eu acho
Fabian Schmengler
3

Se você possui muitas extensões locais / da comunidade, deve prestar atenção especial a essa alteração no SUPEE-6285, que afeta app/code/core/Mage/Adminhtml/Controller/Action.phpe está na linha 666, dependendo da sua versão do patch (este é o arquivo de patch EE 1.14.0.1):

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

Todos os módulos personalizados que não implementam seus próprios recursos de administrador são afetados pela alteração acima e o acesso será negado, a menos que o usuário administrador em questão tenha privilégios totais de administrador.

Se você procurar em algum lugar do patch, verá que muitos dos módulos principais incluídos foram atualizados; no entanto, é provável que isso afete muitos módulos de terceiros. Portanto, preste atenção especial ao testar quaisquer extensões de terceiros no post do site para verificar você ainda pode acessá-los!

simonyoung
fonte
1

Parece que a página de lançamento do patch foi atualizada com informações sobre o que afeta.

Ainda tenho que instalar em um site de produção e testar

Goose84
fonte
3
Instalei-o no servidor Dev e funcionou bem, então coloquei-o em produção. Tudo parecia funcionar bem, até que alguns dos nossos administradores de produtos e vendas tentaram usar o Magento admin - esses usuários restringiram as permissões de função por meio do 'user role editor' no Magento, foram freqüentados com erros de acesso negado em algumas áreas do site da área de administração que usam plug-ins de terceiros. Minha conta de administrador principal ainda funciona muito bem em todos estes ... Eu estou olhando para ele ainda
Ricky Odin Matthews
0

A lista completa dos arquivos modificados após a aplicação do patch também está disponível em app/etc/applied.patches.list

gopherIT
fonte
0

No meu caso para módulos de terceiros, a adição do código abaixo aos adminhtml controllers funcionou:

protected function _isAllowed()

{
     return true;
}
Ankur Jain
fonte