Skip to main content
Blog
Blog Attacks

O que é formjacking? Como o ataque funciona e como pará-lo

O formjacking é um ataque client-side que injeta JavaScript para capturar dados de pagamento e login enquanto o utilizador os digita. Saiba como o ataque funciona, por que as ferramentas tradicionais não o detetam e como identificá-lo.

Jul 18, 2026 11 min read
O que é formjacking? Como o ataque funciona e como pará-lo

Resumo: o que é formjacking

  • JavaScript injetado em um formulário para roubar o que usuários digitam antes do submit. Campos de cartão, credenciais ou PII.
  • Roda no navegador depois que a página é servida. Seu WAF e logs de origem não veem nada. O script comprometido fica dentro de um domínio confiável permitido.
  • Caminho de conformidade: inventário de scripts 6.4.3 e detecção de adulteração 11.6.1. Caminho técnico: monitoramento em sessão.

Formjacking — the skimmer's older cousin

Como funciona o formjacking

Um ataque de formjacking segue quatro passos.

Diagrama de fluxo que mostra um script de formjacking injectado através de um script de terceiros comprometido, ligando-se aos campos do formulário de checkout, copiando dados de cartão e exfiltrando-os para um endpoint do atacante enquanto o pagamento legítimo se conclui

O diagrama segue um checkout (shop.example[.]com/checkout) ao longo de cinco etapas, e mostra por que uma vista ao nível da rede fica cega enquanto uma vista ao nível do browser o deteta:

EtapaO que acontece no browserO que o servidor / a CSP vê
1. Página de checkoutO comprador digita o número de cartão + CVV no formulário realCarregamento de página normal
2. Script de fornecedor adulteradowidget.js (modified) carrega como qualquer outra tag de terceirosUm URL de script permitido e já de confiança
3. Skimmer do formulárioO listener injetado liga-se a cada campo de entrada e lê as teclas em tempo realNada, nenhum pedido ao servidor
4. Endpoint de exfiltraçãoCópia codificada enviada para cdn-metrics[.]example via POST /collect?d=eyJjYyI6…, disfarçada de baliza de análiseParece tráfego de análise comum
5. AtacanteOs cartões roubados são revendidos ou usados para fraude com cartões; o pagamento real conclui-se na mesmaSem anomalia, a transação tem sucesso

A camada de rede fica cega porque o pedido de exfiltração sai do browser diretamente para o domínio do atacante. A cside observa a camada do browser, por isso o listener injetado e a baliza de saída são detetados onde realmente são executados.

1. Colocar código na página. O atacante coloca JavaScript na página alvo, quase sempre sem o conhecimento do proprietário do site. A rota mais comum é comprometer um script de terceiros, uma tag de análise, um widget de chat, uma ferramenta de testes A/B ou uma biblioteca de pagamentos, para que o skimmer chegue embalado dentro de código em que o site já confia e que carrega em cada checkout.

2. Ligar-se aos campos do formulário. Assim que o script é carregado, liga listeners de eventos ao formulário de pagamento ou início de sessão. Um listener no evento input é acionado em cada tecla pressionada; um no evento submit é acionado quando o utilizador clica em pagar. O script também pode ler diretamente os valores do DOM depois de os campos estarem preenchidos.

3. Copiar os dados. O listener captura os valores dos campos, número de cartão, validade, CVV, morada de faturação, exatamente como o utilizador os introduziu. O próprio formulário não é modificado. A transação do utilizador continua a ser processada pelo processador de pagamentos legítimo.

4. Exfiltrar. Os dados roubados são codificados e enviados para um domínio controlado pelo atacante, muitas vezes disfarçados como um ping de análise ou um pedido de imagem para se misturarem com o tráfego de saída normal da página. A maioria dos cabeçalhos Content Security Policy não bloqueia isto porque o atacante utiliza um domínio que a política já permite ou explora uma lacuna existente.

Como os atacantes introduzem código de formjacking no seu site

O formjacking não requer uma violação direta dos seus servidores. As três rotas de entrega mais comuns:

Where formjacking hits

