Skip to main content
Blog
Blog security

Como se ve CTEM en la capa del navegador: un script de tercero, cinco hallazgos

Un analisis en vivo de un widget de Skeepers en un gran banco internacional encontro una cookie de 360 dias en subdominios de autenticacion, una brecha de CSP y un sub-script controlado por servidor. Asi se ve CTEM aplicado a la capa del navegador.

Apr 27, 2026 15 min read
Mike Kutlu
Mike Kutlu Author
Como se ve CTEM en la capa del navegador: un script de tercero, cinco hallazgos

Como se ve CTEM en la capa del navegador: un script de tercero, cinco hallazgos

Respuesta rapida: Continuous Threat Exposure Management (CTEM), el marco definido por Gartner para reducir exposicion de forma continua, se rompe en la capa del navegador en la mayoria de los programas empresariales. El analisis en vivo de c/side sobre un unico widget de feedback de Skeepers en un gran banco minorista internacional encontro dos hallazgos altos y tres medios, incluido un sub-script controlado por servidor que faltaba en la Content Security Policy y una cookie de rastreo de 360 dias con alcance al subdominio de autenticacion del banco, aunque no habia coincidencias previas en bases de amenazas. Este articulo mapea cada hallazgo a las cinco etapas de CTEM y muestra por que las clausulas PCI DSS 4.0.1 6.4.3 y 11.6.1 exigen mas que un inventario de scripts.

Un gran banco minorista internacional carga un widget de feedback de clientes en su sitio principal. El widget configura una cookie de rastreo de 360 dias con alcance a todo el dominio del banco, incluido el subdominio de autenticacion. Tambien inyecta dinamicamente un sub-script cuyo nombre de archivo decide el servidor del proveedor en tiempo de ejecucion, y ese sub-script no esta en la propia Content Security Policy del banco. Las paginas de login no tienen CSP.

Nada de eso es hipotetico. Es lo que c/side encontro en un analisis profundo de un script de Skeepers / MyFeelBack ejecutandose en una propiedad bancaria real.

Este articulo usa ese desglose real, anonimizado y con nombres de proveedores conservados, para mostrar como se ve Continuous Threat Exposure Management (CTEM) cuando se aplica de verdad a la capa del navegador y donde la mayoria de los programas dejan abierto el ciclo.

TL;DR

  • CTEM, el marco de Gartner para tratar la exposicion como un ciclo continuo, tiene cinco etapas: alcance, descubrimiento, priorizacion, validacion y movilizacion. La mayoria de los programas cubre las dos primeras y se detiene en el navegador.
  • Un analisis en vivo de un unico widget de Skeepers en un banco internacional encontro dos hallazgos HIGH y tres MEDIUM, incluido un sub-script controlado por servidor que no estaba en el allowlist de CSP.
  • Las paginas de autenticacion del banco no tenian cabecera CSP, en aparente conflicto con la clausula PCI DSS 4.0.1 6.4.3.
  • Una cookie de rastreo de 360 dias tenia alcance a todo el dominio bancario y viajaba con los flujos de login.
  • La cadena mediana de inclusiones de terceros en la web moderna tiene tres niveles de profundidad, con una profundidad maxima observada de 2.285 (Web Almanac 2025).
  • La actividad de Magecart y skimmers comprometio mas de 23 millones de transacciones online en 2025 (Recorded Future via Mastercard).
  • Visibilidad sin enforcement es documentacion, no proteccion.

Que es CTEM y donde suele romperse?

CTEM es el marco de Gartner para tratar la exposicion como un ciclo continuo en cinco etapas: alcance, descubrimiento, priorizacion, validacion y movilizacion. La idea del ciclo es que la exposicion cambia constantemente, por lo que la respuesta tambien debe ser continua.

La mayoria de los programas de seguridad ha avanzado mucho en las tres primeras etapas para activos tradicionales. Las configuraciones cloud se escanean. La dispersion de identidades se mapea. Las vulnerabilidades se puntuan.

Despues el ciclo se rompe en validacion y movilizacion para cualquier cosa que se ejecute en el navegador.

CTEM del navegador frente a CTEM cloud

Etapa CTEMCloud e identidadCapa del navegador
AlcanceMaduroA menudo omitido
DescubrimientoHerramientas solidasParcial, sobre todo via tag managers
PriorizacionCon puntuacion de riesgoRara vez puntuada
ValidacionPentests, BASCasi nunca probada
MovilizacionParchear, aislar, revocarEnviar un email al equipo de marketing

