L'équipe de sécurité de SlowMist a récemment reçu plusieurs signalements de vols de données. Après vérification, il s'est avéré que tous les incidents impliquaient la fuite de clés privées, et certains des utilisateurs concernés avaient téléchargé et utilisé les versions 1.1 et 1.2 de l'application FomoPeek.

Notre analyse conjointe avec l'équipe de sécurité OKX a confirmé que FomoPeek 1.1 et 1.2 ont implanté deux modules malveillants, apptrace et libapptracecore, qui ont les capacités de configuration à distance, d'exploitation des vulnérabilités du noyau, d'évasion de sandbox, de décryptage du trousseau et de collecte de données inter-applications.

La vérification dynamique a montré que l'application obtient une adresse C2 chiffrée depuis Bitbucket, transmet des informations sur l'appareil et reçoit une configuration à distance via l'API a95f0ed200f.assisaint[.]com. Lors du test, la valeur « exploit_enabled » renvoyée par C2 était fausse. Afin de vérifier la chaîne d'exécution, nous avons activé les options correspondantes après le déchiffrement côté client dans un environnement isolé via Hook. Nous avons ainsi obtenu une liste de 19 portefeuilles et applications de prise de notes, et capturé la requête complète pour l'empaquetage et le chargement du conteneur Apple Notes.

En exploitant la fonction de chiffrement côté client, nous avons déchiffré les requêtes et les réponses de ce canal. La configuration renvoyée par le serveur prouve que des attaquants peuvent lancer l'exploitation à distance, ajuster le cycle d'exécution et contrôler sa répétition périodique via le serveur.

Nous avons procédé à une rétro-ingénierie et à une analyse d'échantillons à partir des fichiers IPA des versions historiques obtenus via les canaux officiels de l'App Store. Les résultats ont montré que la version 1.0 ne contenait pas le module malveillant mentionné ; la version 1.1 (build 105) a été implantée pour la première fois le 9 septembre 2026 ; la version 1.2 (build 110) a été publiée le 12 septembre et utilisait le même code ; et la version 1.3 (build 111) a supprimé intégralement les deux frameworks le 17 septembre. Par conséquent, les versions de l'application affectées sont clairement les versions 1.1 et 1.2, et le module malveillant a été distribué via les versions officielles de l'App Store, et non par le biais d'une re-signature tierce ou d'un chargement latéral.

Le framework déclare une couverture de version système au niveau du code comme étant iOS 12.0–18.7.2 et iOS 26.0–26.1, indiquant que ses cibles d'attaque ne se limitent pas aux systèmes de version inférieure ou aux anciens appareils.

Réponse de MistEye

MistEye est un système de veille sur les menaces et de surveillance dynamique de la sécurité Web3 développé indépendamment par SlowMist. Il intègre des fonctionnalités de surveillance de la sécurité et d'agrégation de renseignements afin de fournir aux utilisateurs des alertes de risques en temps réel et une protection des actifs.

MistEye a immédiatement synchronisé les informations sur les risques avec le canal d'alerte du client via des notifications push intelligentes.

I. Contexte

1.1 Du retour d'information de l'utilisateur au traçage d'échantillons

Certains utilisateurs dont les données ont été volées avaient installé et utilisé FomoPeek avant l'incident. Afin de vérifier le lien entre ce vol et la fuite de clés privées, nous avons obtenu les fichiers IPA des versions précédentes de l'application auprès des plateformes officielles de l'App Store et avons procédé à une analyse détaillée, version par version, de la structure du package, des dépendances de chargement, de l'attribution de la signature et du contenu binaire.

1.2 Une application qui semble parfaitement légitime

D'après les informations publiques disponibles, FomoPeek possède toutes les fonctionnalités qu'un projet normal devrait avoir :

L'application est référencée normalement sur l'App Store, possède un site web officiel et des comptes sur les réseaux sociaux, et se présente comme un « outil de surveillance et d'alerte en lecture seule sur la blockchain », sans connexion à des portefeuilles ni obligation de mémoriser des mots clés. De ce fait, il est difficile, tant pour le comité d'évaluation que pour l'utilisateur, de l'associer à l'exploitation d'une vulnérabilité du noyau en se basant uniquement sur son apparence.

1.3 Voie de diffusion : Code d’invitation du KOL et conservation de l’appareil réel pendant 5 à 7 minutes

Les informations promotionnelles publiques montrent que FomoPeek se diffuse principalement via les influenceurs crypto et les communautés associées. Les utilisateurs doivent télécharger l'application sur l'App Store, s'y inscrire à l'aide d'un code d'invitation, définir un code de sécurité, ajouter un portefeuille de surveillance et l'utiliser sur un appareil physique pendant quelques minutes. Après vérification, ils peuvent recevoir entre 5 et 7 USDT. Certains contenus promotionnels insistent également sur le fait que « chaque iPhone ne donne droit qu'à une seule chance », que « plusieurs comptes sur le même appareil sont invalides » et qu'il « faut utiliser un appareil physique et y rester connecté pendant 5 à 7 minutes ».

Cette exigence est digne d'intérêt. L'échantillon intègre une stratégie d'exploitation appelée CicutaVirosaStrategy, dont l'exploit public, cicuta_virosa, nécessite plus de deux minutes d'exécution par cycle. Par conséquent, la règle de promotion « appareil physique requis (les téléphones cloud sont invalides) et exécution nécessaire pendant plusieurs minutes » correspond aux caractéristiques techniques d'une chaîne d'exploitation du noyau exigeant un fonctionnement continu sur un appareil physique pendant une certaine durée. Cependant, cette règle de promotion ne constitue qu'un indice complémentaire et ne peut à elle seule déterminer l'intention malveillante de l'exploit.