Comprometimento de scripts de terceiros. A maioria das páginas de pagamento e e-commerce carrega entre 20 e 60 scripts de terceiros, plataformas de análise, ferramentas de chat, gestores de tags, bibliotecas de pagamentos, widgets de fornecedores de marketing. Qualquer um desses fornecedores é uma superfície de ataque. Se o atacante comprometer a CDN ou a infraestrutura do fornecedor, todos os sites que carregam esse script recebem o skimmer. A violação da British Airways em 2018 pôs em risco os dados pessoais de 429.612 clientes após os atacantes terem modificado o JavaScript no fluxo de pagamento da companhia aérea. Os investigadores ligaram o ataque a atores de ameaça da Magecart que utilizaram um script de fornecedor externo comprometido, e não uma violação direta dos próprios servidores da British Airways. (Wikipedia: Violação de dados da British Airways)

Domínios expirados ou sequestrados. Os sites carregam por vezes scripts de domínios de terceiros que entretanto expiraram ou mudaram de proprietário. Um atacante que registe esse domínio pode então servir qualquer JavaScript que queira a todos os sites que ainda carregam a antiga tag de script. Como o URL não mudou e o domínio servia anteriormente código legítimo, nenhuma verificação automática o assinala imediatamente.

Injeção direta de código. Se o atacante explorar uma vulnerabilidade no CMS, no painel de administração ou num plugin do site, pode injetar o script de formjacking diretamente nos próprios ficheiros do site. Esta rota requer mais acesso, mas não deixa nenhuma dependência externa para rastrear.

O que o formjacking tem como alvo

Os atacantes priorizam páginas que recolhem dados de alto valor com o mínimo de fricção:

Tipo de páginaDados geralmente capturados
Checkout de e-commerceNúmero de cartão, validade, CVV, morada de faturação
Registo de contaE-mail, palavra-passe, nome, morada postal
Páginas de início de sessãoNome de utilizador e palavra-passe
Formulários de saúdeNúmero de seguro, data de nascimento, informações de saúde
Pedidos de conta financeiraNIF, rendimentos, dados bancários

As páginas de checkout são o alvo principal porque os dados de cartão têm um mercado de revenda imediato. As credenciais de início de sessão são a segunda prioridade porque permitem a tomada de controlo de contas em plataformas com métodos de pagamento guardados.

Por que as ferramentas de segurança tradicionais falham com o formjacking

Os firewalls de aplicações web protegem o tráfego que chega ao seu servidor. Os dados do formjacking saem do navegador diretamente para um domínio do atacante, o WAF nunca os vê.

Os scanners do lado do servidor inspecionam o código em repouso na sua origem. Um script de terceiros comprometido carrega da CDN de um fornecedor em tempo de execução, pelo que nunca está no seu servidor para ser analisado.

As revisões manuais periódicas verificam os scripts listados no seu gestor de tags ou repositório de código. Um skimmer injetado num script de terceiros entre ciclos de revisão é invisível até alguém executar a próxima auditoria, muitas vezes semanas depois.

A Subresource Integrity (SRI) protege os scripts para os quais calcula um hash no momento da implementação. Não consegue proteger scripts carregados de CDNs controladas por fornecedores onde o atacante tem acesso de escrita, nem scripts gerados dinamicamente por pedido.

Os requisitos 6.4.3 e 11.6.1 do PCI DSS 4.0.1 existem porque o setor reconheceu esta lacuna. O inventário de scripts e a monitorização contínua de adulterações nas páginas de pagamento tornaram-se obrigatórios a 1 de abril de 2025. (PCI Security Standards Council)

Os skimmers também iludem ativamente os scanners. A maioria verifica navigator.webdriver, que retorna true em navegadores headless automatizados, e serve código limpo às ferramentas de segurança enquanto executa o skimmer completo para utilizadores reais.

Como detetar o formjacking

