Patch 2198 para Magento 2
Esse patch de segurança é urgente, a Magento já disponibilizou o patch para download nesta última Quarta-feira, junto com a última versão…
Esse patch de segurança é urgente, a Magento já disponibilizou o patch para download nesta última Quarta-feira, junto com a última versão disponível, se sua instalação usa a última versão do Magento 1, 2.3, 2.2 e 2.1 lançada essa semana então pode ficar tranquilo.
O erro é de SQL Injection ou seja qualquer um pode acessar ou modificar o banco de dados da loja, então recomendo que aplique esse patch o quanto antes.
E aqui eu vou mostrar como instalar o patch de segurança, e também como explorar o erro de segurança, tudo isso utilizando a URL:
https://m23.test/catalog/product_frontend_action/synchronize
Você consegue solucionar esse problema usando o NGINX bloquando essa URL acima, apenas com esse snippet:
location ~ \/catalog\/product_frontend_action\/synchronize\/ { return 404;
}
Aplicando o patch de segurança
Para começar acesse a página de downloads de patches, releases e ferramentas da Magento.
Eu recomendo que você aplique o patch de segurança utilizanso a maneira que ensinei no post Como aplicar bugfix no core do Magento 2?
Onde está o erro?
Basicamente o erro está em dois arquivos listados abaixo, na maneira como eles tratam a comunicação com o banco de dados através de uma rota.
Magento\Framework\DB\Adapter\Pdo\Mysql
Magento\Catalog\Controller\Product\Frontend\Action\Synchronize
Esse caminho de código está presente desde a versão 2.2, você pode ver aqui um SQL Injection utilizando a rota URL não autorizada.
https://m23.test/catalog/product_frontend_action/synchronize?type_id=recently_products&ids[0][added_at]=&ids[0][product_id][from]=?&ids[0][product_id][to]=))) OR (SELECT 1 UNION SELECT 2 FROM DUAL WHERE 1=1) -- -
Explorando o erro
Por favor, não utilize isso para prejudicar lojas Magento 2!
Como podemos fazer qualquer coisa no banco de dados eu obtive a sessão de usuários do admin ativas da tabela admin_user_session utilizando a query SQL.
SELECT * FROM admin_user_session ORDER BY created_at DESC, updated_at DESC LIMIT 1;
Obtive uma sessão ativa como pode ver abaixo.
Depois eu troquei o cookie admin para utilizar o ID da sessão obtido, na URL https://m23.test/admin/admin/dashboard/index via Postman, e logou normal como você pode ver abaixo.
Você pode obter mais detalhes sobre esses patches na página Magento 2.3.1, 2.2.8 and 2.1.17 Security Update.