Cas 02 — imo Messenger

Un lien qui
vous trahit.

Vous dites être à New York. Pourtant, un seul lien dans le chat suffit pour qu'imo révèle votre véritable IP et permette d'estimer la ville où vous vous trouvez. Vous n'ouvrez jamais le lien. Aucun clic, aucun serveur à installer. Plus de 500 millions d'installations.

Par Abbas Hoseiny·Recherche indépendante en sécurité·Éditeur : PageBites, Inc.

Un aperçu de lien semble anodin : une petite carte sous une adresse web. Mais un appareil a dû consulter cette page pour le générer. Pour la vie privée, tout dépend de l'appareil qui s'en charge. Voici une soirée de Mia chez elle, et la réponse d'imo à cette question est loin d'être rassurante.

Mia lit un message sur son canapé et répond qu'elle est en voyage
Salut Mia, on se voit aujourd'hui ?
Désolée, je suis à New York cette semaine.
Fig. 1 — ce que dit Mia

Mia est chez elle à Berlin, installée sur son canapé. Jonas lui propose de se voir, mais elle n'en a pas envie. Elle prétexte donc un voyage : « Je suis à New York cette semaine. »

Mia voit le lien sans l'ouvrir tandis que la requête automatique d'aperçu arrive dans un journal distantwebhook.site/aXk9aucun clic
Fig. 2 — la requête silencieuse

Jonas lui envoie un lien gratuit de webhook.site. Mia le voit dans la conversation, mais ne le touche pas. Cela suffit : imo le consulte de lui-même depuis son téléphone et expose son IP. Aucun clic, aucun serveur à installer, aucun logiciel malveillant.

Jonas consulte le journal à côté d'une carte approximative de la ville, sans localisation précise
New York ?
Elle est à Berlin.
Fig. 3 — la carte raconte autre chose

Sur l'écran de Jonas, l'IP est associée à une ville : Berlin, pas New York. Dans cette histoire, c'est bien la ville où se trouve Mia.

Mia a dit
New York
mais
Son téléphone indique
Berlin, Allemagne
à partir d'un seul lien dans le chat
Mia regarde son téléphone, inquiète : une requête enregistrée a permis d'estimer sa ville
Tu es à Berlin.
Comment tu sais où je suis ?
Fig. 4 — ce qui devrait inquiéter

Mia n'a pas partagé sa localisation. Elle a vu un message, sans rien toucher. Pourtant, l'information est là. Le problème n'est pas son petit mensonge : c'est l'absence de choix. N'importe lequel de ses interlocuteurs aurait pu faire la même chose.

Pourquoi c'est important

Une localisation que vous n'avez pas choisi de partager.

Une IP n'est pas qu'un nombre. Elle peut renseigner sur votre ville, votre réseau et votre position approximative, et aider à déduire votre présence chez vous ou vos déplacements. Ici, cela ne coûte rien à l'expéditeur : un lien gratuit et une messagerie qui répond à votre place suffisent.

Signal, WhatsApp et iMessage évitent cette exposition en récupérant l'aperçu sur un serveur ou uniquement sur l'appareil de l'expéditeur. imo le récupère depuis le destinataire, qui ne devrait pas contacter le lien de l'attaquant sans l'avoir choisi.

Analyse technique

imo Messenger — constats et analyse

Preuve de concept et reproduction sur GitHub ↗

Synthèse et gravité

imo Messenger, édité par PageBites, Inc., a été testé sur Android, iOS, macOS et Windows. Deux constats sont publiés ici. Une troisième observation, l'usurpation du User-Agent de Facebook, est documentée dans F-PREVIEW : il s'agit à elle seule d'un comportement, pas d'une vulnérabilité distincte.

IDConstatCWECVSS 3.1Gravité
F-PREVIEWFuite d'IP et de métadonnées sans clic via l'aperçu d'un lien200/3194.3Moyenne
F-STORAGEStockage en clair des données d'authentification3126.2Moyenne
F-UALa requête usurpe facebookexternalhit (intégré à F-PREVIEW)451—Contexte
F-PREVIEW · CWE-200 / CWE-319

Fuite d'IP et de métadonnées sans clic via l'aperçu d'un lien

Moyenne · CVSS 4.3

Description

