O script de analytics que ninguém adicionou: desmascarando um skimmer de cartões
O desafio
Um script rouba cartões no checkout da Fernhill. Decodifique o endereço escondido no código. Descubra o domínio que recebe os cartões.
O que você vai aprender
- Reconhecer como um skimmer Magecart exfiltra dados de cartão
- Ler JavaScript ofuscado para recuperar a ordem de decodificação
- Decodificar char codes, uma inversão e base64 em sequência
- Nomear os controles que impedem a injeção de scripts de terceiros
Habilidades testadas
Pré-requisitos
- O que é base64
- Ler uma linha de JavaScript
Como funciona
Um skimmer web é JavaScript injetado numa página de pagamento, geralmente por meio de um script de terceiros comprometido ou de um CMS invadido. Ele lê os campos do cartão enquanto o cliente digita e envia tudo para o atacante, muitas vezes como new Image().src = url + data, uma simples requisição de imagem que não deixa rastro nos logs da própria loja.
Para sobreviver a uma revisão rápida, o endereço de destino é ofuscado. Aqui ele está em base64, invertido e depois guardado como códigos de caractere. O código de decodificação vem na mesma linha, então lê-lo de dentro para fora revela a receita exata: fromCharCode, reverse(), atob.
Erros comuns
- Aplicar base64 primeiro. Os números são códigos de caractere; decodifique com decimal antes de qualquer outra coisa.
- Pular a inversão. Uma string que começa com
==é base64 escrito de trás para frente: o padding fica no final. - Responder google.com. O domínio só imita o do Google; leia-o exatamente como está.
Como se proteger
- Sirva o checkout com uma
Content-Security-Policyrígida: use allowlist emscript-srce limiteconnect-srceimg-src, para que os dados roubados não tenham para onde ir. - Carregue scripts de terceiros com Subresource Integrity (hashes em
integrity=). - Monitore as páginas de pagamento para detectar mudanças nos scripts (requisitos 6.4.3 e 11.6.1 do PCI DSS 4.0).
- Prefira campos de pagamento hospedados num iframe do provedor de pagamento, fora do alcance dos scripts da página.