Skip to main content
Blog
Blog Attacks

Ataques Magecart explicados: cómo funciona el web skimming en el navegador

Explicación directa de cómo funciona el web skimming Magecart: cómo entra el código, cómo lee tu formulario y cómo exfiltra datos de tarjeta sin verse.

Jul 13, 2026 9 min read
Ataques Magecart explicados: cómo funciona el web skimming en el navegador

Magecart es web skimming que corre dentro del navegador. JavaScript malicioso aterriza en una página de checkout o login, lee lo que el visitante escribe en el formulario y envía una copia a un servidor controlado por el atacante. El pago legítimo sigue pasando, así que para tus servidores parece un día normal de transacciones limpias. Todo parece bien mientras los datos de tarjeta están saliendo, y ese hueco es todo el problema.

Este artículo explica la mecánica para alguien que se encuentra la amenaza por primera vez. No es una política de prevención ni la taxonomía formjacking-vs-Magecart. Recorre la secuencia real: cómo entra el código, cómo captura datos y cómo salen. Entiende esos tres movimientos y entiendes por qué un WAF, un SIEM y un procesador de pagos pueden estar en verde mientras corre un skimmer. cside monitoriza directamente esa capa de navegador, observa cada script mientras se ejecuta y marca el momento en que uno empieza a leer campos o llamar a un dominio que nunca tocó antes, que es la base para detectar Magecart en tiempo real en vez de después de la brecha.

El ataque en tres movimientos

Toda campaña de skimming, sin importar qué grupo la ejecute, se reduce al mismo ciclo. Quita el branding y quedan tres movimientos.

MovimientoQué pasaDónde vive
InyectarEl atacante consigue que su JavaScript cargue en tu páginaUn archivo propio comprometido, una etiqueta de terceros o un tag manager
CapturarEl script lee datos de tarjeta o credenciales del formularioEl DOM y los listeners de formulario en el navegador
ExfiltrarUna copia de los datos se envía al servidor del atacanteUna solicitud saliente del navegador a un dominio del atacante

El resto de este artículo recorre cada movimiento en orden, porque el orden es lo que hace invisible el ataque.

Movimiento 1: cómo llega el código a la página

El atacante necesita que su JavaScript se ejecute en el navegador del visitante. Tiene tres rutas comunes hacia la página, ninguna exige tocar la lógica de tu servidor de origen.

  1. Un archivo autoalojado. Obtiene acceso de escritura mediante un plugin vulnerable, un CMS desactualizado o un login admin robado, y añade unas líneas a un archivo JavaScript que ya sirves. El cambio es pequeño y suele esconderse dentro de código legítimo, así que un diff parece normal.
  2. Un script de terceros. Compromete un vendor cuyo script cargas directamente con <script src>, como una analítica, un chat o un widget de pruebas A/B. Ahora el skimmer sale desde el dominio del vendor a cada cliente que carga tu página, y nunca está en tu repositorio para encontrarlo, por lo que proteger los scripts de terceros es una disciplina propia.
  3. Un tag manager. Toma control de un contenedor de Google Tag Manager o similar y añade una etiqueta con el skimmer. Cada sitio y página que usa ese contenedor ejecuta el código, incluidas páginas de checkout donde esa etiqueta no debería cargar.

Las rutas de terceros y tag manager escalan, y por eso son las peligrosas. Un vendor comprometido siembra skimmers en cada sitio que confía en él, y un script que aprobaste puede traer otro script que nunca revisaste, el problema de cuarta parte. Esta forma de cadena de suministro es lo que el requisito 6.4.3 y 11.6.1 de PCI DSS 4.0.1 busca cubrir al exigir inventario y autorización de cada script en una página de pago. La brecha de Ticketmaster siguió exactamente este camino: el skimmer llegó al checkout por el script de chatbot de un proveedor comprometido, no por código propio de Ticketmaster.

Movimiento 2: cómo el skimmer lee tu formulario

