¿La víctima necesitaba hacer algo más que abrir el enlace?

Investigadores de seguridad descubrieron la forma de convertir un enlace público común para compartir en ChatGPT en una herramienta para tomar el control de la cuenta de otro usuario. Abrir el enlace era la única acción que la víctima tenía que realizar. OpenAI corrigió la falla el 26 de octubre y clasificó el informe como P1.

¿Cómo funcionaba el ataque con el enlace compartido de ChatGPT?

El ataque comenzó con dos funciones que parecían inofensivas por separado. La primera era la función de vista previa de ChatGPT, que convierte un bloque de código HTML en una pequeña página web funcional. ChatGPT ejecuta esa página en un marco restringido en una dirección web separada, por lo que su código no puede inspeccionar directamente la página de ChatGPT con sesión iniciada que la rodea. La segunda era un gráfico interactivo. Detrás de escena, el gráfico cargaba una biblioteca matemática llamada MathLive, que instalaba un receptor de eventos en la página principal de ChatGPT para manejar mensajes relacionados con su teclado en pantalla.

Ese receptor era el punto débil. Los navegadores permiten que dos marcos se envíen mensajes entre sí, incluso cuando no pueden leer las páginas del otro. El receptor debe verificar quién envió el mensaje antes de actuar en consecuencia. Los investigadores descubrieron que MathLive no realizaba esa verificación para una configuración. Su receptor aceptaba un mensaje que reemplazaba la distribución del teclado, y esa distribución podía contener HTML sin procesar. El marco de vista previa, que debería considerarse no confiable, podía enviar ese mensaje.

Introducir HTML en la página fue solo el primer paso. Las etiquetas de script insertadas de esa forma no se ejecutan por sí solas. Los investigadores lo evitaron haciendo que la página creara un marco incrustado sin sandbox, lo que les dio un documento nuevo donde su código podía ejecutarse. La política de seguridad de contenido de ChatGPT bloqueaba el JavaScript en línea, pero permitía scripts de YouTube. Los investigadores usaron un punto de conexión oEmbed de YouTube que aceptaba un parámetro de callback, lo que les permitió colocar su propio código dentro de una respuesta que el navegador cargaría como script. El mensaje de error del punto de conexión se adjuntaba después del callback, y terminar la carga con una expresión void evitaba que ese error rompiera el código.

Una vez que el código se ejecutaba como chatgpt.com, tenía el mismo acceso que la sesión de la víctima. Los investigadores afirmaron que podía llamar a las API de conversaciones de ChatGPT, listar las conversaciones recientes de la víctima y solicitar datos de mensajes de un chat privado seleccionado. El chat al que accedieron no tenía relación con el enlace compartido y nunca se había compartido con el atacante. La prueba de concepto luego envió una pequeña parte de esos datos a un servidor controlado por los investigadores. Ellos indicaron que el código ya había recibido la respuesta completa, por lo que el ataque no se limitaba al contenido que habían elegido enviar. Los investigadores también señalaron que cualquier elemento disponible a través de la interfaz web autenticada de ChatGPT estaba dentro del mismo límite de seguridad.

Las primeras versiones eran menos peligrosas. Una prueba temprana dependía de una aplicación de ChatGPT controlada por los investigadores, a la que la víctima tendría que conectarse primero. La versión que resultó relevante colocó el gráfico y la vista previa maliciosa en una misma conversación pública. Cuando otro usuario abría el enlace compartido, la carga podía ejecutarse automáticamente. En las pruebas de los investigadores, una alerta apareció unos 4,5 segundos después de cargar la página. Reprodujeron la ruta automática tres veces en una cuenta separada, incluso después de una recarga forzada.

¿Cómo corrigió OpenAI la falla del enlace compartido de ChatGPT?

Los investigadores reportaron el problema al programa de recompensas por errores de OpenAI el 18 de octubre. OpenAI lo reprodujo el 21 de octubre y elevó la severidad de la calificación inicial P2 a P1. La corrección se desplegó en dos versiones del frontend web de ChatGPT, y los tiempos no fueron iguales. El 22 de octubre, OpenAI informó que un frontend ya estaba corregido mientras el otro seguía actualizándose. Los cambios en la política de seguridad de contenido bloquearon parte de la cadena durante ese intervalo. El 26 de octubre, OpenAI confirmó que ambas versiones rechazaban los mensajes entre marcos de MathLive, marcó el problema como resuelto y otorgó una recompensa total de 5.000 dólares.

Dónde falló el diseño

Los investigadores afirmaron que el sandbox de la vista previa funcionó como se esperaba. La falla ocurrió cuando un segundo componente de la página principal aceptó instrucciones del marco con sandbox sin verificar al remitente. El punto de conexión de YouTube fue el último rodeo a la política de seguridad de contenido, no la causa raíz. Bloquear únicamente ese punto de conexión habría cerrado una ruta hacia el JavaScript, pero habría dejado intacta la vía de inyección de HTML.

Los investigadores señalaron que el problema existía solo en la combinación de funciones. La vista previa estaba aislada, los gráficos podían cargar un teclado, los marcos podían intercambiar mensajes, la política permitía a un importante proveedor de medios y las conversaciones públicas podían compartirse. La vulnerabilidad apareció solo cuando todas esas funciones coincidieron en una misma página. Sus recomendaciones para los desarrolladores incluían verificar tanto el origen como la ventana exacta de cualquier mensaje que cambie el estado, mantener las configuraciones entre ventanas libres de HTML sin procesar y mantener en sandbox los documentos creados dinámicamente cuando un marco no confiable pueda influir en ellos.

Este artículo fue escrito con la asistencia de IA.
News Factory APP - noticias agénticas para impulsar tu SEO y AEO.