La exposicion del navegador no se moviliza porque normalmente el equipo de seguridad no puede movilizarla. Puede ver un script. Puede abrir un ticket. No puede impedir que el script se ejecute en la siguiente carga de pagina.

Esa es la brecha. El recorrido siguiente muestra como se ve esa brecha en produccion.

Caso de estudio: un script, cinco hallazgos relevantes para CTEM

El script en cuestion es el loader principal del widget de feedback de clientes de Skeepers, antes MyFeelBack. Esta alojado en cdnactor.myfeelback.com y se carga en paginas generales del sitio principal de un banco minorista internacional.

No es malicioso. No hubo coincidencias YARA, ni entradas en bases de amenazas, ni alertas de analisis estatico. Ese es el punto. La mayoria de la exposicion del navegador no viene de actores evidentemente malos. Viene de terceros aprobados y contratados cuyo comportamiento nadie gobierna activamente.

Hallazgo 1: el allowlist de CSP esta incompleto

Las paginas generales del banco envian una Content Security Policy que permite *.myfeelback.com. Hasta ahi, normal.

Pero el loader de Skeepers inyecta un sub-script en runtime desde room.cxr.skeepers.io, hojas de estilo desde actor.cxr.skeepers.io y una llamada GeoIP a un endpoint AWS Lambda en c7hn3ry3r4.execute-api.us-east-1.amazonaws.com. Ninguno de esos dominios esta en el CSP. Por lo tanto, el widget esta parcialmente roto en produccion o el CSP se esta evitando de formas que el equipo de seguridad no autorizo.

Este es el tipo de desajuste que una revision unica de proveedor nunca captura. El script envia una URL *.myfeelback.com el primer dia. Seis meses despues, tras un rebrand corporativo, el comportamiento en runtime carga desde *.cxr.skeepers.io. Un descubrimiento con nivel CTEM debe seguir las llamadas reales en runtime, no el contrato.

Hallazgo 2: un sub-script controlado por servidor con hash movil

El loader construye una URL en runtime con esta forma:

https://room.cxr.skeepers.io/lib/frontend/handy/js/libraries/{themeDeployment}-libraries.js

La parte {themeDeployment} la decide el servidor del proveedor. El hash del loader permanece estable. El hash de lo que descarga cambia cuando Skeepers quiere. Una revision estatica del loader pasara el lunes y perdera un cambio de sub-script el martes.

Este es el patron clasico de supply chain en el navegador. Polyfill.io funciono igual en 2024: un script primario limpio, un payload mutable de segunda etapa y ningun control de integridad desde la pagina host. Cuando la segunda etapa cambia, cada visitante de cada sitio que carga el script primario se convierte en objetivo.

En este contexto, la validacion CTEM significa fingerprinting continuo del codigo inyectado en runtime, no solo del loader.

Hallazgo 3: una cookie de rastreo de 360 dias con alcance al dominio apex

El widget configura una cookie llamada _MFB_ con estas propiedades:

  • Dominio: todo el apex del banco, incluido el subdominio de autenticacion
  • Expiracion: 360 dias
  • Contenido: un blob codificado en Base64 con un ID aleatorio persistente de visitante de 11 caracteres, contadores de visitas de campana y deployment, historial de paginas vistas, contadores de clics, TTL de sesion y selectores CSS

En paralelo, el widget escribe 15 claves en localStorage y las sincroniza de vuelta a la cookie en cada carga de pagina.

De esto se derivan varias cosas:

  1. El alcance a nivel apex significa que la cookie viaja con solicitudes al subdominio de autenticacion, aunque el widget no se cargue alli.
  2. Un identificador seudonimo de 360 dias en una propiedad bancaria necesita consentimiento explicito bajo GDPR / CNIL y una justificacion documentada de retencion. Es una pregunta de Record of Processing Activities (ROPA), no solo de seguridad.
  3. La sincronizacion entre cookie y localStorage significa que borrar cookies de forma estandar no reinicia el ID de visitante.

Esta es exactamente la exposicion de privacidad de cola larga que los marcos CTEM deberian sacar a la luz durante la priorizacion.

Hallazgo 4: no hay CSP en las paginas de autenticacion

Este es el hallazgo mas serio. El flujo de login del banco no envia cabecera Content Security Policy.

