Rétro‑ingénierie de Typeless : grave risque pour la vie privée, et on voit enfin combien de données une bonne saisie vocale engloutit

【Avertissement】Après une analyse en rétro-ingénierie de l’application de saisie vocale « Typeless », j’ai constaté des risques de confidentialité assez graves ; je partage donc ces informations.

■ Conclusion d’abord

Typeless affirme « On-device history » et « Zero data retention », mais en réalité toutes les données audio sont envoyées vers des serveurs AWS (Ohio, États-Unis) pour traitement. Il n’y a absolument aucun modèle de reconnaissance vocale en local.

Si ce n’était que cela, ce ne serait qu’un « service STT (Speech-to-Text) cloud » ordinaire. Le problème, c’est que l’étendue des données non audio qu’il collecte est très large.

■ Quelles analyses ont été réalisées

Sur macOS, j’ai effectué une analyse binaire de Typeless v0.9.3, une analyse des communications réseau, une analyse de la base de données locale, ainsi qu’une analyse des chaînes de caractères des bibliothèques natives.

■ Faits confirmés

  1. Traitement audio 100 % cloud
    L’application n’embarque aucun modèle STT comme Whisper. Après compression en Opus, l’audio est envoyé en temps réel vers un serveur AWS us-east-2 via WebSocket (wss://api.typeless.com/ws/rt_voice_flow).

http://api.typeless.comhttp://prod-typeless-lb-565501648.us-east-2.elb.amazonaws.com

La politique de confidentialité officielle indique aussi « processed in real time on our cloud servers » : ce n’est donc pas un mensonge total, mais, sur le plan marketing, l’expression « On-device » se limite à « l’historique est stocké localement », ce qui peut très facilement induire en erreur.

  1. En plus de l’audio, collecte de données très étendue
    Via l’analyse de la base SQLite locale et des bibliothèques natives, j’ai confirmé la collecte des données suivantes :

・ URL complètes des sites consultés (Gmail, Google Docs, etc. sont aussi enregistrés)
・ Nom de l’application au premier plan, titre de la fenêtre
・ Texte affiché à l’écran (fonction collectVisibleTexts qui collecte récursivement via l’API d’accessibilité)
・ Lecture/écriture du presse-papiers (peut traiter le TransientType des gestionnaires de mots de passe)
・ Écoute système des saisies clavier via CGEventTap
・ Informations sur les éléments DOM du navigateur (prise en charge de Safari, Chrome, Edge, Firefox, Brave)
・ Contenu du texte édité par l’utilisateur (TrackEditTextService → sendTrackResultToServer)

  1. La base locale enregistre des informations personnelles en clair
    Dans typeless.db, les textes résultant de la reconnaissance vocale, les URL consultées et les informations d’application sont stockés en clair. Bien qu’ils revendiquent « Zero data retention », tout est conservé localement. Les fichiers audio (.ogg) ne sont pas supprimés non plus et restent présents.

  2. Exigences d’autorisations excessives
    En tant qu’outil de saisie vocale, en plus du micro, l’app demande aussi l’enregistrement d’écran, la caméra, le Bluetooth, les autorisations d’accessibilité, et intègre une fonction de capture d’écran.

  3. Transparence de l’entreprise quasi nulle
    ・ Les conditions et la politique de confidentialité n’indiquent pas le nom de la personne morale
    ・ L’emplacement n’est indiqué que comme « comté de San Francisco, Californie » (juridiction dans les conditions)
    ・ WHOIS masqué (GoDaddy + Cloudflare)
    ・ Aucune information d’audit de sécurité type SOC2, ISO27001, etc.
    ・ Le seul contact est hello@typeless.com

■ Preuves techniques (reproductibles)

Les commandes suivantes permettent de vérifier par vous-même :

# Cible des communications réseau
nslookup http://api.typeless.com

# URL d’API dans app.asar
strings /Applications/Typeless.app/Contents/Resources/app.asar | grep "http://api.typeless.com"

# Protocole de communication WebSocket
strings /Applications/Typeless.app/Contents/Resources/app.asar | grep "rt_voice_flow"

# Bibliothèque native d’écoute clavier
strings /Applications/Typeless.app/Contents/Resources/lib/keyboard-helper/build/libKeyboardHelper.dylib | grep -i "key pressed"

# Collecte du texte à l’écran
strings /Applications/Typeless.app/Contents/Resources/lib/context-helper/build/libContextHelper.dylib | grep -i "collectVisibleTexts"

# Contenu de la base locale
sqlite3 ~/Library/Application\ Support/Typeless/typeless.db ".schema history"

■ Où est le problème

CGEventTap (écoute du clavier) + API d’accessibilité (collecte du texte à l’écran) + accès au presse-papiers. La combinaison de ces trois éléments confère techniquement des capacités équivalentes à un keylogger.

Et vous accordez ces permissions à un service dont l’entité opératrice est inconnue.

Pour améliorer la précision de la saisie vocale, récupérer du contexte (application en cours / informations du champ de saisie) est en soi un choix de conception raisonnable. Mais lorsque ces données sont envoyées vers le cloud, la fiabilité de l’opérateur et son dispositif de sécurité deviennent cruciaux. Peut-on faire confiance à une entreprise qui ne publie même pas le nom de sa personne morale ? À vous d’en juger.

■ Alternatives

Des outils de saisie vocale entièrement locaux existent :

・ Whisper.cpp / MLX Whisper (open source, 100 % local, gratuit)
・ Dictée vocale intégrée à macOS (traitement côté appareil sur Apple Silicon)
・ Superwhisper (basé sur Whisper, pour Mac, mais à vérifier par vous-même)

■ Résumé

・ La reconnaissance vocale de Typeless est traitée à 100 % dans le cloud (aucun modèle local)
・ En plus de l’audio, il dispose des bases techniques pour collecter le texte à l’écran, les URL et la saisie clavier
・ Opérateur non transparent (nom de la personne morale et localisation non divulgués)
・ Aucune preuve d’audit de sécurité

Si vous l’utilisez, jugez par vous-même après avoir compris les risques. Il est au minimum recommandé d’utiliser des outils comme Little Snitch pour surveiller les communications réseau.

Cela rappelle également la direction dans laquelle les développeurs concernés devraient s’efforcer de progresser.

Quand on utilise l’historique du presse-papiers, c’est forcément mieux que de ne pas l’utiliser.