Bastaba con abrir un enlace de ChatGPT compartido por otra persona para que un atacante explotara una vulnerabilidad en ChatGPT y tomara el control total de la cuenta de la víctima. No hacía falta instalar una app, unirse a un proyecto ni abrir las herramientas de desarrollador: solo clickear el link.
La firma de seguridad Parameter reportó el fallo el 26 de octubre de 2026 y OpenAI lo corrigió ese mismo día, clasificándolo como severidad P1, la más alta de su programa de recompensas. El equipo publicó el análisis técnico completo dos días después, el 28 de octubre.
TL;DR
- Abrir un enlace de ChatGPT compartido bastaba para que un atacante tomara control total de la cuenta.- La cadena combinó un gráfico, la librería MathLive y el modo Preview para saltar el sandbox de ChatGPT.- El ataque usó un JSONP de YouTube para esquivar la Content Security Policy de chatgpt.com.- OpenAI corrigió el fallo el 26 de octubre de 2026 y lo marcó como severidad P1.- Parameter publicó el hallazgo completo el 28 de octubre de 2026 con el detalle técnico del exploit.
Qué es ChatGPT
ChatGPT es el chatbot de inteligencia artificial de OpenAI, basado en modelos de lenguaje grande, que permite conversar, generar código y compartir conversaciones públicamente mediante un enlace. Esa función de compartir, junto con el modo Preview para ejecutar HTML, fue el origen de la vulnerabilidad en ChatGPT que Parameter reportó en octubre de 2026.
El fallo vivía en la combinación de dos funciones que conviven en la misma página: el Preview, que ejecuta HTML dentro de un marco aislado con una dirección web distinta, y un gráfico interactivo que carga una librería externa de matemáticas llamada MathLive. Cada función por separado funcionaba como estaba pensada.
Qué pasó
El ataque arrancó con una conversación normal de ChatGPT que el atacante publicó usando la función de compartir, la misma que cualquier usuario emplea para enviarle un chat a un colega. Dentro de esa conversación había un gráfico matemático interactivo y un bloque de código HTML que ChatGPT convierte en una pequeña página mediante Preview.
Cuando la víctima abría el enlace, el gráfico cargaba MathLive en la página principal de chatgpt.com y, sin que nadie lo pidiera, instalaba un listener para mensajes postMessage relacionados con su teclado virtual en pantalla. El Preview, en cambio, corría en un origen distinto y no podía leer directamente el documento de la página principal, porque la separación de orígenes del navegador se lo impedía.
Pero el Preview sí podía enviar un mensaje a través de postMessage, el mecanismo que dos ventanas usan para comunicarse incluso cuando el navegador les impide leerse mutuamente. El listener de MathLive, instalado minutos antes por el gráfico, se convirtió en el buzón donde el Preview depositó su carga.
Contexto e historia
ChatGPT permite compartir conversaciones públicamente desde 2023, y el modo Preview, que convierte un bloque de código en una página funcional, se sumó después para que los usuarios probaran el código generado sin salir del chat. Cada función pasó sus propias revisiones de seguridad por separado.
El problema apareció en la intersección de ambas, un patrón frecuente en aplicaciones web complejas: dos equipos distintos construyen piezas razonablemente seguras, pero nadie revisa qué pasa cuando esas piezas conviven en la misma pestaña del navegador. MathLive es una librería de código abierto para edición de fórmulas matemáticas, usada por ChatGPT para renderizar ecuaciones.
Parameter es una firma de investigación que audita productos de inteligencia artificial. OpenAI mantiene un programa público de recompensas por vulnerabilidades y clasificó este hallazgo como P1, la categoría más grave, reservada para fallos que permiten comprometer cuentas de usuarios sin que estos hagan nada fuera de lo normal.
El Preview de ChatGPT ejecuta HTML en un origen aislado, separado de chatgpt.com.
Detalles técnicos: cómo funciona la vulnerabilidad en ChatGPT paso a paso
El fallo no fue un descuido aislado, sino una política de origen demasiado permisiva en el controlador de MathLive. Cuando el Preview mandaba un mensaje postMessage, el controlador de nivel superior de MathLive aceptaba el mensaje sin comprobar quién lo había enviado, porque su configuración de origen estaba fijada en none: la opción que acepta remitentes de cualquier dirección web.
top.postMessage({
type: "mathlive#virtual-keyboard-message",
action: "update-setting",
layouts: [{
label: "Compatibility",
layers: [{ id: "compatibility", markup }]
}]
}, "*");
top.postMessage({
type: "mathlive#virtual-keyboard-message",
action: "show",
animate: false
}, "*");
El primer mensaje reemplazaba el diseño del teclado virtual con HTML a elección del atacante. El segundo le ordenaba a MathLive mostrar ese teclado, lo que forzaba a la librería a insertar el HTML en el documento real de chatgpt.com. Una función llamada createHTML debía sanitizar esa cadena, pero solo la marcaba como confiable y la dejaba pasar intacta hacia innerHTML.
Insertar HTML con innerHTML no ejecuta scripts por sí solo: el navegador los ignora por diseño. Para saltar esa barrera, el HTML inyectado incluía un iframe con el atributo srcdoc, que permite empotrar una página completa dentro de otra usando una cadena de texto. MathLive insertó ese iframe sin el atributo sandbox, así que el navegador le asignó la identidad de https://chatgpt.com y le dio acceso a la página que lo contenía.
Quedaba un obstáculo más. La Content Security Policy de ChatGPT bloquea JavaScript en línea y restringe qué dominios pueden servir scripts, pero el equipo de Parameter encontró que la política permitía cargar scripts desde dominios de YouTube. Aprovecharon un endpoint JSONP (una respuesta JSON envuelta en una función de JavaScript) para que el navegador ejecutara código arbitrario camuflado como una llamada legítima a YouTube.
⚠️ Ojo: Un endpoint JSONP en un dominio permitido por la Content Security Policy equivale a una lista blanca con un agujero: cualquier script que esa URL pueda devolver corre con los privilegios del sitio que lo permitió.
Pieza de la cadenaRol en el ataquePor qué fallóGráfico interactivoCarga MathLive dentro de la página principalInstala un listener de postMessage sin que el usuario lo noteChatGPT PreviewEjecuta HTML y JavaScript en un origen aisladoEl aislamiento bloquea lectura directa del DOM, no postMessageMathLive virtual-keyboard-messageRecibe el mensaje y lo inserta en el DOM realPolítica de origen en none: acepta mensajes de cualquier remitentecreateHTML / innerHTMLPasa el HTML a la página sin filtrarloMarca el string como confiable sin sanitizarloiframe srcdoc sin sandboxEjecuta JavaScript con la identidad de chatgpt.comNo lleva el atributo sandbox que limitaría sus permisosJSONP de YouTubeEsquiva la Content Security PolicyEl dominio de YouTube estaba permitido en script-src
flowchart TD
A["Atacante publica una conversacion de ChatGPT"] --> B["Victima abre el enlace compartido"]
B --> C["Preview carga MathLive y ejecuta postMessage"]
C --> D["MathLive inserta HTML sin sanitizar en el DOM real"]
D --> E["iframe srcdoc sin sandbox ejecuta JavaScript como chatgpt.com"]
E --> F["El script bypassea la CSP con JSONP de YouTube"]
F --> G["El atacante lee chats privados y llama a las APIs autenticadas"]
Con el script corriendo dentro del origen de chatgpt.com, el atacante ya no necesitaba manipular la pantalla ni engañar a la víctima con un clic adicional. El código podía llamar a las mismas APIs internas que usa la interfaz de ChatGPT para listar conversaciones, leer su contenido y enviar los datos a un servidor externo, todo con la sesión autenticada de la víctima.
Parameter clasificó el hallazgo como severidad P1, la categoría más alta del programa de OpenAI.
Impacto y análisis
La vulnerabilidad en ChatGPT no se limitaba a mostrar una alerta o cambiar el aspecto de la página: el script podía ejecutar cualquier acción que la propia víctima pudiera hacer dentro de su cuenta. Parameter confirmó que podía enumerar la lista completa de conversaciones, incluidas las que nunca se habían compartido, y extraer su contenido.
Lo que convierte este hallazgo en algo más serio que un XSS tradicional es el vector de entrada. La víctima no visitó un sitio sospechoso ni pegó código en ninguna consola: abrió un enlace de ChatGPT, publicado desde la función de compartir que el propio producto promueve para que los usuarios intercambien conversaciones útiles.
El riesgo escala con la cantidad de enlaces que circulan a diario, porque la función de compartir se usa para tutoriales, demos y soporte técnico. Cualquiera de esos enlaces podía convertirse, durante la ventana de exposición, en una trampa silenciosa para quien lo abriera.
Qué sigue
OpenAI desplegó la corrección el mismo 26 de octubre de 2026, antes de que Parameter publicara el detalle técnico. La reparación probablemente endureció al menos tres puntos: la política de origen de MathLive, el atributo sandbox del iframe generado y la lista de dominios permitidos en la Content Security Policy para scripts de YouTube.
💡 Tip: Si tu aplicación usa postMessage entre ventanas o iframes, validá siempre
event.origincontra una lista explícita de dominios confiables antes de procesar el mensaje. Nunca aceptes el valor por defecto que permite cualquier origen.
El caso deja una lección para cualquier equipo que integre librerías de terceros dentro de una aplicación con sesión autenticada: aunque cada pieza pase su propia revisión de seguridad, la combinación de piezas necesita su propia auditoría. Parameter construyó la cadena completa probando, uno por uno, qué podía alcanzar el código dentro del Preview.
No hay, por ahora, evidencia pública de que la falla P1 se explotara contra usuarios reales antes del parche. OpenAI y Parameter coordinaron la divulgación de forma responsable, con el aviso técnico publicado solo después de confirmar la corrección en producción.
📖 Resumen en Telegram: Ver resumen
Si desarrollás con iframes, postMessage o librerías de terceros dentro de una app con sesión activa, revisá hoy mismo cada listener de mensajes y confirmá que valide el origen antes de leer su contenido.
Preguntas frecuentes
¿Qué es MathLive y qué rol tuvo en el fallo de ChatGPT?
MathLive es una librería de código abierto que ChatGPT usa para renderizar y editar fórmulas matemáticas con un teclado virtual. Su listener de mensajes sin validar origen fue la puerta que un atacante usó para inyectar HTML en la página real de ChatGPT.
¿Qué tenía que hacer la víctima para quedar expuesta en ChatGPT?
Solo abrir el enlace de la conversación compartida por el atacante. No se requería instalar nada, iniciar sesión de nuevo ni interactuar con ningún elemento adicional de la página.
¿Qué datos de ChatGPT podía robar un atacante con esta falla P1?
El código podía enumerar la lista de conversaciones de la víctima, leer el contenido de chats privados nunca compartidos y enviarlo a un servidor externo, además de llamar a las APIs autenticadas de la cuenta.
¿Sigue activa la vulnerabilidad en ChatGPT hoy?
No. OpenAI corrigió el fallo el 26 de octubre de 2026, el mismo día en que Parameter lo reportó, antes de que se publicara el análisis técnico completo.
¿En qué se diferencia este ataque a ChatGPT de un XSS clásico?
No dependió de inyectar un script directamente, sino de encadenar un bypass de postMessage, un fallo de sanitización en una librería y un bypass de la Content Security Policy vía JSONP para lograr ejecución de código con la identidad del sitio.
¿Cómo evitar un bypass como el de MathLive en tu propia aplicación?
Validar siempre el origen de cada mensaje postMessage recibido, sanitizar cualquier HTML antes de asignarlo a innerHTML, agregar el atributo sandbox a los iframes con srcdoc y revisar qué dominios de terceros habilita tu Content Security Policy en script-src.
Referencias
- Parameter: informe técnico completo de la vulnerabilidad, "Do the Math: How We Took Over ChatGPT Accounts".- MathLive en GitHub: repositorio oficial de la librería de edición de fórmulas matemáticas usada por ChatGPT.- MDN Web Docs: documentación de referencia sobre Content Security Policy y la directiva script-src.- OpenAI: sitio oficial de la empresa responsable de ChatGPT.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Top comments (0)