El script de Skeepers no se carga alli. Pero ese no es el punto. El punto es que cualquier script futuro, como una etiqueta de marketing, una herramienta de A/B testing o un proveedor comprometido, se ejecutaria en el flujo de login sin restriccion y con acceso completo al DOM de los campos de credenciales.

La clausula PCI DSS 4.0.1 6.4.3 exige un mecanismo para confirmar y autorizar scripts en paginas de pago. La clausula 11.6.1 exige un mecanismo de deteccion de manipulacion en esas paginas. Ninguna queda satisfecha por la ausencia total de cabecera.

La infraestructura existe. Ya hay un endpoint de reporting CSP para el sitio general. Simplemente no se extendio a las paginas mas sensibles de la propiedad.

Hallazgo 5: la encuesta se renderiza dentro del DOM host

Cuando se dispara una encuesta, el widget inyecta #mfbIframeOverlay y #mfbIframeBlock directamente en document.body. Eso suena inocuo, y lo es para la encuesta en si. Pero significa que el sub-script cargado dinamicamente, el que tiene hash movil, se ejecuta en el mismo origen que la pagina del banco. Mismo acceso al DOM, mismos formularios, mismas cookies.

Se adjunta un listener de keydown por accesibilidad para atrapar el foco con Tab. Hoy no exfiltra nada. Pero el listener esta en el contenedor superior de la encuesta, y el codigo que lo controla puede cambiar cada vez que el proveedor publica un nuevo theme deployment. La priorizacion CTEM deberia marcar esto como una dependencia de confianza en el proceso de releases del proveedor.

Que requirio el analisis y que encontro

Como contexto sobre el esfuerzo de descubrimiento y validacion CTEM:

MetricaValor
Scripts analizados2 (loader primario + sub-script)
Herramientas llamadas20+ en script, infra, amenazas y comportamiento
Tiempo total de ejecucion281,9 segundos
Hallazgos de riesgo8 (2 HIGH, 3 MEDIUM, 3 INFO)
Coincidencias en bases de amenazas0
Coincidencias YARA0

Cero indicadores de amenaza existentes. Dos hallazgos HIGH. Esa es la asimetria que CTEM fue disenado para capturar: la exposicion mas comun del navegador no es un script conocido como malo. Es un script aprobado que hace cosas que nunca fueron autorizadas explicitamente.

Por que crawlers y escaneres tradicionales no encuentran esto

Una pregunta razonable es por que ninguna herramienta existente del banco mostro estos hallazgos. La respuesta es que casi nada en el stack de seguridad estandar ejecuta la pagina como lo hace un usuario real.

Piensa en lo que ve un escaner tipico:

  • Escaneres de aplicaciones web (DAST) rastrean URLs e inspeccionan respuestas. No cargan la pagina en un navegador real, no ejecutan JavaScript ni esperan a que scripts inyectados en runtime descarguen payloads de segunda etapa. El loader de Skeepers devuelve 200 OK con JS valido. Fin.
  • Crawlers de busqueda y SEO renderizan con un navegador headless, pero no puntuan scripts de terceros por comportamiento de seguridad. Les importa el contenido, no las cookies.
  • Analisis estatico (SAST) y SCA miran codigo en tu repositorio. El script de Skeepers no esta en tu repositorio. Se carga desde el CDN de otra empresa en runtime.
  • CSP en modo report-only puede detectar violaciones, pero solo para los dominios que ya sabes que debes permitir. No puede avisarte sobre sub-scripts inyectados en runtime cuyas URLs decide el servidor despues de cargar la pagina.
  • Escaneres de vulnerabilidades comparan CVEs contra inventarios de software. No existe un CVE para "el widget de marketing de tu proveedor configura una cookie de 360 dias en tu subdominio de autenticacion".
  • Pentests son puntuales. El hash del loader de Skeepers no tenia historial de observacion en la ventana de 90 dias. El hash del sub-script cambia cuando el proveedor publica un nuevo tema. Un pentest en marzo no te dice que se carga en octubre.

El sitio del banco tiene infraestructura CSP, un endpoint de reporting CSP y un equipo de seguridad que sabe lo que hace. Nada de eso capturo estos hallazgos porque ninguna de esas herramientas observa continuamente el entorno real del navegador.

Esa es la razon estructural por la que el navegador queda en el punto ciego de CTEM. La exposicion no esta en codigo que alguien escanea. Esta en codigo que se carga, muta y se ejecuta en la maquina del usuario, en un contexto que termina cuando se cierra la pestana. Capturarlo exige observar el runtime, no el repositorio ni la red.

