Fallo en Telegram Desktop permitía a JavaScript oculto exfiltrar mensajes desde exportaciones HTML

Una vulnerabilidad en Telegram Desktop permitía que el mensaje de un bot insertara JavaScript oculto en los chats que los usuarios exportaban a archivos HTML, según revelaron los investigadores de seguridad de ExPatch en un informe publicado el 12 de septiembre.

En Telegram, el mensaje parecía normal, con un botón de enlace, y el script solo se ejecutaba cuando alguien abría el archivo de exportación en un navegador web. En ese momento, podía copiar todos los mensajes de ese archivo a un servidor controlado por el atacante o reescribir lo que mostraba la página.

Telegram lanzó una corrección en julio, pero la actualización de la aplicación no modifica los archivos exportados con versiones anteriores, por lo que las exportaciones HTML antiguas aún pueden contener el script.

Telegram Desktop, la aplicación de Telegram para Windows, macOS y Linux, puede guardar un chat individual o todos los chats de una cuenta como páginas HTML que se abren en un navegador. Los bots pueden adjuntar filas de botones debajo de sus mensajes, lo que Telegram denomina teclados en línea, y el bot elige el texto que se muestra en cada botón.

Hasta la corrección, el código de exportación escribía ese texto del botón directamente en la página HTML sin escaparlo, según descubrieron los investigadores Denis Rostilov y Aleksander Rostilov.

El escapado convierte caracteres como < para que un navegador los muestre como texto en lugar de tratarlos como código, y la exportación lo aplicaba al texto del mensaje, los nombres de los remitentes y otros campos.

Por lo tanto, un bot podía insertar una etiqueta script en el texto de un botón, rellenada con caracteres invisibles para que el botón pareciera vacío en la versión de Telegram Desktop que probaron.

El bot no necesita estar en el chat al que apunta. Un mensaje cuyos únicos botones son enlaces web conserva esos botones cuando se reenvía, por lo que cualquier miembro que reenvíe el mensaje del bot a un grupo lleva el script consigo, según los investigadores. El mensaje luego permanece en el historial del chat como cualquier otro hasta que se elimina, y puede exportarse meses o años después.

Informaron del fallo a Telegram el 3 de junio, dos días después de encontrarlo, y afirman que solo lo probaron en sus propias cuentas y grupos de prueba. Su informe no afirma que alguien haya utilizado el fallo contra usuarios reales.

Cuando se abría un archivo de exportación que contenía el mensaje, el script se ejecutaba sin necesidad de ningún clic adicional, según los investigadores. Podía leer todos los mensajes de ese archivo, incluidos los nombres de los remitentes y las marcas de tiempo, el nombre del chat, su tipo y número de miembros, y la ruta local del archivo, y enviarlos todos al servidor del atacante.

El código de exportación de Telegram Desktop divide las exportaciones largas en archivos de 1.000 mensajes cada uno, por lo que un archivo expone como máximo su propio contenido, no todo el chat ni la cuenta de Telegram.

El script también podía reescribir la página. En la demostración de los investigadores, reemplazó toda la exportación con un formulario falso de "verificación" de Telegram.

El mismo control podía cambiar fechas, remitentes o el texto de los mensajes en un archivo que se utilizaba como registro, según los investigadores. No modificaba la copia que Telegram tiene del chat ni el archivo de exportación guardado en el disco.

Los investigadores calificaron el fallo con 8,2 sobre 10 en la escala CVSS 3.1, y no existe ninguna puntuación de Telegram ni de la Base de Datos Nacional de Vulnerabilidades de EE. UU. (NVD) hasta el 14 de septiembre.

Tres condiciones debían cumplirse para que el script se ejecutara: que la exportación HTML se hubiera realizado con una versión de Telegram Desktop anterior a la corrección, que el mensaje que transportaba el script estuviera dentro del chat exportado y que el archivo se abriera en un navegador con JavaScript habilitado.

