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 12 min read
Ataques Magecart explicados: cómo funciona el web skimming en el navegador
Tabla de Contenidos

Resumen: cómo funcionan los ataques Magecart

  • Víctimas reales, grupos reales: Al menos siete grupos de atacantes inyectando JavaScript en páginas de pago. British Airways (380k registros), Ticketmaster, Newegg, Warner Music.
  • Corre tras el WAF: El ataque corre después de que tu WAF aprueba la página, en el mismo contexto de JavaScript que tu formulario de checkout.
  • Las reglas que lo cierran: 6.4.3 y 11.6.1 lo cierran. Obligatorios desde el 31 de marzo de 2025 para cualquiera que toque una página de pago.

¿Poco tiempo? Consulta el bloqueo de Magecart y skimmers en el navegador de cside. Cubre todo lo de abajo en un solo despliegue.

Un ataque Magecart: desde el compromiso hasta la exfiltración de la tarjeta

El ataque en tres movimientos

Toda campaña de skimming, sin importar qué grupo la ejecute, se reduce al mismo ciclo de vida. 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 eventos del 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 ese 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 habituales hacia la página, ninguna de las cuales 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 de administrador 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 a 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 en sí misma.
  3. Un tag manager. Toma control de un contenedor de Google Tag Manager o similar y añade una etiqueta que contiene el skimmer. Cada sitio y página que usa ese contenedor ejecuta ahora el código, incluidas páginas de checkout donde esa etiqueta no debería cargar.

Las rutas de terceros y de tag manager son las que 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 es la forma de cadena de suministro que el requisito 6.4.3 y el 11.6.1 de PCI DSS 4.0.1 buscan cubrir al exigir un inventario y la autorización de cada script en una página de pago. La brecha de Ticketmaster de 2018 siguió exactamente este camino: el skimmer llegó al checkout a través del script de chatbot de un proveedor comprometido, no por código propio de Ticketmaster (resumen de Wikipedia del incidente de 2018).

Movimiento 2: cómo el skimmer lee tu formulario

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

Incidentes destacados de Magecart / web-skimming

  • Lee los valores de los campos directamente. Selecciona los 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 llegue a enviar el formulario.
  • Secuestra el camino de envío. Envuelve el handler de submit del formulario o engancha el botón de "pagar", ensamblando el payload completo en el momento en que el usuario confirma.
  • Parchea primitivas de red. Los skimmers avanzados sobrescriben fetch, XMLHttpRequest.prototype.send o navigator.sendBeacon para leer la solicitud de pago real en el momento en que tu propio código la envía.
  • Superpone un campo falso. Algunos inyectan un iframe de pago falso encima del real, de modo que el comprador escribe los datos de la tarjeta directamente en el input del atacante. El propio análisis de cside de una campaña Magecart encontró un frame de pago falso insertado en el checkout mediante una sola línea de JavaScript ofuscado, el tipo de sustitución que un escaneo del lado del servidor nunca detecta.

La entrega condicional es lo que lo mantiene en silencio

El skimmer no se dispara para todo el mundo. Se filtra a sí mismo para que las personas con más probabilidades de detectarlo, es decir, equipos de seguridad, escáneres y bots, nunca vean el comportamiento malicioso:

  • Filtrado por ruta. Muchos skimmers solo se arman en URLs que coinciden con un patrón de checkout o login, así que el código permanece inactivo 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. Las variantes más avanzadas buscan globales de Selenium o fugas de Runtime del Chrome DevTools Protocol (CDP) para detectar navegadores instrumentados.
  • Disparo una vez por sesión. Exfiltrar una sola vez evita el ruido de red duplicado que podría destacar en un log.

Esa carrera armamentista también escala del lado del atacante: el informe de investigación Future of Web Security 2026 de cside registró un crecimiento de playwright-stealth de aproximadamente diez veces a lo largo de 2025, automatización creada para vencer navigator.webdriver y comprobaciones similares. La misma evasión que oculta las herramientas de un atacante a los defensores es la que oculta un skimmer de las tuyas. Encima de todo esto, el código suele estar ofuscado, lo que entierra la intención durante una revisión manual.

Movimiento 3: cómo salen los datos

La captura no le sirve de nada al atacante hasta que los datos le llegan. La exfiltración es una única 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 de la página, diseñado para analítica, así que se mezcla con el resto
fetch() / XMLHttpRequestUna solicitud asíncrona estándar, a menudo hacia un dominio parecido que imita un CDN o un 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 envío de datos
WebSocketUn canal persistente para transmitir las pulsaciones capturadas casi en tiempo real

Tres propiedades hacen que esta fuga sea casi imposible de detectar 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ó hacia baways.com, así que no salta a la vista en un log. Y el payload es pequeño y a menudo está codificado en base64, por lo que parece un ping rutinario de telemetría. Lo crítico es que 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, tu WAF y tu procesador nunca lo ven

Junta los tres movimientos y el punto ciego resulta 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 llegó a ver la transacción legítima y autorizada.

  • Un firewall de aplicaciones web (WAF) inspecciona las 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 ningún evento de servidor. La monitorización de fraude marca anomalías de compra, pero la compra real se completó exactamente como se esperaba.
  • Un procesador de pagos como Stripe o Adyen protege la transacción que recibe. Si los campos de tarjeta están en tu propia página, un skimmer los lee antes de que el procesador entre en juego, y tu página sigue debiendo su propia evidencia de PCI DSS 4.0.1 6.4.3 y 11.6.1 al margen del procesador.