Detetar o formjacking requer visibilidade sobre o que o JavaScript faz em tempo de execução nos navegadores de visitantes reais. Os sinais específicos a monitorizar:

  • Scripts novos ou modificados em páginas sensíveis. Um script que não estava presente no dia anterior, ou cujo conteúdo mudou fora de uma janela de implementação programada, é o primeiro indicador.
  • Listeners de eventos inesperados em campos de formulário. O código legítimo liga listeners submit para processar formulários. Um listener em eventos input, keydown ou keyup em campos de pagamento ou credenciais, adicionado por um script de terceiros, é uma assinatura de formjacking.
  • Dados de saída para domínios não listados. Qualquer pedido de rede de uma página de pagamento para um domínio que não conste da sua lista permitida aprovada requer investigação imediata.
  • Payloads codificadas em pedidos de saída. Os formjackers codificam os dados roubados, frequentemente em base64, antes de os enviar. Um beacon com um parâmetro codificado invulgarmente longo que não corresponde a nenhum evento de análise conhecido é um sinal de alerta.

A limitação fundamental é que apenas a monitorização dentro do navegador consegue ver estes sinais em condições reais. Os scanners que operam do exterior falham com o formjacking que se oculta dos utilizadores reais.

Como prevenir o formjacking

Nenhum controlo único elimina todas as rotas de formjacking. Combinar vários controlos reduz significativamente a superfície de ataque:

  1. Inventariar todos os scripts em páginas sensíveis. Conhecer cada script próprio e de terceiros que carrega nas páginas de pagamento e início de sessão, quem o autorizou e por que está lá. Scripts não reconhecidos não devem carregar.

  2. Monitorizar alterações continuamente. Um script que muda entre ciclos de auditoria é uma violação não detetada. A monitorização contínua de adulterações, obrigatória ao abrigo do requisito 11.6.1 do PCI DSS 4.0.1, deteta alterações em minutos em vez de semanas.

  3. Aplicar SRI onde for prático. Para scripts que controla completamente e versiona você mesmo, os hashes SRI verificam que o script não foi alterado desde a implementação. A SRI não funciona para scripts de terceiros frequentemente atualizados ou gerados dinamicamente por pedido.

  4. Configurar a Content Security Policy de forma restritiva. Uma CSP rigorosa limita os domínios para os quais os scripts podem enviar dados, reduzindo as opções de exfiltração de um skimmer. Na prática, as páginas de pagamento frequentemente precisam de permitir muitos domínios para análises legítimas e funcionalidades de pagamento, tornando um bloqueio completo difícil.

  5. Implementar monitorização client-side de visitantes reais. A defesa mais direta é a monitorização que observa o que cada script faz em navegadores reais, não um scanner que executa pedidos sintéticos do exterior. Esta é a abordagem da cside.

Como a cside deteta o formjacking em navegadores reais

A cside é implementada como um único snippet de JavaScript próprio que monitoriza o comportamento dos scripts nos navegadores de visitantes reais, não um crawler ou scanner que opera do exterior.

Para o formjacking, a cside deteta:

  • Listeners de eventos ligados a campos de formulário por scripts de terceiros, com especial atenção aos listeners que são acionados em teclas pressionadas em vez de no envio do formulário
  • Pedidos de dados de saída para domínios que não constam da lista permitida aprovada do site
  • Novos scripts que aparecem em páginas de pagamento ou início de sessão fora de uma janela de implementação
  • Alterações em scripts existentes, incluindo modificações em tempo de execução na saída carregada de uma tag de fornecedor

Como a cside opera na camada do navegador ao lado do ataque, deteta o skimmer no momento em que é acionado, antes de os dados terem sido já exfiltrados. Para as organizações sujeitas ao PCI DSS 4.0.1, o PCI Shield mapeia esta monitorização para os requisitos 6.4.3 (inventário e autorização de scripts) e 11.6.1 (deteção de adulterações), gerando relatórios prontos para o QSA de forma contínua.

Para contexto sobre como o formjacking se relaciona com o ecossistema mais amplo do skimming digital e os grupos de ameaça Magecart, consulte o guia complementar: Formjacking vs Magecart vs skimming digital.

Agende uma demo para ver o que a cside encontra nas suas páginas de pagamento, ou saiba mais sobre prevenção de e-skimming.

Formjacking flagged in a live session

Leituras relacionadas

Simon Wijckmans
Founder & CEO

