Caso 02 — imo Messenger

Un enlace que
te delata.

Dices que estás en Nueva York. Pero basta un enlace en el chat para que imo revele tu IP real y permita aproximar tu ubicación a una ciudad. No llegas a abrir el enlace. Sin pulsarlo ni montar un servidor. Más de 500 millones de instalaciones.

Por Abbas Hoseiny·Investigación independiente de seguridad·Fabricante: PageBites, Inc.

Una vista previa parece inofensiva: una pequeña tarjeta bajo una dirección web. Pero alguien ha tenido que descargar la página para crearla. Para tu privacidad, lo decisivo es qué dispositivo lo ha hecho. Esta historia transcurre durante una tarde de Mia en casa, y la respuesta de imo no podría ser menos favorable.

Mia lee un mensaje en el sofá y responde que está de viaje
Hola, Mia. ¿Nos vemos hoy?
Lo siento, esta semana estoy en Nueva York.
Fig. 1 — lo que dice Mia

Mia está en su casa de Berlín, acomodada en el sofá. Jonas le propone quedar, pero no le apetece. Así que dice que está de viaje: «Esta semana estoy en Nueva York».

Mia ve el enlace sin abrirlo mientras la petición automática de la vista previa llega a un registro remotowebhook.site/aXk9sin pulsar el enlace
Fig. 2 — la petición silenciosa

Jonas envía un enlace gratuito de webhook.site. Mia lo ve en el chat, pero no lo pulsa. Eso basta: imo lo descarga por su cuenta desde el teléfono y revela su IP. Sin clics, sin montar un servidor y sin malware.

Jonas lee el registro junto a un mapa aproximado de la ciudad, sin marcador de ubicación exacta
¿Nueva York?
Está en Berlín.
Fig. 3 — el mapa cuenta otra historia

En la pantalla de Jonas, la IP se asocia a una ciudad: Berlín, no Nueva York. En esta historia, es la ciudad donde se encuentra Mia.

Mia dijo
Nueva York
pero
Su teléfono indica
Berlín, Alemania
a partir de un solo enlace en el chat
Mia mira el teléfono con inquietud: una petición registrada ha permitido estimar su ciudad
Estás en Berlín.
¿Cómo sabes dónde estoy?
Fig. 4 — lo que debería preocuparnos

Mia no compartió su ubicación. Vio un mensaje sin pulsar nada. Aun así, quedó expuesta. Lo inquietante no es la pequeña mentira, sino que no pudo elegir. Cualquiera con quien chatea podría haber hecho lo mismo.

Por qué importa

Una ubicación que no aceptaste compartir.

Una IP no es solo un número. Puede dar pistas sobre tu ciudad, tu red y tu ubicación aproximada, y ayudar a deducir si estás en casa o cómo te desplazas. Aquí el remitente no necesita pagar: un enlace gratuito y un mensajero que responde por ti son suficientes.

Signal, WhatsApp e iMessage evitan esta exposición al generar la vista previa en un servidor o solo en el dispositivo del remitente. imo la solicita desde el destinatario, que no debería acceder al enlace del atacante sin haberlo elegido.

Informe técnico

imo Messenger — hallazgos y análisis

Prueba de concepto y reproducción en GitHub ↗

Resumen y gravedad

Se probó imo Messenger, de PageBites, Inc., en Android, iOS, macOS y Windows. Se publican dos hallazgos. Una tercera observación, la suplantación del User-Agent de Facebook, se documenta dentro de F-PREVIEW: por sí sola es un comportamiento, no una vulnerabilidad independiente.

IDHallazgoCWECVSS 3.1Gravedad
F-PREVIEWFiltración de IP y metadatos sin clics mediante la vista previa200/3194.3Media
F-STORAGEAlmacenamiento de credenciales en texto claro3126.2Media
F-UALa petición suplanta facebookexternalhit (incluido en F-PREVIEW)451—Contexto
F-PREVIEW · CWE-200 / CWE-319

Filtración de IP y metadatos sin clics mediante la vista previa

Media · CVSS 4.3

Descripción

Al recibir un mensaje con una URL, el cliente del destinatario envía una petición HTTP GET a esa dirección para generar la vista previa. La petición sale del dispositivo del destinatario y revela su IP real, User-Agent y estado de conexión a quien controla la URL. No hay opción para desactivarlo ni caché: se repite cada vez que se abre el chat. La petición lleva el User-Agent facebookexternalhit/1.1 Facebot Twitterbot/1.0. Basta un servicio gratuito de registro de peticiones como webhook.site; el atacante no necesita infraestructura propia.

