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.
| ID | Constat | CWE | CVSS 3.1 | Gravité |
| F-PREVIEW | Fuite d'IP et de métadonnées sans clic via l'aperçu d'un lien | 200/319 | 4.3 | Moyenne |
| F-STORAGE | Stockage en clair des données d'authentification | 312 | 6.2 | Moyenne |
| F-UA | La 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
- 2025-08-25
Contact de l'éditeur, PageBites, Inc., à privacy@imo.im. Aucune réponse.
- 2026-02
Demande de CVE initialement rejetée par MITRE faute de précisions sur les versions, puis renvoyée avec iOS 2026.1.3 et macOS 2.27.
- 2026-03-01
Signalement à CISA/CERT-CC (VU#138533, VRF#26-03-JXZFJ) et à BSI CERT-Bund.
- 2026-05 → 06
CERT/CC a tenté de joindre l'éditeur, sans réponse. Les constats ont été discutés et n'ont pas été contestés.
- 2026-08-24
CERT/CC a réduit la priorité du dossier et conseillé une publication après environ un an de silence de l'éditeur. Aucun des problèmes n'est corrigé.
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.