Por que las herramientas solo de visibilidad no cierran el ciclo

El recorrido de Skeepers es el tipo de salida que puede producir una herramienta solo de visibilidad. La parte dificil viene despues.

EnfoqueDescubre scriptsPuntua riesgoDetecta cambiosDetiene ejecucion
Tag managersSiNoParcialNo
Solo CSPNoNoParcialSi, pero de forma poco precisa
Seguridad de navegador centrada en visibilidadSiSiSiNo
Seguridad de navegador centrada en enforcementSiSiSiSi

Sin la ultima columna, el unico camino de movilizacion del equipo de seguridad es un ticket para el equipo que gestiona la relacion con el proveedor, normalmente marketing o CX. Ese ticket compite con trabajo de producto. El proveedor publica un nuevo sub-script antes de que el ticket se cierre. El ciclo se repite.

Esta es la razon operativa por la que CTEM se atasca en el navegador, incluso en empresas con muchos recursos.

Por que los numeros generales deberian preocupar a los lideres de seguridad

El recorrido de Skeepers es un script en un sitio. La imagen agregada es mucho mayor.

  • La cadena mediana de inclusiones de terceros en la web moderna tiene 3 niveles de profundidad, con una profundidad maxima observada de 2.285 (Web Almanac 2025).
  • Ataques de skimming y Magecart comprometieron mas de 23 millones de transacciones online en 2025 (Recorded Future via Mastercard).
  • La mayoria de las herramientas CTEM trata esta capa como problema de otro equipo.

Un banco que carga dos scripts de Skeepers es un caso pequeno. Un checkout de e-commerce que carga entre 80 y 200 scripts de terceros es normal. La exposicion escala con el numero de scripts, la profundidad de la cadena de inclusion y la cadencia con la que los proveedores publican cambios.

Mapeo de cside al ciclo CTEM usando este caso

Asi se ve cada etapa de CTEM para este unico script cuando la plataforma cside es la capa de control en runtime.

Etapa CTEMQue significa en el navegadorEjemplo Skeepers
AlcanceDefinir que sitios y paginas entran en el alcanceTodos los subdominios del banco, con rigor extra en el flujo de autenticacion
DescubrimientoInventariar todos los scripts de primera, tercera y cuarta parteLoader + sub-script en runtime + Lambda GeoIP + 3 endpoints CSS
PriorizacionPuntuar scripts por acceso a datos y comportamientoCookie de 360 dias en subdominio auth, sub-script controlado por servidor: HIGH
ValidacionProbar lo que los scripts hacen de verdad, no lo que dicen hacerConfirmar brecha CSP, confirmar alcance de cookie, fingerprint del sub-script
MovilizacionDetener, restringir o permitir ejecucionRestringir el widget a paginas no auth, fijar hash del sub-script, alertar ante cambios

Las capturas que muchos equipos devuelven dicen lo mismo una vez desplegado cside. Sabian que el panorama de terceros era grande. No sabian que podia ser de 16.000 scripts en una semana tipica de retail. No sabian cuantos necesitaban revision PCI. No tenian un camino rapido desde "encontramos un problema" hasta "el problema no puede ejecutarse".

Para e-commerce en concreto, esta es la linea de defensa contra campanas de proteccion contra Magecart y web skimming, que siguen funcionando precisamente porque el script sigue ejecutandose.

Que pedirle a una herramienta de exposicion del navegador

Si estas evaluando herramientas y quieres mantener el marco CTEM, las preguntas son concretas:

  • Descubre scripts que cargan en runtime, no solo en la carga inicial de la pagina?
  • Sigue la cadena de dependencias hasta cargas de cuarta parte?
  • Detecta cuando cambia el hash de un script que antes estaba limpio?
  • Te dice que lee cada script del DOM, cookies y almacenamiento?
  • Puede bloquear o restringir un script en produccion sin redesplegar el sitio?
  • Su evidencia mapea a PCI DSS 6.4.3 y 11.6.1?
  • Cuanto tarda el camino desde deteccion hasta enforcement? Minutos, horas o un sprint?

Si la respuesta a las ultimas tres no es "si, rapido, si", la herramienta esta haciendo descubrimiento CTEM sin movilizacion CTEM.

El encuadre que importa