Cuando el script corre, leer el formulario es desarrollo web normal usado contra ti. Leer y modificar el DOM es cómo funciona cualquier framework moderno, así que las acciones del skimmer parecen comportamiento normal de página. Un skimmer suele hacer una o varias de estas cosas:

  • Lee valores de input directamente. Selecciona campos de número de tarjeta, caducidad, CVV y nombre por sus atributos id, name o autocomplete, y lee .value directamente del DOM.
  • Adjunta event listeners. Engancha input, keyup, change o blur en los campos de pago, para capturar cada pulsación aunque el usuario nunca envíe el formulario.
  • Secuestra el camino de submit. Envuelve el handler de submit del formulario o engancha el botón "pagar", ensamblando el payload completo en el momento en que el usuario confirma.
  • Parchea primitivas de red. Skimmers avanzados sobrescriben fetch, XMLHttpRequest.prototype.send o navigator.sendBeacon para leer la solicitud de pago real cuando tu propio código la envía.
  • Superpone un campo falso. Algunos inyectan un iframe de pago falso sobre el real, de modo que el comprador escribe la tarjeta directamente en el input del atacante. El análisis propio de cside de una campaña Magecart encontró un frame de pago falso insertado en checkout mediante una sola línea JavaScript ofuscada, el tipo de intercambio que un escaneo del lado del servidor nunca ve.

El serving condicional es lo que lo mantiene silencioso

El skimmer no se dispara para todo el mundo. Se filtra para que quienes más probablemente lo pillen, esto es, equipos de seguridad, escáneres y bots, nunca vean el comportamiento malicioso:

  • Filtrado por ruta. Muchos skimmers se arman solo en URLs que coinciden con patrones de checkout o login, así que el código duerme en el resto.
  • Detección de automatización. Leer navigator.webdriver devuelve true en navegadores headless y automatizados, así que el skimmer puede servir código limpio a un escáner y el payload real a un comprador. Variantes más avanzadas buscan globales de Selenium o fugas Runtime de Chrome DevTools Protocol (CDP) para detectar navegadores instrumentados.
  • Disparo una vez por sesión. Exfiltrar una sola vez evita ruido de red duplicado que destacaría en un log.

Esa carrera también escala del lado atacante: el informe Future of Web Security 2026 de cside rastreó un aumento aproximado de 10x en playwright-stealth durante 2025, automatización construida para derrotar navigator.webdriver y comprobaciones parecidas. La misma evasión que oculta el tooling del atacante a defensores es la que oculta un skimmer a los tuyos. El código suele estar ofuscado además de todo eso, lo que entierra la intención en una revisión manual.

Movimiento 3: cómo salen los datos

La captura no sirve al atacante hasta que los datos le llegan. La exfiltración es una solicitud saliente desde el navegador, y el atacante tiene varias formas silenciosas de enviarla.

MétodoCómo se ve en la red
navigator.sendBeacon()Un POST pequeño que se dispara de forma fiable al salir, diseñado para analítica, así que se mezcla
fetch() / XMLHttpRequestUna solicitud asíncrona estándar, a menudo a un dominio parecido que imita un CDN o host de analítica
Solicitud de imagenEl payload se añade al src de un <img> como query string; el navegador "carga" una imagen que en realidad es un drop de datos
WebSocketUn canal persistente para transmitir pulsaciones capturadas casi en tiempo real

Tres propiedades hacen que esta fuga sea casi imposible de ver desde fuera. La solicitud usa HTTPS, así que está cifrada como el resto de tu tráfico. El destino suele ser un dominio typosquatted o recién registrado que parece un vendor real. El skimmer de British Airways exfiltró a baways.com, así que no salta en un log. Y el payload es pequeño y a menudo codificado en base64, por lo que parece un ping rutinario de telemetría. Lo crítico: esta solicitud va del navegador directo al atacante; nunca pasa por tu origen, tu WAF ni tu pasarela de pago. Esa es la razón por la que el robo es invisible para el servidor.

Por qué tu servidor, WAF y procesador nunca lo ven