À la mi-septembre, des avertissements d'utilisateurs sont apparus sur les réseaux sociaux. Le 16 septembre 2026 à 17h11 UTC, l'utilisateur Jin Hui (@GXingPing) a signalé que son logiciel FomoPeek avait été volé après son téléchargement et a conseillé aux utilisateurs de le désinstaller au plus vite.

https://x.com/GXingPing/status/2100271397989998628

Avant même que les utilisateurs ne commencent à signaler le vol de leurs données, la possibilité d'extraire des données iOS liées à de tels incidents avait déjà fait l'objet d'avertissements publics. Le 25 mars 2026, le responsable de la sécurité informatique de SlowMist, @im23pds, a publié une alerte de sécurité : l'outil d'attaque DarkSword avait fuité et pouvait extraire et transmettre des données sensibles depuis des appareils iOS via des interfaces HTTP. Les attaquants pouvaient également combiner cette technique avec des attaques d'ingénierie sociale ou des attaques par point d'eau pour attirer leurs victimes vers des sites web ou des pages contenant un code malveillant, afin de voler des données sur les iPhones et iPads et de les transférer vers des serveurs contrôlés par les attaquants.

https://x.com/im23pds/status/2036624111968100402

1.4 Anomalies dans le sujet et la chronologie

Les informations publiques montrent que le vendeur enregistré auprès d'Apple est Porter Manufacturing, L.L.C., et que le développeur est répertorié sous le nom de WhaleScanv, avec une seule application, FomoPeek, actuellement répertoriée sous ce nom.

Les informations publiques disponibles étant insuffisantes pour confirmer l'identité de l'entité qui se cache derrière ce vendeur, cet article ne précisera pas son identité ni ses liens avec des entreprises portant le même nom. Toutefois, au vu du calendrier d'enregistrement du domaine, des politiques de confidentialité, du lancement de l'application et de l'implantation du module malveillant, l'identité web et l'infrastructure de distribution concernées ont été mises en place en un laps de temps relativement court.

La chronologie suivante mérite attention :

Chronologie des événements FomoPeek

De l'enregistrement du nom de domaine au lancement de l'application, il n'a fallu qu'une dizaine de jours, et la politique de confidentialité est entrée en vigueur deux jours avant l'enregistrement du nom de domaine. L'ensemble de la chaîne de distribution et d'identité web a été mis en place de manière intensive entre fin août et début septembre.

1.5 Conflit entre le label de confidentialité et sa propre politique de confidentialité

La page de l'App Store affiche « Aucune donnée collectée » dans la section « Confidentialité de l'application », mais la politique de confidentialité du site Web officiel de FomoPeek liste clairement les types de données qu'elle traite, notamment : X-Device-Id (identifiant de l'appareil), jetons de notification push APNs, adresses e-mail, mots de passe (hachages bcrypt), pseudonymes, codes d'authentification à deux facteurs (hachages bcrypt), ainsi que les adresses de portefeuilles publics, les étiquettes, les seuils et les préférences d'événements ajoutés par les utilisateurs.

Même sans tenir compte des failles de sécurité du noyau, les « données non collectées » signalées à Apple contredisent le périmètre de la collecte de données défini dans sa politique de confidentialité.

II. Chronologie des versions et étendue de l'empoisonnement

Nous avons trouvé deux frameworks sans rapport avec les fonctionnalités métier dans les packages 1.1 et 1.2 :

Répertoire Frameworks dans le package 1.1 / 1.2
Chronologie des versions et modifications des modules

La comparaison des versions montre que les versions 1.1 et 1.2 contiennent le même module malveillant, avec des segments de code et de données identiques ; la version 1.3 supprime entièrement les deux frameworks, réduisant la taille de l'IPA de 10,47 Mo à 1,81 Mo.

Le programme principal et les deux frameworks utilisent le même organisme de signature Apple, et le fichier IPA d'origine conserve également des métadonnées chiffrées FairPlay, indiquant que le module malveillant appartient au contenu du package officiel soumis par le développeur à l'App Store, plutôt qu'à un produit tiers resigné ou installé manuellement.

III. Analyse des modules malveillants

3.1 Deux cadres indépendants des entreprises

Les deux modules ont une répartition claire des tâches : apptrace est responsable de la communication C2, tandis que libapptracecore est responsable des attaques du noyau et de la collecte de données.

La distribution des espaces de noms de libapptracecore illustre sa nature : il ne s’agit pas d’un composant d’instrumentation, de statistiques ou d’anti-débogage, mais d’une chaîne d’outils complète allant de l’exploitation à l’accès au noyau, en passant par les permissions, le sandboxing, le trousseau et l’acquisition. apptrace gère toutes les communications avec le terminal de contrôle externe, et les deux forment ensemble un implant « communication + attaque ».

3.2 Se charge au démarrage ; le programme principal ne contient aucune trace d'appel.

La commande de chargement Mach-O du programme principal fait référence à deux frameworks avec LC_LOAD_DYLIB (non-faible) :

@rpath/apptrace.framework/apptrace

@rpath/libapptracecore.framework/libapptracecore

Cela signifie que, que la logique métier l'appelle ou non, les deux seront chargés dans le même processus par dyld au démarrage de l'application.