request log behind the link
$ GET /t/aXk9 HTTP/1.1 Cf-Connecting-IP: 91.64.xx.xx ← recipient's real IP └─ geolocates to: Berlin, DE User-Agent: facebookexternalhit/1.1 Facebot Twitterbot/1.0 X-Forwarded-For: 91.64.xx.xx [=] recipient-side fetch — zero taps, zero consent [=] control: WhatsApp → sender-side fetch (no recipient IP) [=] control: Telegram → server-side fetch (datacenter IP)

Captura ilustrativa. La IP es de ejemplo. Las pruebas reales utilizaron un endpoint temporal de registro y confirmaron el origen en el destinatario mediante comparaciones con WhatsApp y Telegram.

Versiones afectadas

imo Messenger para iOS 2026.1.3, macOS 2.27 y la versión de Android vigente durante la prueba del 1 de marzo de 2026. Windows no está afectado: su versión no genera vistas previas en el cliente. No hay una versión corregida disponible.

Por qué resulta relevante en imo

imo permite el contacto no solicitado mediante grupos y mensajes a números de teléfono. No es necesario que el destinatario haya aceptado al atacante como contacto: compartir un grupo o recibir una sola respuesta puede bastar para enviar el enlace y provocar la filtración.

Comportamiento esperado

  • Descargar la vista previa mediante un proxy en el servidor, como Signal, WhatsApp o iMessage; o bien
  • Generarla solo en el dispositivo del remitente e incluir sus metadatos en el mensaje cifrado; o bien
  • Activar las vistas previas únicamente con consentimiento informado sobre la exposición de la IP.

Desglose de CVSS 3.1

AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N → Base 4.3 (media)

El impacto se limita a revelar una IP y un User-Agent, lo que corresponde a C:Low y mantiene la puntuación en gravedad media aunque la interacción sea mínima. Si la petición se produce sin abrir la conversación, el vector pasa a UI:N y la puntuación a 5.3, todavía media.

F-STORAGE · CWE-312

Almacenamiento de credenciales en texto claro

Media · CVSS 6.2

Descripción

Los datos de autenticación, como el número de teléfono, la cookie de sesión, el UDID y los tokens, se guardan en texto claro en los datos locales de la aplicación: LevelDB en macOS y un archivo de datos en Windows. En Windows, la clave AES-CBC está almacenada en texto claro junto a los datos cifrados, lo que anula la protección: cualquiera que pueda leer esos archivos puede descifrarlos.

Impacto

Un atacante con permiso para leer archivos locales puede acceder a los datos de autenticación, incluido un token de sesión activo. Puede ocurrir en un dispositivo perdido o robado sin cifrado completo de disco, en copias sin cifrar en almacenamiento compartido, con malware que tenga permisos de usuario o mediante una extracción forense. No probé si ese token permite suplantar al usuario sin volver a autenticarse: depende de cómo imo vincule las sesiones en sus servidores.

Desglose de CVSS 3.1

AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N → Base 6.2 (media)

El impacto sobre la confidencialidad es alto porque los datos de autenticación quedan completamente expuestos. No se afectan la integridad ni la disponibilidad. La necesidad de acceso local (AV:Local) mantiene la puntuación base en gravedad media.

Sobre las puntuaciones de gravedad

Por qué no asigno puntuaciones más altas La puntuación base CVSS depende del vector de ataque, la interacción necesaria y el impacto sobre la confidencialidad, integridad y disponibilidad, no de lo alarmante que suene el hallazgo. Una filtración de IP corresponde a C:Low; no alcanza gravedad alta por ser «sin clics», ya que eso solo cambia la interacción, no el impacto. El almacenamiento en texto claro exige acceso local, por lo que AV:Local lo mantiene en gravedad media. Son problemas reales que merecen corregirse, con una gravedad media justificada. Prefiero publicar puntuaciones defendibles a inflarlas.

Cronología de la divulgación


Este informe documenta un problema de privacidad y protección de datos con fines de investigación y defensa. No contiene malware ni una herramienta de explotación lista para usar, más allá de un endpoint mínimo de registro para demostrar la filtración.