Como corrigir a falha de segurança do Magento – Zend Framework Vulnerability

A Magento Inc. publicou em seu blog no dia 05/07/2012 um artigo sobre uma falha de segurança em seus sistemas devido a uma vulnerabilidade do framework Zend.

Important Security Update – Zend Platform Vulnerability

Essa correção é obrigatória a todos os usuários de Magento, porque a falha de segurança é de alto nível. Um possível ataque ao seu site explorando essa brecha poderia dar acesso a senhas, arquivos de configuração e até ao seu banco de dados – se este estiver hospedado no mesmo servidor que seu sistema Magento.

O Problema

A plataforma Zend disponibiliza uma funcionalidade XML-RPC. Que permite que você faça requisições http para outros sistemas, e receba respostas simples. Ou seja, é um protocolo de comunição web, assim como SOAP ou REST.

Nem todo mundo utiliza esse recurso do sistema. Talvez você utilize e nem saiba disso. Pois um módulo externo que você tenha instalado pode fazer uso deste protocolo (ex.: módulos de pagamento, módulos de frete, módulos de redes sociais).

Indiferente se você usa ou não…você precisa corrigir essa falha!

A Solução – Parte 1

A solução mais fácil e recomendado pela Magento, óbviamente é a atualização do seu sistema para a versão mais recente (neste momento 1.7.0.2).

Download da versão mais recente no site oficial

Então quem utiliza uma versão igual ou superior a 1.7.0.2 não precisa se preocupar com isso, pois a equipe de desenvolvimento da Magento já sobreescreveu alguns métodos para resolver o problema.

A Solução – Parte 2

Agora pra quem utiliza as versões 1.4.x, 1.5.x, e 1.6.x e não quer, não pode, ou não pretende atualizar a versão do Magento, existe um patch para correção disponibilizado pela Magento.

Apesar de ser algo simples, eu considero (de certa forma) avançado. Pois você precisa se conectar ao seu servidor usando um prompt e executar alguns comandos.

1. Usando um MacOsX eu me conectei ao servidor por ssh usando o Terminal do Mac, no Windows você pode usar algum software ssh. Se você estiver conectado no diretório raiz (root), navegue até o seu diretório público (public_html), onde o Magento está instalado.

Para se conectar ao servidor usando ssh digite

ssh seu_usuario@ftp.seu_dominio.com

Em seguida digite sua senha. Para listar o diretório use “ls“. Para navegar entre diretórios

cd /home/seulogin/public_html

(seulogin = nome do seu usuário no servidor)

Caso você tenha criado novos diretórios para instalar o Magento, então navegue até o diretório onde o Magento foi instalado.

cd /home/seulogin/public_html/outro_diretorio/magento_instalado

2. Copie o patch fornecido pela Magento. Atenção para sua versão do Magento. (no rodapé do seu backend aparece a versão instalada)

Exemplo

wget -O http://nome.do.patch

Versão Community 1.4.0.0 – 1.4.1.1 

wget http://www.magentocommerce.com/downloads/assets/1.7.0.2/CE_1.4.0.0-1.4.1.1.patch

Versão Community 1.4.2.0 

wget http://www.magentocommerce.com/downloads/assets/1.7.0.2/CE_1.4.2.0.patch

Versão Community 1.5.0.0 – 1.6.x 

wget http://www.magentocommerce.com/downloads/assets/1.7.0.2/CE_1.5.0.0-1.7.0.1.patch

Se você utiliza a versão 1.7.0.0 ou 1.7.0.1 do Magento, pode usar o patch da versão 1.5.x1.6.x. Mas a melhor solução nesse caso seria atualizar seu Magento para versão 1.7.0.2 (ou superior).

Tentei executar o wget -O como a equipe do Magento recomenda, mas ele não fez o download, apresentou erro de URL. Então copiei o arquivo direto da URL pra minha máquina e depois enviei pro servidor via FTP. Outra opção que testei com sucesso foi executar o comando wget sem o parametro -O.

3. Feito o download basta executar o script.

Exemplo

patch -p0 < nome.do.patch

Teste realizado na versão 1.4.1.0

patch -p0 < CE_1.4.0.0-1.4.1.1.patch

Se você digitou os comandos corretamente, então uma mensagem de sucesso deve aparecer no seu terminal.

Pra fechar a conexão com o servidor basta digitar

exit;

A Solução – Parte 3

Agora se você usa uma versão igual ou anterior a 1.4.0.0, restou a “porta dos desesperados” pra você. Só execute este procedimento se você não utiliza a API XML-RPC, e/ou se não foi possível executar o patch de correção.

Abra o arquivo XmlrpcController.php que fica no diretório app/code/core/Mage/Api/controllers

Você deve encontrar a função indexAction(). Basta comentar ou apagar tudo que estiver dentro desta função.

public function indexAction()
{
    //apaga tudo
}

Esse procedimento pode ser feito nas demais versões, mas apagando o código da função indexAction você está “desligando” a API do XML-RPC. Ou seja, os módulos que utilizam essa função deixarão de funcionar.

Pra Encerrar

A equipe de desenvolvimento do Magento pretende atualizar a versão do framework Zend nas próximas versões do sistema, o que já ajuda bastante a evitar esse tipo de situação no futuro.

Se você tem uma solução alternativa a estas divulgadas pela Magento, entre em contato que publicaremos (links e/ou vídeos) aqui no blog.

Sucesso a todos!