En revanche, le programme principal ne contient effectivement aucune trace d'appel explicite : les 1 048 symboles importés dans la table des symboles proviennent tous des bibliothèques système, et les références aux classes Objective-C ne contiennent que des classes système. Hormis les deux chemins de chargement mentionnés précédemment, aucun nom de classe ni de méthode du framework n'a été trouvé. Le framework lui-même ne possède pas les fonctions `+load` ou `+initialize` d'Objective-C. Un traçage d'appels à trois niveaux des 34 fonctions d'initialisation statiques C++ (`__mod_init_func`) n'a pas non plus permis d'atteindre le code d'exploitation et de collecte.

Par conséquent, au niveau statique, il est possible de confirmer que le module est chargé de force dans le processus au démarrage de l'application et que le code de fonctionnalité est complet ; le moment réel du déclenchement et les preuves d'exécution doivent être vérifiés dynamiquement sur un appareil réel.

3.3 Cadre d'attaque du noyau : 8 schémas d'exploitation et correspondance automatique des versions

libapptracecore implémente 8 classes de stratégie d'exploitation, qui héritent toutes de exploit::IExploitStrategy / KernelMachTaskExploitStrategyBase, et chaque stratégie possède une détermination intégrée de « si le périphérique actuel est pris en charge » :

Les chaînes de décision de support pour chaque stratégie d'exploitation sont visibles dans IDA.

Les huit fenêtres de version de stratégie sont liées de bout en bout, avec des déclarations de code couvrant iOS 12.0–18.7.2 et iOS 26.0–26.1. Le cadre déterminera la disponibilité d'une stratégie en fonction de la version du système et du modèle d'appareil, et distinguera trois résultats : exploitation réussie, exploitation échouée et appareil non pris en charge.

La liste des appareils intégrés comprend également des modèles de 2023 à 2025 tels que l'iPhone 16, 1/16, 2, l'iPhone 17, 1–17, 5, l'iPad 15, 3–15, 6 et l'iPad 16, 1–16, 6, ce qui indique que les appareils cibles ne sont pas des appareils anciens.

Zones de couverture iOS de 8 méthodes d'utilisation

3.4 Lecture/écriture du noyau et élévation de privilèges

  • Ports de tâches du noyau : Création d'un port tfp0 sécurisé, test du nouveau port tfp0, Port tfp0 mis à jour !, échec de l'allocation du nouveau port tfp0

  • 内核读写原语:kread (found kread_sem_index / error on kread)、kwrite、mach_vm_read_overwrite / mach_vm_write / mach_vm_allocate

  • Interfaces utilisées : IOSurfaceRootUserClient, IOSurfaceClient, IOSccelCommandQueue2, IOSccelSharedUserClient2

  • Contournement de la protection : correctif HSP4 présent. Correctif HSP4 appliqué. (Contournement PPL)

  • Les décalages structurels proviennent de la table statique kernel::OffsetProvider iOS12 / 13 / 14 / 15 / 15_2, ainsi que de la branche de calcul des décalages d'exécution pour iOS 16 et versions ultérieures (avec une gestion dédiée pour les versions 16, 18 et 26 en interne).

  • Autorisations : permissions::KernelUcredStealer, permissions::RORestrictedUcredPatcher, permissions::RO2RestrictedUcredPatcher (également connu sous le nom de WeirdCsTrick / WeirdCredTrick)

3.5 Évasion du bac à sable et décryptage du trousseau

La gestion du sandbox est assurée par permissions::SandboxExtPatcher, la chaîne d'autorisation cible étant com.apple.app-sandbox.read-write. Une fois le sandbox compromis, le processus peut accéder à des chemins situés en dehors du conteneur de l'application.

La partie contenant le porte-clés est la partie la plus directement dangereuse de tout le système.

  • Interaction avec le service système : initialisation du client AppleKeyStore (Client AppleKeyStore initialisé, Échec du démarrage du client AppleKeyStore sur l'appareil avec l'erreur ...), keyBag, pkcs8ShroudedKeyBag

  • Analyse de la base de données : Keychain::KeychainV3, KeychainV9, KeychainV11, correspondant à différents formats de base de données de trousseaux pour les versions iOS.

  • Structures de sérialisation : SecDbKeychainSerializedAKSWrappedKey, SecDbKeychainSerializedItemV7, SecDbKeychainSerializedMetadata, SecDbKeychainSerializedSecretData

  • Décryptage et sortie : keychain::GetRawKeychain, parsing::DecryptSFA, keychain::AgentKeyUnwrapper, acquisition::server::RawKeychainDecryptDataWriter

3.6 Rapport chiffré de boîte aux lettres Bitbucket morte du canal C2

Après avoir exécuté la version affectée sur un appareil isolé (déguisé en iPhone 16 / iOS 26.1), nous avons capturé deux requêtes qui n'avaient absolument rien à voir avec notre activité et avons entièrement déchiffré leur contenu.

① Boîte aux lettres morte : Récupère une liste chiffrée d'adresses C2 à partir d'un site d'hébergement de code public.

Processus de résolution en temps réel des boîtes aux lettres et adresses C2 inactives de Bitbucket

GET hxxps://bitbucket[.]org/discordseven/text/raw/main/xxhVOn

Ce dépôt (bitbucket[.]org/discordseven/text) est public. Les fichiers README et .gitignore sont des modèles Bitbucket par défaut et ne servent qu'à des fins de présentation. Le dépôt a été créé le 4 août 2026 et l'adresse e-mail de l'auteur est discdseven@outlook.com. Le fichier xxhVOn contient une liste chiffrée d'adresses C2.

  • Le fichier contient 48 octets de texte chiffré AES-CBC.

  • Après le démarrage, le client déchiffre les données à l'aide de la clé intégrée, obtenant une liste d'adresses C2 : ["hxxps://api-a95f0ed200f.assisaint[.]com"].

  • Le fichier a été modifié trois fois dans l'historique : 2026-08-04 (64 octets), 2026-08-06 (48 octets) et 2026-09-13 (48 octets, c'est-à-dire le lendemain de la sortie de la version 1.2).