CTEM funciona porque trata la exposicion como continua. El navegador solo encaja en ese marco si la respuesta tambien es continua. Las auditorias trimestrales de scripts no igualan la cadencia con la que cambia el codigo de terceros. Los tickets al equipo de marketing no igualan la velocidad de un skimmer Magecart.

El caso Skeepers es moderado. No hay actor malicioso, es un proveedor reputado y un patron SaaS conocido. Aun asi produjo dos hallazgos HIGH en un gran banco internacional, incluido uno que mapea directamente a PCI DSS 4.0.1 6.4.3.

Si un proveedor benigno en un cliente cuidadoso produce tanta exposicion, la pregunta no es si la capa del navegador necesita cobertura CTEM. La pregunta es cuanto tiempo seguiran las empresas tratandola como fuera de alcance.

Para ver como se ve tu propia exposicion con el mismo lente, el monitoreo de scripts del navegador en una propiedad real te da el ciclo de descubrimiento, priorizacion y enforcement en menos de una hora.

Si tambien estas comparando una plataforma centrada en visibilidad con una centrada en enforcement, la comparacion Reflectiz vs cside recorre los trade-offs lado a lado.

Mike Kutlu
Author Mike Kutlu

Client-side security consultant at cside. 10+ years of experience implementing technology solutions for enterprises (previously at Oracle, Cloudflare, and Splunk). Now helping teams use client-side intelligence to catch & reduce fraud.

FAQ

Frequently Asked Questions

CTEM significa Continuous Threat Exposure Management. Es el marco de Gartner para tratar la exposicion como un ciclo continuo con cinco etapas: alcance, descubrimiento, priorizacion, validacion y movilizacion. A diferencia del escaneo puntual de vulnerabilidades, CTEM asume que la exposicion cambia constantemente y que la respuesta tambien debe ser continua.

Se aplican las mismas cinco etapas, pero cada una tiene un significado especifico para el navegador. El alcance define que paginas entran en el programa, normalmente checkout e inicio de sesion primero. El descubrimiento inventaria cada script de primera, tercera y cuarta parte que se ejecuta. La priorizacion los puntua por comportamiento y acceso a datos. La validacion prueba lo que realmente hacen. La movilizacion permite, restringe o bloquea la ejecucion en tiempo real.

La mayor parte de las herramientas CTEM se construyo para cloud e identidad, donde los activos son propios y controlables. El navegador es distinto: los scripts pertenecen a terceros, cambian al ritmo del proveedor y se ejecutan en el equipo del usuario. Sin una capa de control en tiempo de ejecucion dentro del navegador, la etapa de movilizacion de CTEM no tiene palanca ahi.

Si, en la practica. La clausula 6.4.3 exige un mecanismo que confirme que cada script en paginas de pago esta autorizado y que la integridad del script se mantiene. La clausula 11.6.1 exige un mecanismo de deteccion de cambios y manipulacion en el contenido de paginas de pago y cabeceras HTTP. Ambas requieren un control activo, no solo un inventario de scripts.

Las herramientas de visibilidad muestran que scripts se ejecutan y les asignan puntuaciones de riesgo. Las herramientas de enforcement tambien detienen o restringen scripts en tiempo real, antes de que el comportamiento sensible alcance al usuario. La diferencia es si el equipo de seguridad puede actuar sobre lo que ve sin redesplegar el sitio ni abrir un ticket con otro equipo.

Una Content Security Policy es una base util, pero poco precisa. El CSP del banco permitia *.myfeelback.com, pero no incluia *.cxr.skeepers.io, desde donde se cargaba el sub-script real en tiempo de ejecucion. CSP no detecta eso. La gestion de exposicion del navegador trabaja al nivel de script y comportamiento, sigue las llamadas en runtime y aplica decisiones en tiempo real.

No de forma fiable. Los escaneres DAST rastrean URLs sin ejecutar JavaScript como lo hace un navegador real. SAST y SCA miran codigo en tu repositorio, pero los scripts de terceros se cargan desde el CDN de otro proveedor en runtime. Los escaneres de vulnerabilidades comparan CVEs contra inventarios de software, y no existe un CVE para un widget de marketing que configura una cookie de 360 dias en tu subdominio de autenticacion. Los pentests son puntuales y pierden cambios de scripts que ocurren entre evaluaciones. Capturar esta exposicion exige observar continuamente el entorno real del navegador.

Monitorea 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 monitoreo de scripts y análisis de seguridad
Related Articles
Reservar una demo