Founder and CEO of cside. Previously a product manager on Cloudflare Page Shield (now Cloudflare Client-Side Security). Co-chair of the W3C Anti-Fraud Community Group and a Forbes 30 Under 30 honoree. Building accessible security against client-side attacks, web security is not an enterprise-only problem.

FAQ

Frequently Asked Questions

O formjacking é um ataque client-side em que JavaScript malicioso intercepta os dados introduzidos em formulários web, campos de cartão de pagamento, credenciais de início de sessão, informações pessoais, e envia uma cópia para um servidor controlado pelo atacante antes ou no momento em que o formulário é submetido. O formulário legítimo continua a funcionar normalmente, pelo que nem o proprietário do site nem o utilizador sabem que os dados foram roubados.

As três rotas mais comuns são: (1) comprometer um script de terceiros que o site carrega, uma tag de análise, um widget de chat, uma ferramenta de testes A/B ou uma biblioteca de pagamentos, para que o skimmer aproveite o código de confiança; (2) explorar uma vulnerabilidade no próprio CMS ou código do site para injetar o script diretamente; e (3) sequestrar um domínio expirado ou abandonado que ainda serve um script em que o site alvo confia. Como o skimmer chega através de um canal de confiança, contorna as verificações de integridade que o proprietário do site nunca pensou aplicar a um fornecedor em que depende.

O alvo principal são os dados de cartão de pagamento nas páginas de checkout: número de cartão, data de validade e CVV. Os atacantes de formjacking também recolhem credenciais de início de sessão em formulários de login, informações pessoalmente identificáveis introduzidas durante a criação de contas e dados de saúde ou financeiros recolhidos em formulários especializados. Qualquer formulário que processe entradas sensíveis é um alvo potencial.

Um firewall de aplicações web situa-se entre a internet e o seu servidor, inspecionando os pedidos de entrada para a sua origem. O formjacking é executado inteiramente no navegador do visitante, depois de o servidor já ter entregue a página. O script malicioso lê os dados do formulário e envia-os diretamente para um domínio do atacante, uma ligação de saída separada que nunca passa pelo WAF. Os controlos do lado do servidor não têm visibilidade sobre o que o JavaScript faz em tempo de execução no navegador.

A maioria dos ataques de formjacking passa despercebida durante semanas a meses. A transação completa-se normalmente, não aparecem erros visíveis e os registos do servidor não mostram nada invulgar. Os atacantes concebem os skimmers para controlar a sua própria execução, funcionam apenas nos caminhos de checkout, escondem-se dos scanners automáticos verificando sinais de navegadores headless e exfiltram dados em pedidos que se assemelham a beacons de análise comuns. As vítimas geralmente descobrem uma violação através de um alerta de fraude da rede de cartões, da divulgação de um investigador de segurança ou de uma reclamação de um cliente.

Sim. Os requisitos 6.4.3 e 11.6.1 do PCI DSS 4.0.1, que se tornaram obrigatórios a 1 de abril de 2025, foram introduzidos especificamente para abordar os ataques de skimming client-side, incluindo o formjacking. O requisito 6.4.3 exige um inventário e autorização de todos os scripts nas páginas de pagamento; o 11.6.1 requer monitorização contínua e alertas sobre alterações não autorizadas nos scripts das páginas de pagamento e nos cabeçalhos HTTP. Em conjunto, empurram as organizações para uma monitorização client-side contínua em vez de revisões periódicas.

A cside é implementada como um único snippet de JavaScript próprio que monitoriza todos os scripts a ser executados nos navegadores de visitantes reais nas páginas de pagamento e início de sessão. Deteta o formjacking rastreando listeners de eventos inesperados ligados a campos de formulário, monitorizando dados enviados para domínios fora da lista permitida, alertando sobre scripts novos ou modificados e identificando padrões de comportamento, como um script que lê valores de campos em cada tecla pressionada em vez de no envio, que são assinaturas de um skimmer. Como corre no navegador ao lado do ataque, deteta-o no momento em que é acionado.

Monitore e Proteja Seus Scripts de Terceiros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Comece grátis, ou experimente o Business com um teste de 14 dias.

Interface do painel cside mostrando monitoramento de scripts e análises de segurança
Related Articles
Agende uma demonstração