El ataque vive en un runtime al que tu stack del lado del servidor no puede llegar. Un problema del lado del cliente necesita una defensa del lado del cliente.

Cómo la monitorización en el navegador detecta cada movimiento

La detección tiene que situarse 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 en cuanto aparecen, no semanas después en un informe de fraude.
  • Capturar aparece como comportamiento. Listeners inesperados en campos de pago, código que lee inputs que no debería y overrides de fetch o sendBeacon son anomalías de runtime frente a una línea base conocida como buena.
  • Exfiltrar aparece como un destino. cside pone de manifiesto las solicitudes salientes hacia dominios que no están en tu allowlist, el movimiento característico de un skimmer que intenta salir.

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

Más lecturas en cside

Incidentes Magecart identificados (2018 a 2024)

El ecosistema Magecart es una federación laxa de al menos siete grupos distintos (numerados del Group 1 al Group 12 por RiskIQ) que usan TTPs compartidos. Las divulgaciones públicas siguientes son los casos de referencia que clientes y QSAs citan al definir el alcance de los controles de PCI DSS 4.0.1 §6.4.3 y §11.6.1.

  • British Airways (2018). Alrededor de 380.000 registros de tarjetas de pago exfiltrados durante 15 días desde un script comprometido servido en las páginas de checkout y de la app móvil. La multa del ICO del Reino Unido se redujo de £183M a £20M.
  • Ticketmaster UK (2018). Datos de tarjeta de ~40.000 clientes expuestos después de que el script de soporte al cliente de Inbenta, servido desde un CDN de terceros, fuera modificado para skimear la página de pago. Multa del ICO de £1,25M.
  • Newegg (2018). 15 líneas de JavaScript inyectado capturaron todos los datos de tarjeta enviados a checkout/payment.aspx durante 35 días. Atribuido a Magecart Group 4 por RiskIQ.
  • Warner Music Group (2020). Varios sitios de e-commerce operados por WMG en EE.UU. y Reino Unido comprometidos durante tres meses, apuntando a los datos de checkout en la plataforma Volusion.
  • Segway (2022). Los atacantes usaron una extensión maliciosa de Magento para skimear formularios de pago, divulgado por Malwarebytes.
  • Kaiser Permanente (2024). 13,4 millones de miembros notificados después de que scripts de analítica y rastreo de terceros en páginas orientadas a los miembros expusieran información sensible, adyacente a la misma clase de TTP de Magecart.
  • Cadena de suministro de Polyfill.io (2024). Tras un cambio de propiedad, cdn.polyfill.io empezó a servir código malicioso a más de 100.000 sitios que incrustaban la librería, divulgado por Sansec. Fastly, Cloudflare y Google intervinieron a nivel de red.
  • Adobe Commerce / Magento Cosmicsting (CVE-2024-34102). Fallo de deserialización XML del lado del servidor usado para plantar skimmers del lado del cliente en cientos de comerciantes Magento durante 2024 y hasta 2025.

Todos los casos anteriores eludieron las defensas del lado del servidor del comerciante y manipularon código que ejecutaba el navegador. Esa es exactamente la brecha que PCI DSS 6.4.3 (autorización e integridad de scripts) y 11.6.1 (detección de cambios en la página de pago) se escribieron para cerrar.

Detectando un skimmer estilo Magecart en cside

Lecturas 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

Dentro de la pestaña del navegador del visitante, en el mismo contexto de 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 del 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 de los skimmers 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. La entrega condicional es la razón por la que una revisión manual del código fuente de la página 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 condicionan su comportamiento y capturan sus propios errores en silencio, así que las pruebas casuales rara vez los activan y una exfiltración fallida nunca rompe la página. La mayoría de las víctimas se entera de la brecha por una red de tarjetas o un reporte de cliente, no por sus propios sistemas.

Monitoriza y protege tus scripts de terceros

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

Empieza gratis o prueba Business con una versión de prueba de 14 días.

Interfaz del panel de cside que muestra la monitorización de scripts y el análisis de seguridad
Related Articles
Reservar una demo

¿Quieres verlo en detalle con un ingeniero?

Treinta minutos, sobre tu propio sitio. Nada de diapositivas.

Te enseñaremos:

Qué scripts de terceros se están ejecutando ahora mismo en tu sitio
En qué punto estás con los requisitos 6.4.3 y 11.6.1 de PCI DSS
Qué parte de tu tráfico son bots y agentes de IA

¿Prefieres mandarnos una pregunta?

Buscando huecos libres…

Solo humanos de verdad. Nos daríamos cuenta.

¿Problemas para reservar? Abrir el calendario en una pestaña nueva

¿Qué quieres resolver?

Cuéntanoslo en una línea y te responderemos con algo útil, no con un discurso genérico.

Solemos ayudar con:

Ver qué scripts de terceros se ejecutan en tu sitio
Evidencias para PCI DSS 6.4.3 y 11.6.1
Bots, agentes de IA y robo de cuentas

¿Prefieres reservar una hora? Elegir un hueco