À la réception d'un message contenant une URL, le client du destinataire envoie une requête HTTP GET à cette adresse pour générer l'aperçu. La requête part de son appareil et révèle son IP réelle, son User-Agent et son état de connexion à la personne qui contrôle l'URL. Il n'existe ni option de désactivation ni cache : la requête se répète à chaque ouverture du chat. Elle porte le User-Agent facebookexternalhit/1.1 Facebot Twitterbot/1.0. Un service gratuit comme webhook.site suffit ; l'attaquant n'a besoin d'aucune infrastructure personnelle.

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)

Capture illustrative. L'IP est un exemple. Les tests réels utilisaient un point de collecte temporaire et ont confirmé l'origine côté destinataire par comparaison avec WhatsApp et Telegram.

Versions concernées

imo Messenger pour iOS 2026.1.3, macOS 2.27 et la version Android en cours lors du test du 1er mars 2026. Windows n'est pas concerné : sa version ne génère pas d'aperçu côté client. Aucune version corrigée n'est disponible.

Pourquoi ce point compte particulièrement sur imo

imo autorise les contacts non sollicités via les groupes et la messagerie par numéro de téléphone. L'attaquant n'a pas besoin d'avoir été accepté comme contact : un groupe commun ou une seule réponse peut suffire pour transmettre le lien et déclencher la fuite.

Comportement attendu

  • Récupération de l'aperçu par un proxy côté serveur, comme Signal, WhatsApp ou iMessage ; ou
  • Génération uniquement sur l'appareil de l'expéditeur, avec les métadonnées intégrées au message chiffré ; ou
  • Activation volontaire des aperçus après information claire sur l'exposition de l'IP.

Détail du score CVSS 3.1

AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N → Score de base 4.3 (moyen)

L'impact se limite à la divulgation d'une IP et d'un User-Agent, soit C:Low. Le score reste donc moyen même si l'interaction requise est très faible. Si la requête se déclenche sans ouvrir la conversation, le vecteur devient UI:N et le score passe à 5.3, toujours moyen.

F-STORAGE · CWE-312

Stockage en clair des données d'authentification

Moyenne · CVSS 6.2

Description

Les données d'authentification, dont le numéro de téléphone, le cookie de session, l'UDID et les jetons, sont stockées en clair dans les données locales de l'application : LevelDB sur macOS, un fichier de données sur Windows. Sur Windows, la clé AES-CBC est elle-même stockée en clair à côté des données chiffrées. La protection devient inopérante : toute personne pouvant lire ces fichiers peut les déchiffrer.

Impact

Un attaquant capable de lire les fichiers locaux peut accéder aux données d'authentification, notamment à un jeton de session actif. Cela peut concerner un appareil perdu ou volé sans chiffrement intégral du disque, des sauvegardes non chiffrées sur un stockage partagé, un logiciel malveillant exécuté avec les droits de l'utilisateur ou une extraction forensique. Je n'ai pas testé si ce jeton permet d'usurper la session sans nouvelle authentification : cela dépend des mécanismes de liaison de session côté serveur chez imo.

Détail du score CVSS 3.1

AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N → Score de base 6.2 (moyen)

L'impact sur la confidentialité est élevé, car les données d'authentification sont entièrement exposées en clair. L'intégrité et la disponibilité ne sont pas affectées. La nécessité d'un accès local (AV:Local) maintient le score de base au niveau moyen.

À propos des scores de gravité

Pourquoi ces scores ne sont pas plus élevés Le score de base CVSS dépend du vecteur d'attaque, de l'interaction nécessaire et de l'impact sur la confidentialité, l'intégrité et la disponibilité, pas de l'effet produit par le titre du rapport. Une fuite d'IP relève de C:Low : l'absence de clic ne la fait pas passer au niveau élevé, puisqu'elle modifie l'interaction, pas l'impact. Le stockage en clair nécessite un accès local ; AV:Local le maintient donc au niveau moyen. Ces problèmes sont réels et méritent d'être corrigés, avec une gravité moyenne justifiée. Je préfère publier des scores défendables que les exagérer.

Chronologie de la divulgation


Ce rapport documente une faiblesse de protection des données et de la vie privée à des fins de recherche et de défense. Il ne contient ni logiciel malveillant ni outil d'exploitation prêt à l'emploi, au-delà d'un point de collecte minimal servant à démontrer la fuite.