Junta los tres movimientos y el punto ciego es obvio. El código cargó en el navegador, leyó el campo en el navegador y envió la copia desde el navegador a un tercer dominio. Tu backend solo vio la transacción legítima y autorizada.

  • Un WAF inspecciona solicitudes que llegan a tu origen. La solicitud de exfiltración nunca llega ahí, así que el WAF no tiene nada que inspeccionar.
  • Un SIEM agrega logs de servidor e infraestructura, y el skimmer no genera evento de servidor. La monitorización de fraude marca anomalías de compra, pero la compra real se completó exactamente como debía.
  • Un procesador de pagos como Stripe o Adyen protege la transacción que recibe. Si tus campos de tarjeta están en tu propia página, un skimmer los lee antes de que el procesador participe, y tu página sigue debiendo su propia evidencia PCI DSS 4.0.1 6.4.3 y 11.6.1 sin importar el procesador.

El ataque vive en un runtime que tu stack del lado del servidor no alcanza. Un problema client-side necesita una defensa client-side.

Cómo la monitorización de navegador captura cada movimiento

La detección debe sentarse donde corre el skimmer. cside monitoriza scripts y comportamiento en el navegador, así que cada movimiento deja una señal sobre la que puede actuar.

  • Inyectar aparece como un script nuevo o modificado. cside mantiene un inventario de scripts y marca altas, cambios y etiquetas de terceros manipuladas cuando aparecen, no semanas después en un informe de fraude.
  • Capturar aparece como comportamiento. Listeners inesperados en campos de pago, código leyendo inputs que no debería y overrides de fetch o sendBeacon son anomalías runtime contra una línea base conocida.
  • Exfiltrar aparece como destino. cside aflora solicitudes salientes a dominios que no están en tu allowlist, el movimiento característico de un skimmer intentando salir.

Como cside corre en navegadores reales en vez de un escáner de sala limpia, el serving condicional no oculta el skimmer como lo oculta de un crawler headless. Esa misma visibilidad produce la evidencia que espera PCI DSS 4.0.1: inventario autorizado de scripts de página de pago para 6.4.3 y alertas sobre cambios no autorizados en contenido de scripts y cabeceras para 11.6.1, ambos obligatorios desde 2025-03-31.

Lecturas adicionales en cside

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

Dentro de la pestaña del navegador del visitante, en el mismo contexto JavaScript que tu propio código de checkout. No está en tu servidor ni en un sandbox. Cuando un script carga en la página puede leer el DOM, adjuntar listeners a campos de formulario y abrir conexiones de red a cualquier dominio que permita la Content Security Policy de la página. Ese contexto compartido es la razón por la que una sola etiqueta de analítica o chat comprometida puede alcanzar campos de tarjeta que no debería tocar.

Se filtra a sí mismo. La mayoría revisa la URL y solo se arma en una ruta de checkout o login, luego inspecciona la sesión para evitar sandboxes. Una señal común es leer `navigator.webdriver`, que devuelve `true` en navegadores headless y automatizados; algunos también buscan artefactos de Selenium o CDP para que un escáner de seguridad vea código limpio mientras un comprador real recibe el skimmer. Muchos se disparan una sola vez por sesión para evitar exfiltración duplicada. El serving condicional explica por qué una revisión manual del source suele no encontrar nada.

A menudo semanas o meses, porque nada cambia en el stack normal de monitorización. El checkout sigue completándose, el pago sigue autorizándose y los pedidos se siguen cumpliendo. Los skimmers filtran su comportamiento y capturan sus propios errores en silencio, así que pruebas casuales rara vez los activan y una exfiltración fallida nunca rompe la página. La mayoría de víctimas se entera por una red de tarjetas o un reporte de cliente, no por sus propios sistemas.

Monitoriza y Asegura tus Scripts de Terceros

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

Comienza gratis, o prueba Business con una prueba de 14 días.

Interfaz del panel de cside mostrando monitorización de scripts y análisis de seguridad
Related Articles
Reservar una demo