Les attaquants peuvent modifier les adresses C2 de toutes les victimes simplement en éditant ce seul fichier public, sans avoir à publier une nouvelle version de l'application.

② Rapports C2 : Informations chiffrées sur les périphériques et commandes à distance

Structure de la requête et champs clés de l'interface de configuration C2

Le domaine C2 assisaint[.]com a été enregistré le 12 septembre 2026 (le même jour que le lancement de la version 1.2), avec Cloudflare comme registraire, et le serveur d'origine est caché dans la configuration frontale ; un autre sous-domaine du même domaine, bp-a95010ced.assisaint[.]com (un certificat de 90 jours émis par TrustAsia), peut également être vu dans les journaux CT.

③ Résultat du décryptage

Le client utilise CCCrypt de CommonCrypto (alg = kCCAlgorithmAES(0), options = kCCOptionPKCS7Padding(1), c'est-à-dire AES-CBC + PKCS7) pour chiffrer le corps du message. En interceptant cette fonction, nous obtenons la clé de session et déchiffrons le texte clair bidirectionnel.

Résultats du décryptage du canal C2 – Rapports d'informations sur l'appareil et commandes à distance

Après déchiffrement, le corps de la requête `params` contient les informations relatives au périphérique à signaler :

{"app_version":"1.0.5","app_pac":"com.fomopeek.app","app_uuid":"7A5475A0007346BCB6EDB30E43315999","timestamp":1789806193645,"machine":"iPhone 16","ios_version":"26.1"}

Après décryptage, les données de réponse deviennent une commande distante :

{"version":"1.0.0","min_close_exploit_version":"","exploit_enabled":false,"exploit_repeat_enabled":false,"exploit_test":false,"app_log_report_enabled":false,"exploit_repeat_interval":86400}

La vérification dynamique confirme que tous les courriers non distribués et les requêtes C2 sont émis par apptrace (le préfixe de limite multipart est ---AppTraceBoundary), tandis que les politiques d'exploitation, la lecture/écriture du noyau, le déchiffrement du trousseau et les services du port 40000 sont tous situés dans libapptracecore.

Il convient de noter que lors de cette exécution et de la capture de paquets effectuée à 08h23 le 19/09/2026, l'option `exploit_enabled` était désactivée. Cependant, l'existence de cette option et ses paramètres périodiques indiquent que les attaquants peuvent activer l'exploitation, ajuster le cycle d'exécution ou la désactiver de force à tout moment via des réponses côté serveur, sans avoir à mettre à jour l'application. Par ailleurs, le profil déclaré par l'appareil virtuel de test (iPhone 16 / iOS 26.1) correspond précisément à la zone de couverture de DarkSwordStrategy (16.7–18.7.2 et 26.0–26.1) décrite dans la section 3.3.

3.7 Cibles d'acquisition de données à distance : 19 applications de portefeuille et de notes

Pour vérifier ce qui se passe lorsque l'interrupteur est activé, nous avons utilisé Frida pour réécrire exploit_enabled / exploit_repeat_enabled / exploit_test dans la réponse à true dans le rappel de décryptage, puis nous avons observé le comportement du client.

Lorsque le client récupère à nouveau la configuration, en plus de l'état marche/arrêt, il reçoit également une liste de cibles de collecte (« collect_configs ») – ce qui révèle directement l'objectif de cette opération :

`collect_configs` est un résumé de la liste cible, contenant 19 applications.

Les fichiers collect_configs émis par C2 contiennent 19 cibles de collecte, presque toutes des applications de portefeuille, notamment Gate Web3, SafePal, OKX Wallet, MetaMask, Trust Wallet, imToken, TokenPocket, TronLink, etc.

Les vecteurs de collecte de données sont concentrés dans le keystore, SQLite, MMKV, le stockage local de React Native et le groupe d'accès au Trousseau d'accès, et incluent l'intégralité du conteneur Apple Notes group.com.apple.notes. Ces configurations indiquent que l'attaque cible les clés de portefeuille et d'autres informations sensibles enregistrées par l'utilisateur, et que le serveur peut ajuster dynamiquement l'étendue de la collecte.

À ce stade, les capacités d'attaque du module malveillant et les informations de collecte de données ciblées émises par le C2 forment une chaîne de preuves complète.

3.8 Lien de transmission externe : POST /api/upload/zip

Après avoir déclenché la collecte de données, nous avons capturé une requête en plusieurs parties envoyée à /api/upload/zip. Le champ « params » contient des métadonnées de fichier chiffrées en AES-CBC, tandis que le champ « file » contient une archive ZIP non chiffrée.

Les métadonnées déchiffrées indiquent que la cible du téléchargement était group.com.apple.notes, que la taille de l'archive était de 46 092 octets et qu'elle contenait le MD5 du fichier, l'UUID du périphérique, le chemin de destination et l'horodatage. Le fichier ZIP restauré contient NoteStore.sqlite, des fichiers WAL et les fichiers de configuration associés, conformément à la structure des conteneurs Apple Notes.

Cela confirme que l'échantillon lit le conteneur cible conformément à la liste émise par C2, empaquete les résultats et les stocke temporairement dans son propre bac à sable, puis les télécharge sur /api/upload/zip.

La structure de champ multipart de la requête POST /api/upload/zip

Nous avons reconstitué l'archive elle-même à partir de ce message ; le contenu de l'archive est le conteneur Apple Notes.

group.com.apple.notes/NoteStore.sqlite                                  307 200

group.com.apple.notes/NoteStore.sqlite-shm                               32 768

group.com.apple.notes/.com.apple.mobile_container_manager.metadata.plist    577

group.com.apple.notes/Library/Preferences/group.com.apple.notes.plist      127

group.com.apple.notes/NoteStore.sqlite-wal / com.apple.notes.databaseopen.lock

À ce stade, nous avons vérifié la lecture du conteneur cible, l'empaquetage des fichiers et le processus de chargement des données dans l'environnement de test isolé. En combinant l'exploitation du noyau, l'élévation de privilèges et le code d'évasion du bac à sable au sein du framework, nous pouvons reconstituer sa chaîne de conception : distribution de la configuration à distance → exploitation du noyau et élévation de privilèges → collecte des données cibles → empaquetage et chargement.

3.9 Autres points de terminaison C2 : Inventaire des applications et postback d’exécution

En plus de configurer les points de terminaison pour la distribution et la transmission des données, nous avons également identifié deux points de terminaison de support qui constituent ensemble un protocole C2 complet de « reconnaissance → émission de commandes → collecte de données → transmission de données ».

① /api/device/apps : Afficher la liste des applications installées

Points saillants de la requête d'inventaire des applications POST /api/device/apps

La section `params` de cette requête, après avoir été déchiffrée à l'aide de la même clé/IV, contient une liste d'identifiants de groupe pour les 135 applications présentes sur l'appareil.

{"app_uuid":"7A5475A0007346BCB6EDB30E43315999",


"apps" : ["com.apple.Home.HomeControlService","com.apple.CarCamera","com.debank.rabby-mobile-regression","com.apple.ScreenSharingViewService","com.okx.wallet", … 135 éléments …]}

L'objectif de cette liste est simple : le serveur l'utilise pour déterminer quels portefeuilles sont installés sur l'appareil, puis décide quels `collect_configs` envoyer.

② /api/device/report : Retour d’information sur le résultat de l’exécution et instructions suivantes

Résultats de la requête POST /api/device/report et commandes suivantes

③ Résumé des critères d'évaluation C2 confirmés

3.10 Caractéristiques de l'enregistrement et du déploiement du domaine C2

Les conclusions de l'étude d'infrastructure du domaine C2 lui-même sont les suivantes :

Le nom de domaine a été enregistré récemment et utilise des mécanismes de protection de la vie privée pour les informations d'enregistrement, un proxy inverse Cloudflare et un déploiement rapide du certificat, caractéristiques communes des infrastructures d'attaques éphémères. La date d'enregistrement du domaine coïncide avec la date de lancement de FomoPeek 1.2, ce qui peut fournir un indice temporel ; toutefois, les informations publiques disponibles sont insuffisantes pour déterminer l'emplacement du site d'origine ou l'affiliation de l'attaquant.

En consultant l'infrastructure publique de ce nom de domaine, on constate que l'un des sous-domaines héberge une interface de gestion appelée Collect, dont les routes frontales affichent des entrées relatives aux appareils, aux applications et aux clés (/machineApp, /machineApp/needBlast, /machineApp/walletAddress, /machineAppKeys, /machineStat, /mnemonic, /partner/account, /partner/home, /partner/machine/detail, etc.) :

Collect gère les routes frontales

Cela indique que le nom de domaine ne comporte pas une API métier classique, mais plutôt une interface côté opérations associée à la collecte de données sur les appareils et aux données clés ; ses fonctions et champs spécifiques ne seront pas détaillés dans cet article.

IV. Analyse de la chaîne d'attaque

Chaîne d'attaque complète FomoPeek
  1. Chargement des modules : au démarrage de l’application, apptrace et libapptracecore sont chargés de force ;

  2. Obtenir C2 : Récupérez le texte chiffré depuis Bitbucket et déchiffrez-le pour obtenir l’adresse C2 ;

  3. Reconnaissance des équipements : Rapport sur les équipements et liste des applications installées ;

  4. Distribution de la configuration : Obtenir le commutateur d’exploitation de la vulnérabilité, le cycle d’exécution et les cibles de collecte de données ;

  5. Exploitation et élévation de privilèges : sélectionnez une stratégie d’exploitation du noyau appropriée pour obtenir des capacités de lecture non autorisées et contourner le bac à sable ;

  6. Collecte et transmission des données : lire les données et le trousseau de l’application cible, les empaqueter et les télécharger sur /api/upload/zip.

V. Analyse de la chaîne MistTrack

Le suivi et l'analyse des données collectées sur la blockchain ont révélé que les attaquants ont dérobé des fonds sur plusieurs chaînes (TRON, Ethereum et d'autres chaînes compatibles avec l'EVM). Cette section analyse uniquement l'adresse principale du pirate (0x6d37f2C5e8F8546b648D317295565dA95975f4BB).

Selon les données de MistTrack, l'adresse a accumulé un total de 579 984,34 USDT et est active depuis le 15 septembre.

Ses activités financières couvrent plusieurs blockchains, dont Ethereum, BNB Chain et Arbitrum, et les fonds continuent d'affluer à l'heure actuelle. Les soldes actuels sont les suivants :

La plupart des fonds présents à cette adresse sont agrégés sur le réseau Ethereum, tandis que les fonds restants sur la chaîne sont principalement convertis en USDT via des plateformes d'échange inter-chaînes telles que OKX DEX, Meson.fi, Relay.link et Mayan Finance avant d'être transférés vers Ethereum.

Par la suite, l'adresse a transféré les USDT collectés par lots vers les adresses en aval suivantes :


(1) 0x0A571f0Fa18D7EB9abcc1e98a0Bb9bC15534BbAe

L'adresse présente actuellement un solde de 24 352 USDT. Il est à noter que cette adresse était déjà active le 23 mai, soit avant la période principale d'attaque liée à cet incident.

Il interagit avec FixedFloat, cce.cash, OKX, etc.

De plus, une somme importante de 111 458 USDT a été transférée vers l'adresse 0x4c73d7e8ef0e61129403e219debc597fd43aa0ec puis transférée dans USDT0 : UsdtOFT pour un traitement inter-chaînes.

L'adresse de réception de la transaction croisée était l'adresse TRON TF2hm96RC2Aqon9FeQjGidofoC2J1zM8v1. Cette adresse a reçu un total de 2 123 570,8821 USDT, qui ont ensuite été distribués via plusieurs adresses et transférés vers ce qui semble être une plateforme de gré à gré.

(2) 0x0DF6aC2e2856114228756947d1b1d9Ff63eA3e68

Cette adresse a reçu un total de 159 000 USDT :

Tous les fonds seront transférés à FixedFloat :

(3) 0x2d53113c89c83c520c17b8bbcdc22aa0518a38be

Cette adresse a reçu un total de 47 028 USDT.

Sur ce total, 10 000 USDT ont été transférés à KuCoin et les 37 028 USDT restants à FixedFloat.


(4) 0x111faeb95cd0786593433bcc762dc5c1debf541c

Cette adresse a reçu un total de 227 154 USDT.

215 000 USDT transférés sur FixedFloat, 10 000 USDT transférés sur cce.cash :

Les 2 154 USDT restants ont été échangés contre 6 432,54 TRX via Bridgers Swap et transférés vers l'adresse TRON TUi5qPcjDuqbmwfunMbzwkpLNhaqRpqcJg. La majeure partie des TRX a ensuite été convertie en FixedFloat. Il est à noter qu'une part importante des fonds présents à l'adresse TUi5q provenait de cce.cash.

Nous continuerons de surveiller l'activité des fonds associés aux adresses mentionnées ci-dessus. Si vous avez déjà installé FomoPeek et avez récemment été victime d'un vol de fonds, vous pouvez soumettre l'adresse volée et celle du pirate via le lien suivant : https://aml.slowmist.com/cn/recovery-funds.html.

VI. Indicateurs de menace (IOC)

URL :

hxxps://api-a95f0ed200f.assisaint.com/api/device/config

hxxps://bp-a95010ced.assisaint.com

hxxps://admin-e433360cb0e.assisaint.com

hxxps://customer-c1cb36b5.assisaint.com

hxxps://bitbucket.org/discordseven/text/raw/main/xxhVOn

Domaine:

assistant[.]com

api-a95f0ed200f[.]assisaint.com

bp-a95010ced[.]assisaint.com

admin-e433360cb0e[.]assisaint.com

client-c1cb36b5[.]assisaint.com

Déposer:

FomoPeek-1.1-891048157.ipa

MD5 : fce99b45709a6f8e241175be0c121874

SHA-256 : d6b6407b4c97697fdde174cbc190b6433315470f58df6b483ac5b806f35e20f9

FomoPeek-1.1.ipa

MD5 : f5bdaed5953033ac8c3256f2933b9a81

SHA-256 : ca5dfd0fa7a16f26f5b369516f5b8bcac1d5a6fe01a8511a5ededf4cd2c0d042

FomoPeek-1.2.ipa

MD5 : 38a8a5ddecd9a5626b42dae593ac28f6

SHA-256 : 48f9d5623af1518e774d57c41e6e0b915a7e9f896909bf596a9b27de5022911e

apptrace

MD5 : 645b9053390246995c2cb7a9b9eddf40

SHA-256 : 764663ff5c8bd1bdf33bbd1ec352ce262a4fe79695456f2612dc27c35840ab9d

libapptracecore

MD5 : 03d67a68b5e8507dbbe36f2a4b41aca0

SHA-256 : f0b3be01e8597f7f35ca36c009f68e7004527fe4a01d4349a01e211ca16de1e2

VII. Recommandations relatives à l'enquête et au traitement

7.1 Côté utilisateur

Si votre appareil possède FomoPeek version 1.1 ou 1.2, veuillez noter : la désinstallation ou la mise à jour vers la version 1.3 ne garantit pas la sécurité de l’appareil. Une fois la faille exploitée, les données lues ont déjà quitté l’appareil.

1. Cessez immédiatement d'utiliser l'application et ne la réinstallez pas ;

2. Créez un nouveau portefeuille, générez une nouvelle phrase mnémonique et transférez les actifs sur un appareil sécurisé sur lequel l'application n'a pas été installée auparavant ; les anciennes phrases mnémoniques et clés privées sont considérées comme ayant été divulguées et leur réutilisation est interdite.

3. Examiner les enregistrements de transfert et d'autorisation anormaux pour chaque compte de la chaîne un par un, et révoquer les autorisations qui ne sont plus utilisées ;

4. Modifiez le mot de passe et les identifiants de connexion utilisés sur cet appareil et activez l'authentification à deux facteurs ;

5. Vérifiez si l'appareil possède un profil de configuration/MDM installé, ou s'il a été installé manuellement ou jailbreaké ; si nécessaire, effacez l'appareil et réinstallez le système.

6. Conservez l’appareil et les preuves pertinentes (version de l’application, date d’installation, enregistrements de transactions anormales) pour une vérification ultérieure ;

7. Si vous constatez une activité inhabituelle sur un actif, veuillez contacter immédiatement le service client officiel de la plateforme concernée.

7.2 Plateforme et écosystème

1. Incorporer les hachages de fichiers, les noms de classes, les chaînes clés et les caractéristiques du réseau dans la bibliothèque d'exemples, l'EDR et les règles de détection du trafic ;

2. Émettre des avertissements de risque ciblés aux utilisateurs qui ont installé FomoPeek 1.1 ou 1.2 et traiter la question comme un incident de violation d'identifiants ;

3. Bloquez assistant[.]com et ses sous-domaines, bitbucket[.]org/discordseven/*;

4. À compter du 9 septembre 2026, récupérer les enregistrements d'accès à la boîte aux lettres Bitbucket inactive. À compter du 12 septembre, récupérer les journaux DNS, proxy, EDR, VPN et des appareils mobiles liés à *.assisaint[.]com. Si la période de conservation des journaux le permet, remonter jusqu'au 4 août pour examiner les accès à ce dépôt Bitbucket et les configurations C2 historiques.

VIII. Résumé

Grâce à une analyse statique et une vérification dynamique, nous avons confirmé que FomoPeek 1.1 et 1.2 ont implanté deux modules malveillants, `apptrace` et `libapptracecore`, qui ont les capacités de configuration à distance, d'exploitation de vulnérabilités du noyau, d'évasion de sandbox, de décryptage de trousseau et de collecte de données inter-applications.

Après avoir déclenché les fonctions pertinentes dans l'environnement isolé, l'échantillon a obtenu une liste de 19 portefeuilles et applications de prise de notes depuis C2, et a téléchargé le conteneur Apple Notes sur `/api/upload/zip`, vérifiant ainsi la chaîne technique complète depuis la configuration à distance, la lecture non autorisée jusqu'à la transmission des données.

Le module mentionné ci-dessus n'était pas présent dans FomoPeek 1.0, a été implémenté pour la première fois dans la version 1.1, a continué d'être utilisé dans la version 1.2, puis a été complètement supprimé dans la version 1.3. Pour les utilisateurs des versions 1.1 ou 1.2, la simple désinstallation ou mise à jour de l'application ne permet pas d'éliminer le risque de fuite de données historiques. Il est recommandé de considérer les phrases mnémoniques, les clés privées et les identifiants sensibles associés comme ayant potentiellement été divulgués.

Foire aux questions (Q&R)

Q1 : Quand cet incident s'est-il produit ?

La période à risque actuellement confirmée s'étend du 9 au 17 septembre 2026.

FomoPeek 1.0 a été initialement publié le 29 août, et aucun module malveillant n'y avait été détecté. La version 1.1, sortie le 9 septembre, a introduit apptrace et libapptracecore, et la version 1.2, publiée le 12 septembre, a continué à contenir le même code malveillant. Ce n'est qu'avec la version 1.3, sortie le 17 septembre, que ces deux frameworks ont été complètement supprimés.

Le 16 septembre, des avertissements sont apparus sur les réseaux sociaux concernant des vols de données survenus après l'installation de FomoPeek. Comme les dates exactes d'installation et de vol ne sont pas disponibles pour toutes les victimes, il est actuellement impossible de déterminer la date précise de la première attaque.

Q2 : Quelles versions sont concernées ?

À en juger par les versions de l'application, FomoPeek 1.1 et 1.2 sont clairement concernées.

  • 1.0 : Aucun module malveillant détecté ;

  • 1.1 : Implantation initiale d'un module malveillant ;

  • 1.2 : Continuer à transporter le même ensemble de modules malveillants ;

  • 1.3 : Le cadre concerné a été entièrement supprimé.

À en juger par la couverture iOS déclarée dans le code du framework d'attaque, celui-ci dispose de 8 stratégies d'exploitation intégrées, couvrant iOS 12.0–18.7.2 et iOS 26.0–26.1, et sélectionnera la stratégie d'exploitation correspondante en fonction du modèle de l'appareil et de la version du système.

Il est important de noter que FomoPeek indique iOS 16.0 ou une version ultérieure comme configuration système requise sur sa page App Store. Par conséquent, la « couverture théorique du framework d'attaque » et la « gamme réelle d'appareils sur lesquels FomoPeek peut être installé via l'App Store » ne sont pas exactement les mêmes concepts.

Q3 : Par quels moyens une attaque pourrait-elle se produire ?

Dans cet incident FomoPeek, le point d'entrée confirmé pour la propagation est la version officielle de l'App Store elle-même, et non les packages d'installation tiers resignés, signés par une entreprise ou installés manuellement. Le framework malveillant utilise la même entité de signature Apple que le programme principal, et le fichier IPA d'origine conserve également des métadonnées chiffrées FairPlay.

FomoPeek attire principalement les utilisateurs à installer l'application via des influenceurs crypto, des communautés, des codes de parrainage et de petites récompenses en USDT, tout en exigeant que les utilisateurs l'exécutent sur un appareil réel pendant plusieurs minutes.

Toutefois, du point de vue des techniques d'attaque elles-mêmes, ce type d'exploitation du noyau iOS ne se limite pas nécessairement à une seule application. Théoriquement, des capacités similaires peuvent également être exploitées via des applications malveillantes ou compromises, des composants de la chaîne d'approvisionnement, des pages d'hameçonnage, des sites web compromis et des pages de type « point d'eau » ciblant des groupes de personnes spécifiques.

Les avertissements publics mentionnés précédemment concernant DarkSword soulignaient également que les attaquants pouvaient combiner l'ingénierie sociale ou les attaques par point d'eau pour attirer les cibles vers des sites Web ou des pages contenant un code malveillant implanté, volant ainsi des données supplémentaires sur les iPhones et les iPads.

Par conséquent, ne présumez pas que les applications « provenant de l’App Store » ou « d’un site Web que vous consultez fréquemment » sont absolument sûres.

Q4 : Qu'est-ce qu'une « attaque de point d'eau » ?

L'idée derrière une « attaque par point d'eau » n'est pas de trouver directement chaque victime, mais de repérer d'abord les lieux que le groupe cible fréquente et auxquels il fait confiance.

Par exemple, si un attaquant souhaite cibler un groupe de professionnels des cryptomonnaies, il peut commencer par analyser les sites web du secteur, les sites d'outils, les communautés, les sites web de projets ou les pages d'événements que ces personnes consultent fréquemment, puis rechercher parmi eux des cibles susceptibles d'être compromises ou dans lesquelles un code malveillant peut être implanté.

Une fois ces sites web légitimes compromis, les victimes peuvent facilement tomber dans la chaîne d'attaques simplement en y accédant comme d'habitude.

Ce nom provient du « point d'eau » dans la nature : les prédateurs n'ont pas besoin de poursuivre chaque proie, mais seulement d'attendre à l'endroit où l'animal vient souvent s'abreuver.

Pour les appareils mobiles, cette « flaque » peut également être comprise comme un point d'entrée de confiance plus large : il peut s'agir d'un site web familier, d'une application utilisée depuis longtemps, d'un SDK tiers, d'un lien communautaire ou même d'une mise à jour normale d'une application.

Q5 : Des risques similaires existent-ils uniquement dans FomoPeek ?

Non.

Ce qui est plus remarquable avec FomoPeek, ce n'est pas seulement de savoir si un utilisateur de portefeuille particulier a installé l'application, mais aussi que cela démontre une fois de plus que des points d'entrée d'attaque peuvent être cachés dans des applications apparemment normales, même celles provenant des boutiques d'applications officielles.

Parmi les cas rendus publics, ComeCome (拜托拜托) constitue un exemple notable. L'analyse publique révèle qu'il s'agit d'une application de livraison de repas ciblant les utilisateurs chinois à Dubaï et dans d'autres régions. Sa version 2.9.3 contenait un composant caché, DKStatistics, capable de contourner le sandbox iOS et d'accéder aux données d'applications de portefeuille, de WhatsApp et de Notes d'Apple. La page publique divulgue également les flux financiers associés sur la blockchain. Il convient de noter que le site web établit une distinction claire entre « technologie vérifiable publiquement et faits sur la blockchain » et « impossibilité d'attribuer directement l'attaque à un attaquant ».

Ces cas servent de rappel :

Un « point d'eau » ne ressemble pas forcément à un site web dangereux. Il peut s'agir d'un site que vous consultez quotidiennement, d'un outil, d'une application de livraison de repas, d'un lien communautaire, ou même d'un logiciel téléchargé depuis une boutique officielle.

Traditionnellement, FomoPeek et ComeCome se rapprochent davantage des attaques de logiciels malveillants basées sur des applications ou des canaux de confiance que des attaques classiques de type « point d'eau » sur le Web ; cependant, leurs stratégies d'attaque sous-jacentes sont très similaires : elles pénètrent d'abord dans les points d'entrée de confiance et fréquemment utilisés du groupe cible, puis attendent que la cible entre activement dans l'environnement d'attaque.

Par conséquent, il ne s'agit pas seulement d'un seul phénomène de FomoPeek dont il faut se méfier. Des sources de polémique peuvent exister partout où un groupe cible a longtemps accordé sa confiance.

Les études de cas publiques de ComeCome sont disponibles à l'adresse suivante : https://comecome.icu/

À propos de MistEye

MistEye est une plateforme de veille sur les menaces Web3 et de surveillance dynamique de la sécurité développée indépendamment par SlowMist. Elle offre des fonctionnalités de détection des activités malveillantes et d'alerte aux risques liés à la chaîne d'approvisionnement, grâce à l'écosystème des logiciels libres et via une API.

Tous les paquets malveillants et indicateurs de compromission (IOC) impliqués dans cette opération ont été intégrés au moteur de détection des menaces MistEye. Les développeurs peuvent utiliser l'API pour détecter automatiquement les dépendances de leurs projets, déterminer rapidement si elles contiennent des paquets malveillants connus et obtenir des suggestions de gestion.

📖 Documentation de l'API : https://app.misteye.io/api-docs

🛠️ MistEye-DepScan : https://github.com/slowmist/MistEye-DepScan Cet outil CLI léger analyse les dépendances d'un projet et les paquets installés globalement afin de détecter les paquets malveillants connus, en une seule commande. Il est compatible avec l'écosystème npm, PyPI, Cargo, Go et RubyGems.

🛠️ MistEye-Skills : https://github.com/slowmist/misteye-skillsAI Un package de compétences de sécurité d’assistant de codage qui déclenche automatiquement les contrôles de sécurité MistEye avant l’installation des dépendances et l’accès à l’URL.

🛠️ MistEye-DNS-Guard : https://github.com/slowmist/MistEye-DNS-Guard Un outil de sécurité DNS qui détecte les domaines malveillants et les accès risqués, et identifie le phishing, le C2 et d’autres menaces réseau.

Cet article a été rédigé par l'équipe de veille sur les menaces de SlowMist, en collaboration avec le système de veille sur les menaces MistEye et l'analyse basée sur l'IA de l'agent SlowMist. N'hésitez pas à nous contacter pour toute question ou remarque.