Skip to main content
Blog
Blog Attacks

¿Qué es el formjacking? Cómo funciona el ataque y cómo detenerlo

El formjacking es un ataque client-side que inyecta JavaScript para capturar datos de pago e inicio de sesión mientras el usuario escribe. Aprende cómo funciona el ataque, por qué las herramientas tradicionales no lo detectan y cómo identificarlo.

Jul 18, 2026 11 min read
¿Qué es el formjacking? Cómo funciona el ataque y cómo detenerlo

Resumen: qué es el formjacking

  • JavaScript inyectado en un formulario para robar lo que los usuarios escriben antes del submit. Campos de tarjeta, credenciales o PII.
  • Corre en el navegador después de que la página se sirve. Tu WAF y logs de origen no ven nada. El script comprometido está dentro de un dominio permitido de confianza.
  • Ruta de cumplimiento: inventario de scripts 6.4.3 y detección de manipulación 11.6.1. Ruta técnica: monitoreo en sesión.

Formjacking — the skimmer's older cousin

Cómo funciona el formjacking

Un ataque de formjacking sigue cuatro pasos.

Diagrama de flujo que muestra un script de formjacking inyectado a través de un script de terceros comprometido, enganchándose a los campos del formulario de checkout, copiando datos de tarjeta y exfiltrándolos a un endpoint del atacante mientras el pago legítimo se completa

El diagrama sigue una compra (shop.example[.]com/checkout) a través de cinco etapas, y muestra por qué una vista a nivel de red queda ciega mientras una vista a nivel de navegador lo detecta:

EtapaQué ocurre en el navegadorQué ve el servidor / la CSP
1. Página de checkoutEl comprador escribe el número de tarjeta + CVV en el formulario realCarga de página normal
2. Script de proveedor manipuladowidget.js (modified) se carga como cualquier otra etiqueta de tercerosUna URL de script permitida y ya de confianza
3. Skimmer del formularioEl listener inyectado se engancha a cada campo de entrada y lee las pulsaciones en tiempo realNada, ninguna petición al servidor
4. Endpoint de exfiltraciónCopia codificada enviada a cdn-metrics[.]example mediante POST /collect?d=eyJjYyI6…, disfrazada de baliza de analíticaParece tráfico de analítica corriente
5. AtacanteLas tarjetas robadas se revenden o se usan para fraude con tarjetas; el pago real igual se completaSin anomalía, la transacción tiene éxito

La capa de red queda ciega porque la petición de exfiltración sale del navegador directamente al dominio del atacante. cside observa la capa del navegador, de modo que el listener inyectado y la baliza saliente se detectan donde realmente se ejecutan.

1. Introducir código en la página. El atacante coloca JavaScript en la página objetivo, casi siempre sin que el propietario del sitio lo sepa. La ruta más habitual es comprometer un script de terceros -una etiqueta de analítica, un widget de chat, una herramienta de A/B testing o una biblioteca de pagos- de modo que el skimmer llega empaquetado dentro del código en el que el sitio ya confía y que carga en cada compra.

2. Engancharse a los campos del formulario. Una vez que el script se carga, adjunta listeners de eventos al formulario de pago o de inicio de sesión. Un listener sobre el evento input se activa en cada pulsación de tecla; uno sobre el evento submit se activa cuando el usuario hace clic en pagar. El script también puede leer directamente los valores del DOM una vez que los campos están rellenos.

3. Copiar los datos. El listener captura los valores de los campos -número de tarjeta, caducidad, CVV, dirección de facturación- exactamente tal como los ha introducido el usuario. El propio formulario no se modifica. La transacción del usuario sigue procesándose a través del procesador de pagos legítimo.

4. Exfiltrar. Los datos robados se codifican y se envían a un dominio controlado por el atacante, a menudo camuflados como un ping de analítica o una solicitud de imagen para que se confundan con el tráfico saliente normal de la página. La mayoría de las cabeceras de Content Security Policy no bloquean esto porque el atacante utiliza un dominio que la política ya permite o aprovecha un hueco existente.

Cómo consiguen los atacantes introducir código de formjacking en tu sitio