Los investigadores examinaron únicamente la exportación HTML de Telegram Desktop y no abordaron el formato de exportación JSON ni las funciones de exportación de otras aplicaciones de Telegram.

Que un mensaje de bot reenviado acabe en una exportación depende de cómo se realice esta. Exportar un chat individual desde su menú incluye los mensajes de todos los miembros. Una exportación completa de la cuenta incluye, por defecto, solo los mensajes del propio dueño de la cuenta en grupos y canales, pero todos los mensajes en chats individuales y chats con bots, según el código de exportación y la documentación de Telegram.

La corrección, commit 8457d13a del desarrollador de Telegram Desktop John Preston, añade el escapado que faltaba. Se escribió el 30 de junio y llegó a la beta 6.9.4 el 3 de julio y a la versión estable 7.0.1 el 14 de julio, las primeras versiones corregidas publicadas en GitHub. La línea sin escapar había estado en versiones estables desde la 4.15.1 en marzo de 2024, unos dos años y cuatro meses.

  • Afectado: Telegram Desktop 4.15.1 (marzo de 2024) hasta 6.9.3
  • Corregido: 6.9.4 beta (3 de julio de 2026), 7.0.1 (14 de julio de 2026) y posteriores

Los investigadores aconsejan a los usuarios:

  • Actualizar Telegram Desktop a 7.0.1 o posterior, o a 6.9.4 o posterior en el canal beta.
  • Después de actualizar, volver a exportar los chats que se exportaron a HTML antes de la corrección, o abrir los archivos antiguos solo con JavaScript deshabilitado.
  • Tratar cualquier exportación HTML realizada antes de la corrección como no confiable, especialmente una de un grupo grande donde el origen de cada mensaje es difícil de verificar.

Hasta que se actualice la aplicación, no hay razón para crear nuevas exportaciones HTML, ya que solo las exportaciones producidas por el código antiguo conllevan el fallo.

Hasta el 14 de septiembre, Telegram no había publicado ninguna guía para los usuarios que poseen exportaciones antiguas.

Sin aviso ni CVE

Las notas de la versión 6.9.4 y 7.0.1, el registro de cambios de la aplicación y el anuncio de Telegram del 14 de julio sobre la actualización no mencionan la corrección, y el repositorio de Telegram Desktop en GitHub no lista ningún aviso de seguridad.

Tampoco existe un identificador CVE para el fallo. Los investigadores señalaron que, hasta el 11 de septiembre, una búsqueda en bases de datos públicas de vulnerabilidades realizada por The Hacker News el 14 de septiembre no encontró ninguno.

Los investigadores afirman que Telegram confirmó el fallo el 1 de julio y ofreció una recompensa de 500 dólares por el error, que rechazaron y pidieron que se donara a una organización benéfica. Solicitaron una fecha de publicación coordinada y ofrecieron mantener silencio hasta que se lanzara el parche.

"También hemos considerado la posibilidad de una divulgación pública, pero no podemos aprobarla, ya que revelar incluso problemas ya solucionados podría poner en riesgo a más usuarios de Telegram en el futuro. Por ejemplo, si se hace pública información sobre una vulnerabilidad, actores maliciosos pueden intentar explotarla, causando así daños económicos a los usuarios de Telegram", escribió el Soporte de Telegram en un correo electrónico fechado el 1 de julio que los investigadores publicaron como captura de pantalla.

Los investigadores interpretaron eso como una negativa a permitir la publicación incluso después de una corrección. Dicen que ningún acuerdo de confidencialidad cubría su informe, y publicaron el 12 de septiembre, después de que se lanzara la corrección.

Las reglas publicadas del programa de recompensas por errores de Telegram establecen que las vulnerabilidades "divulgadas al público o a terceros antes de que se solucionen" no son elegibles para una recompensa. La página no dice nada sobre la publicación después de una corrección.

Cybersecurity
Cybersecurity
Cybersecurity
Cybersecurity

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *