A segurança do Magento exige um patch adicional para corrigir vulnerabilidade de sanitização
DeveloperSteve Coochin
24 de fevereiro de 2022
0 minutos de leituraQuem trabalha com tecnologia costuma estar sob muita pressão para corrigir código em produção, atualizar um componente de infraestrutura ou aplicar um patch. Muitas vezes, o aviso é curto e a correção precisava ter sido feita cinco minutos atrás. Em qualquer situação de “prazo zero”, é preciso equilibrar a pressa para corrigir logo com o tempo necessário para testar e verificar.
Recentemente, foi lançado um patch crítico para o Magento Ecommerce, o Magento Open Source e as versões do Magento para Adobe Commerce, após pesquisadores de segurança descobrirem um problema crítico na plataforma de e-commerce amplamente adotada. O CVE-2022-24086 identificou uma vulnerabilidade que permitia explorar uma injeção de SQL ou uma injeção de objetos PHP durante a finalização da compra, sem autenticação.
A equipe de segurança da Adobe lançou um patch inicial e agiu rápido para disponibilizar a correção. Alguns dias depois, pesquisadores descobriram que o patch não era suficiente para mitigar o problema no código. Isso levou à criação de um novo CVE-2022-24087 e à disponibilização de um segundo patch.
Há um patch para a vulnerabilidade recém-identificada no alerta de segurança mais recente da Adobe. O novo patch deve ser aplicado sobre o patch original para CVE-2022-24086.
Uma das coisas de que mais gosto na área de AppSec é fazer a devida diligência em implantações, bibliotecas e tudo o que possa afetar os usuários finais de uma plataforma. Então, vamos analisar o patch mais recente e ver o que mudou.
Analisando o patch para o CVE-20220-24087
Antes de me aprofundar no novo patch, MDVA-43443, vamos revisar o patch original, MDVA-43395, para entender o que ele fez.
É importante observar que as duas vulnerabilidades afetam apenas o Magento Open Source e o Adobe Commerce nas versões iguais ou superiores à 2.3.4 e inferiores à 2.4.5-p1 ou 2.3.7-p2.
O patch original (MDVA-43395) adicionou uma nova sanitização segura das entradas do usuário durante o fluxo de finalização da compra na lógica do aplicativo da loja Magento. /Email/Model/Template/transDirective e VarDirective.php receberam padrões de preg_replace() e preg_match() para ajudar a sanitizar tipos de caracteres indesejados nas entradas do usuário.

Após a implantação do patch, pesquisadores de segurança descobriram que ele não bastava para neutralizar o vetor de ataque e que, na verdade, abria caminho para o surgimento de vulnerabilidades ainda mais profundas no framework.
O novo patch (MDVA-43443) adiciona uma função reutilizável ao framework, chamada sanitizeValue(), como extensão de \Magento\Framework\Filter\Template. A função realiza uma verificação e correspondência de sanitização com preg_replace.

Em seguida, sanitizeValue() é usada para substituir o código de sanitização com preg_match() e preg_replace() adicionado pelo patch original MDVA-43395.

A função sanitizeValue() é então usada em vários pontos do código, inclusive no carregamento de valores de configuração e de tipos de valores personalizados já sanitizados.

É em blockDirective() que ocorre mais uma etapa de sanitização: são adicionadas correspondências de caracteres e sanitizações ao núcleo de \Magento\Framework\FilterTemplate.

resolveBlockDirective deixa de ser uma função pública e passa a ser privada, e layoutDirective é migrada para resolveLayoutDirective.
A mudança de função pública para privada é importante para a segurança de aplicações PHP, porque a declaração como função privada significa que ela só pode ser usada dentro da classe pai. Uma função pública poderia ser acessada em qualquer parte do aplicativo.

Os dois patches estão disponíveis no Boletim de segurança APSB22-12 da Adobe, para instalação via PHP Composer ou para incorporação em uma base de código derivada.
Lembre-se de fazer backups seguros antes de aplicar os dois patches e testar o código antes da implantação.
Cadastre-se na Snyk para receber alertas sobre novas vulnerabilidades
Uma coisa que sempre faço com grandes projetos de código aberto, como o Magento, é monitorar o repositório público pelo meu Painel da Snyk.
Clique em Add Project e monitore repositórios públicos do GitHub.

Isso é especialmente útil em branches de desenvolvimento de um projeto, pois você pode receber alertas sobre possíveis problemas enquanto eles ainda estão sendo desenvolvidos. Também ajuda a contribuir com o projeto, porque permite identificar problemas que podem ser corrigidos antes de o desenvolvimento terminar.
Em projetos de plataforma como o Magento, o processo de monitoramento procura manifestos de pacotes, código, contêineres e configurações de IaC para analisar e destacar possíveis problemas. O melhor é que ele também sugere possíveis correções e ajuda você a entender tudo o que foi detectado.
Comece a participar de desafios de Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.