El formjacking no requiere una brecha directa en tus servidores. Las tres rutas de entrega más habituales:

Where formjacking hits

Compromiso de scripts de terceros. La mayoría de las páginas de pago y comercio electrónico cargan entre 20 y 60 scripts de terceros: plataformas de analítica, herramientas de chat, gestores de etiquetas, bibliotecas de pagos, widgets de proveedores de marketing. Cualquiera de esos proveedores es una superficie de ataque. Si el atacante compromete el CDN o la infraestructura del proveedor, todos los sitios que cargan ese script reciben el skimmer. La brecha de British Airways en 2018 puso en riesgo los datos personales de 429.612 clientes tras la modificación del JavaScript en el flujo de pago de la aerolínea. Los investigadores vincularon el ataque a actores de amenaza de Magecart que utilizaron un script de proveedor externo comprometido, no una brecha directa en los propios servidores de British Airways. (Wikipedia: Violación de datos de British Airways)

Dominios caducados o secuestrados. Los sitios a veces cargan scripts desde dominios de terceros que ya han caducado o cambiado de propietario. Un atacante que registra ese dominio puede entonces servir cualquier JavaScript que desee a todos los sitios que siguen cargando la etiqueta de script antigua. Como la URL no ha cambiado y el dominio servía previamente código legítimo, ninguna comprobación automática lo señala de inmediato.

Inyección directa de código. Si el atacante explota una vulnerabilidad en el CMS, el panel de administración o un plugin del sitio, puede inyectar el script de formjacking directamente en los propios archivos del sitio. Esta vía requiere mayor acceso pero no deja ninguna dependencia externa que rastrear.

Qué tiene en el punto de mira el formjacking

Los atacantes priorizan las páginas que recopilan datos de alto valor con poca fricción:

Tipo de páginaDatos capturados habitualmente
Pago en comercio electrónicoNúmero de tarjeta, caducidad, CVV, dirección de facturación
Registro de cuentaCorreo electrónico, contraseña, nombre, dirección postal
Páginas de inicio de sesiónNombre de usuario y contraseña
Formularios sanitariosNúmero de seguro, fecha de nacimiento, información médica
Solicitudes de cuentas financierasNIF/NIE, ingresos, datos de cuenta bancaria

Las páginas de pago son el objetivo principal porque los datos de tarjetas tienen un mercado de reventa inmediato. Las credenciales de inicio de sesión son la segunda prioridad porque permiten la toma de control de cuentas en plataformas con métodos de pago almacenados.

Por qué las herramientas de seguridad tradicionales no detectan el formjacking

Los firewalls de aplicaciones web protegen el tráfico que llega a tu servidor. Los datos del formjacking salen del navegador directamente a un dominio del atacante: el WAF nunca los ve.

Los escáneres del lado del servidor inspeccionan el código en reposo en tu origen. Un script de terceros comprometido se carga desde el CDN de un proveedor en tiempo de ejecución, por lo que nunca está en tu servidor para ser analizado.

Las revisiones manuales periódicas comprueban los scripts listados en tu gestor de etiquetas o repositorio de código. Un skimmer inyectado en un script de terceros entre ciclos de revisión es invisible hasta que alguien realice la siguiente auditoría, a menudo semanas después.

La Integridad de Subrecursos (SRI) protege los scripts que se procesan con hash en el momento del despliegue. No puede proteger los scripts cargados desde CDNs controlados por proveedores donde el atacante tiene acceso de escritura, ni los scripts generados dinámicamente por solicitud.

Los requisitos 6.4.3 y 11.6.1 de PCI DSS 4.0.1 existen porque el sector reconoció esta brecha. El inventario de scripts y la monitorización continua de manipulaciones en páginas de pago se convirtieron en obligatorios el 1 de abril de 2025. (PCI Security Standards Council)

Los skimmers también eluden activamente los escáneres. La mayoría comprueban navigator.webdriver -que devuelve true en navegadores headless automatizados- y sirven código limpio a las herramientas de seguridad mientras ejecutan el skimmer completo para los usuarios reales.

