Hubberstore Case — Campanha massiva de infecção em lojas de e-commerce

SoC
stolabs
Published in
5 min readJul 15, 2022

--

ATUALIZAÇÃO: Um novo domínio foi identificado durante novas avaliações. Este domínio foi criado dia 13/07/2022, e está disponível na seção de IoCs. Caso novos domínios sejam encontrados, eles também serão disponibilizados em: https://otx.alienvault.com/pulse/62d1bdbbcc8dabc63b5d2538

Introdução ao problema

As equipes de Resposta a Incidentes e Cyber Threat Intelligence da Stone Pagamentos identificaram uma campanha massiva de infecção de lojas e-commerce a partir de um código JavaScript malicioso sendo utilizado para realizar a exfiltração de dados pessoais e de cartões de crédito.

A chamada do script malicioso foi encontrada em diversos sites de e-commerce no Brasil, sendo a importação do seu código realizada geralmente através da página principal das lojas e, em alguns casos, apenas na fase do checkout de compras.

O período de atuação desta campanha ainda não foi identificado, porém, foi possível identificar diversas lojas expostas a esse script desde de julho de 2021. Apesar do período observado, constata-se que o domínio malicioso, que será demonstrado no decorrer deste artigo, está registrado desde dezembro de 2020.

Modus Operandis

O código tem como objetivo obter informações bancárias e pessoais do usuário durante a fase de checkout da compra em sites de e-commerce, coletando dados a partir das variáveis do formulário de compras e enviando-os em formato base64 para um servidor HTTP remoto, assim concluindo a sua fase de exfiltração.

Trecho de chamada maliciosa se passando por componente legítimo de biblioteca.
Requisição realizada ao script malicioso. A resposta contém um código JavaScript ofuscado.
Resposta completa da requisição.

Após desofuscar o código malicioso, foi possível identificar todos os dados que seriam capturados pelo script. Neste caso, a partir do arquivo app.js, podemos facilmente identificar a coleta de dados como CPF, nome, data de nascimento, número do cartão de crédito, sua data de expiração e código de segurança.

Dados de cartões de crédito a serem coletados a partir dos elementos da página infectada.
Envio de dados de cartão de crédito concatenados em base64 para o domínio de exfiltração.

Identificamos adicionalmente um segundo script, utilizado também para realizar a exfiltração de dados de cartão de crédito, porém, capturando de forma complementar, os demais dados de formulário a respeito da localização das suas vítimas, como endereço, CEP e afins.

Trecho desofuscado do arquivo core-app.js, também localizado no domínio malicioso. Este script realiza a coleta adicional de dados de endereço das vítimas.

Todos os trechos de código utilizados para injetar o script malicioso tentam apresentar uma certa legitimidade, visando confundir desenvolvedores durante o processo de manutenção do código, desta forma, persistindo seus artefatos no ambiente pelo maior tempo possível.

Script malicioso “gtm.js” inserido em trecho de código associado ao Google Analytics. Tal inserção poderá dificultar o entendimento sobre sua utilização em uma eventual manutenção de código.

Em um dos sites infectados, a injeção foi realizada no código JavaScript armazenado em sua CDN (Content Delivery Network) privada, a mesma estava hospedada na Amazon AWS.

Script malicioso ofuscado e inserido na requisição de um arquivo presente na CDN privada.

Por fim, podemos considerar, por enquanto, que o objetivo da campanha visa somente a inserção de scripts maliciosos para realizar a coleta de dados pessoais e de compras, não se preocupando em expandir o acesso à rede interna das lojas infectadas ou de outros ativos.

Alvos

Até o momento desta postagem, não foi possível obter conclusões acerca de um alvo específico desta campanha, seja de exploração de vulnerabilidades ou tecnologias de CMS (Content Management System), como por exemplo, Magento, Wordpress, Joomla, Drupal, Wix e demais variantes.

De acordo com os artefatos identificados, diversos sites utilizando variados tipos de engines de e-commerce constam como infectados, inicialmente, indicando que o grupo responsável pela campanha pode estar utilizando alguma base de vazamento de credenciais e/ou algum novo exploit que esteja associado às tecnologias das empresas que possuem páginas de e-commerce no Brasil.

Recomendações

Considerando que as lojas virtuais podem ter sido afetadas por uma vulnerabilidade ou vazamento de dados e, adicionalmente, ponderando o possível impacto direto aos seus clientes no que tange a Lei Geral de Proteção de Dados Pessoais (LGPD), separamos uma lista de recomendações de mitigação que podem ser implementadas na infraestrutura das páginas possivelmente afetadas.