Cómo detectar el formjacking

Detectar el formjacking requiere visibilidad sobre lo que JavaScript hace en tiempo de ejecución en los navegadores de los visitantes reales. Las señales específicas a monitorizar:

  • Scripts nuevos o modificados en páginas sensibles. Un script que no estaba presente el día anterior, o cuyo contenido cambió fuera de una ventana de despliegue programada, es el primer indicador.
  • Listeners de eventos inesperados en campos de formulario. El código legítimo adjunta listeners submit para procesar formularios. Un listener en los eventos input, keydown o keyup sobre campos de pago o credenciales, añadido por un script de terceros, es una señal característica del formjacking.
  • Datos salientes hacia dominios no listados. Cualquier solicitud de red desde una página de pago hacia un dominio que no figure en tu lista permitida aprobada requiere investigación inmediata.
  • Cargas codificadas en solicitudes salientes. Los atacantes de formjacking codifican los datos robados -a menudo en base64- antes de enviarlos. Un beacon que contiene un parámetro codificado inusualmente largo que no se corresponde con ningún evento de analítica conocido es una señal de alerta.

La restricción clave es que solo la monitorización dentro del navegador puede ver estas señales de forma real. Los escáneres que operan desde el exterior no detectan el formjacking que se oculta de los usuarios reales.

Cómo prevenir el formjacking

Ningún control único elimina todas las vías de formjacking. Combinar varios controles reduce significativamente la superficie de ataque:

  1. Inventariar todos los scripts en páginas sensibles. Conocer cada script propio y de terceros que se carga en las páginas de pago e inicio de sesión, quién lo autorizó y por qué está ahí. Los scripts no reconocidos no deben cargarse.

  2. Monitorizar los cambios de forma continua. Un script que cambia entre ciclos de auditoría es una brecha no detectada. La monitorización continua de manipulaciones -obligatoria bajo el requisito 11.6.1 de PCI DSS 4.0.1- detecta los cambios en minutos en lugar de semanas.

  3. Aplicar SRI donde sea práctico. Para los scripts que controlas completamente y versionas tú mismo, los hashes SRI verifican que el script no ha cambiado desde el despliegue. SRI no funciona para scripts de terceros que se actualizan con frecuencia o que se generan dinámicamente por solicitud.

  4. Configurar la Content Security Policy de forma restrictiva. Una CSP estricta limita a qué dominios pueden enviar datos los scripts, reduciendo los destinos de exfiltración de un skimmer. En la práctica, las páginas de pago suelen necesitar permitir muchos dominios para la analítica legítima y la funcionalidad de pago, lo que dificulta un bloqueo completo.

  5. Desplegar monitorización client-side de visitantes reales. La defensa más directa es la monitorización que observa lo que hace cada script en navegadores reales, no un escáner que ejecuta solicitudes sintéticas desde el exterior. Este es el enfoque de cside.

Cómo detecta cside el formjacking en navegadores reales

cside se despliega como un único snippet de JavaScript propio que monitoriza el comportamiento de los scripts en los navegadores de visitantes reales, no un rastreador o escáner que opera desde el exterior.

Para el formjacking, cside detecta:

  • Listeners de eventos adjuntados a campos de formulario por scripts de terceros, con especial atención a los listeners que se activan en pulsaciones de teclas en lugar de en el envío del formulario
  • Solicitudes de datos salientes hacia dominios que no figuran en la lista permitida aprobada del sitio
  • Scripts nuevos que aparecen en páginas de pago o inicio de sesión fuera de una ventana de despliegue
  • Cambios en scripts existentes, incluidas modificaciones en tiempo de ejecución en la salida cargada de una etiqueta de proveedor

Como cside opera en la capa del navegador junto al ataque, detecta el skimmer cuando se produce, antes de que los datos hayan sido ya exfiltrados. Para las organizaciones sujetas a PCI DSS 4.0.1, PCI Shield mapea esta monitorización a los requisitos 6.4.3 (inventario y autorización de scripts) y 11.6.1 (detección de manipulaciones), generando informes listos para el QSA de forma continua.