1 — Manter os sistemas atualizados

Atualizar com regularidade os sistemas operacionais, serviços e frameworks utilizados para manter os sites de e-commerce.

2 — Revisão periódica de código

Os desenvolvedores ou mantenedores dos sites de e-commerce, devem realizar a revisão dos códigos a fim de identificar eventuais injeções de artefatos maliciosos, este processo deve ser realizado com certa frequência.

3 — Mitigação no lado do servidor

O CSP (Content Security Policy) é um mecanismo que o desenvolvedor pode utilizar para criar um controle de chamada de recursos de uma página, servindo como uma escrita de diretrizes para políticas de segurança [RFC 7762].

3.1 — Adicionando cabeçalho CSP no servidor Web:

Configure seu servidor web para adicionar o seguinte item no cabeçalho de chamada:

Content-Security-Policy: default-src ‘self’;

Caso você utilize recursos externos para carregar a página, como CDN (Content Delivery Network), adicione no final da linha, como no exemplo abaixo:

Content-Security-Policy: default-src ‘self’ cdn.loja-xpto.com.br;

3.2 — Adicionando campo CSP no código HTML da página:

Adicione a seguinte meta tag na página de checkout:

<meta http-equiv=”Content-Security-Policy” content=”default-src ‘self’ “>

Ou caso necessite adicionar outros recursos necessários para a página:

<meta http-equiv=”Content-Security-Policy” content=”default-src ‘self’ cdn.loja-xpto.com.br“>

4 — Mitigação no lado do cliente

Para impedir que usuários da sua rede sejam afetados durante o uso de alguma página de e-commerce infectada, realize o bloqueio dos domínios apontados na sessão de IoCs no firewall da rede.

Em casos de bloqueio de forma local, você pode adicionar os domínios da sessão de IoCs nos arquivos de resolução de nome do seu sistema operacional, apontando para o IP local, anulando a requisição para o servidor malicioso, exemplo:

Windows: C:\Windows\System32\drivers\etc\hosts

Linux: /etc/hosts

> 127.0.0.1 hubberstore.com

> 127.0.0.1 great-gumble.com

IoCs

Domínios:

hubberstore[.]com

great-gumble[.]com

IP:

198[.]57[.]151[.]221

162[.]144[.]3[.]43

Urls:

hxxp[://]hubberstore[.]com/app[.]js

hxxp[://]hubberstore[.]com/apps[.]js

hxxp[://]hubberstore[.]com/core-app[.]js

hxxp[://]hubberstore[.]com/events[.]js

hxxp[://]hubberstore[.]com/gtm[.]js

hxxp[://]hubberstore[.]com/tes2[.]js

https[://]great-gumble[.]com/app.js

Hashes

Filename: app.js

MD5: bd86b6e28e3238ba4e04210cec4d6db3

SHA1: 772a86ea5847d51732fc01bbc5c3664ced0d08d7

SHA256: 50bf24d359b058027e8df0133499541f639fd6fc658b16a30442724310bacd97

Filename: apps.js

MD5: c3612432a518ff381e6d4b43237f6f63

SHA1: 437372da60dde631d44569f4b06b5154defdaaa9

SHA256: f4dd09311cf1dd0b88b329faa7589ef9e19d9a66cb367a7d70d86fb97b84c8ea

Filename: core-app.js

MD5: c8c3ef47ae15d529bb950099027273e2

SHA1: a4cfb5d38e1857e4bec09d0b5fa8630e6fa9ac94

SHA256: 07de637b5fef97d5191dda6a4fdee08ff2c366df0f1c6ece4c55791afca20344

Filename: events.js

MD5: 6454d3bd3748953b0a294f01e260e6ec

SHA1: b629c9bbb5a77616756437a3d851d1ca2356a869

SHA256: 429f82505a07a9bb33dd0dd7fa146b9bd112772186bfe1b11a7d3a40b7dcb159

Filename: gtm.js

MD5: 1806e068b8ddcc75db04490bd7df0fc5

SHA1: a812e475e1abcbc4eebd0e738faf88e4fd51b7a2

SHA256: b1427495895e1ccfdaf57895df91a124b837f08daea091dbfd5fef7740b55a39

Filename: tes2.js

MD5: 56dc3b9388fbb54a13f9dfc3698f72ad

SHA1: 4d28f7c1aad1d8237b96bac81b04677d353539ff

SHA256: 20fe990dfeb8fdb95c54f38571e5b60b7bed55c240f8ff2c56fcd3acfd98d8ac

--

--