Para el contexto sobre cómo el formjacking se relaciona con el ecosistema más amplio del skimming digital y los grupos de amenaza Magecart, consulta la guía complementaria: Formjacking vs Magecart vs digital skimming.

Reserva una demo para ver lo que cside encuentra ejecutándose en tus páginas de pago, o lee más sobre la prevención del e-skimming.

Formjacking flagged in a live session

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

El formjacking es un ataque client-side en el que JavaScript malicioso intercepta los datos introducidos en formularios web -campos de tarjeta de pago, credenciales de inicio de sesión, información personal- y envía una copia a un servidor controlado por el atacante antes de que el formulario se envíe o en el momento del envío. El formulario legítimo sigue funcionando con normalidad, de modo que ni el propietario del sitio ni el usuario saben que los datos han sido robados.

Las tres rutas más habituales son: (1) comprometer un script de terceros que carga el sitio -una etiqueta de analítica, un widget de chat, una herramienta de A/B testing o una biblioteca de pagos- para que el skimmer se aproveche del código de confianza; (2) explotar una vulnerabilidad en el propio CMS o código del sitio para inyectar el script directamente; y (3) secuestrar un dominio caducado o abandonado que sigue sirviendo un script en el que confía el sitio objetivo. Como el skimmer llega a través de un canal de confianza, elude las comprobaciones de integridad que el propietario del sitio nunca pensó aplicar a un proveedor en el que se apoya.

El objetivo principal son los datos de tarjetas de pago en las páginas de pago: número de tarjeta, fecha de caducidad y CVV. Los atacantes de formjacking también recopilan credenciales de inicio de sesión en formularios de acceso, información personal identificable introducida durante la creación de cuentas y datos de salud o financieros recogidos en formularios especializados. Cualquier formulario que gestione información sensible es un objetivo viable.

Un firewall de aplicaciones web se sitúa entre internet y tu servidor, inspeccionando las solicitudes entrantes a tu origen. El formjacking se ejecuta completamente en el navegador del visitante, después de que el servidor ya ha entregado la página. El script malicioso lee los datos del formulario y los envía directamente a un dominio del atacante -una conexión saliente separada que nunca pasa por el WAF-. Los controles del lado del servidor no tienen visibilidad sobre lo que JavaScript hace en tiempo de ejecución en el navegador.

La mayoría de los ataques de formjacking pasan desapercibidos durante semanas o meses. La transacción se completa con normalidad, no aparecen errores visibles y los registros del servidor no muestran nada inusual. Los atacantes diseñan los skimmers para controlar su propia ejecución: funcionan únicamente en las rutas de pago, se ocultan de los escáneres automatizados comprobando señales de navegadores headless y exfiltran datos en solicitudes que parecen beacons de analítica habituales. Las víctimas suelen descubrir la brecha a través de una alerta de fraude de la red de tarjetas, la revelación de un investigador de seguridad o la reclamación de un cliente.

Sí. Los requisitos 6.4.3 y 11.6.1 de PCI DSS 4.0.1, que se volvieron obligatorios el 1 de abril de 2025, se introdujeron específicamente para abordar los ataques de skimming client-side, incluido el formjacking. El requisito 6.4.3 exige un inventario y autorización de todos los scripts en las páginas de pago; el 11.6.1 requiere monitorización continua y alertas sobre cambios no autorizados en los scripts de las páginas de pago y en las cabeceras HTTP. Juntos impulsan a las organizaciones hacia una monitorización client-side continua en lugar de revisiones periódicas.

cside se despliega como un único snippet de JavaScript propio que monitoriza todos los scripts que se ejecutan en los navegadores de los visitantes reales en las páginas de pago e inicio de sesión. Detecta el formjacking rastreando listeners de eventos inesperados adjuntados a campos de formulario, monitorizando los datos enviados a dominios fuera de tu lista permitida, alertando sobre scripts nuevos o modificados e identificando patrones de comportamiento -como un script que lee los valores de los campos en cada pulsación de tecla en lugar de al enviar- que son señales características de un skimmer. Como se ejecuta en el navegador junto al ataque, lo detecta cuando se produce.

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