После реверс-инжиниринга Typeless обнаружился серьёзный риск для приватности: стало ясно, сколько данных на самом деле «съедает» удобный голосовой ввод

【Предупреждение】После реверс‑анализа приложения для голосового ввода «Typeless» обнаружены довольно серьёзные риски для приватности — делюсь информацией.

■ Сразу вывод

Typeless заявляет «On-device history» и «Zero data retention», но на деле все аудиоданные отправляются на серверы AWS (США, Огайо) для обработки. Локальной модели распознавания речи нет вообще.

Если бы дело было только в этом, это был бы обычный «облачный STT‑сервис». Проблема в том, что объём собираемых неаудиоданных очень широк.

■ Что было проанализировано

На macOS для Typeless v0.9.3 выполнены: бинарный анализ, анализ сетевых коммуникаций, анализ локальной БД, а также анализ строк нативных библиотек.

■ Подтверждённые факты

  1. Обработка аудио на 100% в облаке
    В приложении нет STT‑моделей вроде Whisper. Аудио после сжатия в Opus в реальном времени отправляется через WebSocket (wss://api.typeless.com/ws/rt_voice_flow) на сервер AWS us-east-2.

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

В официальной политике конфиденциальности также написано «processed in real time on our cloud servers», так что это не полностью выдумка, но в маркетинге формулировка «On-device» фактически ограничивается «история хранится локально», что очень легко вводит в заблуждение.

  1. Помимо аудио собираются широкие данные
    По локальной SQLite‑базе и анализу нативных библиотек подтверждён сбор следующих данных:

・ Полные URL просматриваемых сайтов (Gmail, Google Docs и т. п. тоже записываются)
・ Название приложения в фокусе, заголовок окна
・ Текст на экране (функция collectVisibleTexts, рекурсивный сбор через API специальных возможностей)
・ Чтение/запись буфера обмена (может обрабатывать TransientType менеджеров паролей)
・ Системный перехват ввода с клавиатуры через CGEventTap
・ Информация о DOM‑элементах браузера (поддерживаются Safari, Chrome, Edge, Firefox, Brave)
・ Текст, отредактированный пользователем (TrackEditTextService → sendTrackResultToServer)

  1. Локальная БД хранит персональные данные в открытом виде
    В typeless.db результаты распознавания речи, URL посещений и информация о приложениях хранятся в открытом виде. Хотя заявлено «Zero data retention», локально всё сохраняется. Аудиофайлы (.ogg) тоже не удаляются и остаются.

  2. Чрезмерные запросы разрешений
    Как инструмент голосового ввода, помимо микрофона запрашивает также запись экрана, камеру, Bluetooth и разрешения специальных возможностей, плюс встроена функция скриншотов.

  3. Прозрачность компании почти нулевая
    ・ В условиях и политике конфиденциальности не указано юридическое лицо
    ・ Местоположение указано только как «County of San Francisco, California» (юрисдикция в условиях)
    ・ WHOIS скрыт (GoDaddy + Cloudflare)
    ・ Нет сведений об аудитах безопасности вроде SOC2, ISO27001 и т. п.
    ・ Единственный контакт: hello@typeless.com

■ Технические доказательства (воспроизводимо)

Следующими командами можно проверить самостоятельно:

# цель сетевых соединений
nslookup http://api.typeless.com

# API URL внутри app.asar
strings /Applications/Typeless.app/Contents/Resources/app.asar | grep "http://api.typeless.com"

# протокол WebSocket
strings /Applications/Typeless.app/Contents/Resources/app.asar | grep "rt_voice_flow"

# нативная библиотека перехвата клавиатуры
strings /Applications/Typeless.app/Contents/Resources/lib/keyboard-helper/build/libKeyboardHelper.dylib | grep -i "key pressed"

# сбор текста с экрана
strings /Applications/Typeless.app/Contents/Resources/lib/context-helper/build/libContextHelper.dylib | grep -i "collectVisibleTexts"

# содержимое локальной БД
sqlite3 ~/Library/Application\ Support/Typeless/typeless.db ".schema history"

■ В чём проблема

CGEventTap (перехват клавиатуры) + API специальных возможностей (сбор текста с экрана) + доступ к буферу обмена. Комбинация этих трёх механизмов технически даёт возможности, эквивалентные кейлоггеру.

И вы отдаёте эти разрешения сервису с неясным оператором.

Для повышения точности голосового ввода получение контекста (текущее приложение/информация о поле ввода) само по себе — разумный дизайн. Но когда эти данные отправляются в облако, критически важны доверие к оператору и его система безопасности. Можно ли доверять компании, которая не раскрывает даже юридическое лицо, — решайте сами.

■ Альтернативы

Полностью локальные инструменты голосового ввода существуют:

・ Whisper.cpp / MLX Whisper (open-source, полностью локально, бесплатно)
・ Встроенный в macOS голосовой ввод (на Apple Silicon — обработка на устройстве)
・ Superwhisper (на базе Whisper, для Mac, но всё равно нужно проверять самостоятельно)

■ Итог

・ Распознавание речи Typeless на 100% обрабатывается в облаке (локальной модели нет)
・ Помимо аудио есть техническая база для сбора текста с экрана, URL и ввода с клавиатуры
・ Оператор непрозрачен (не раскрыты юридическое лицо и местоположение)
・ Нет доказательств аудита безопасности

Тем, кто уже пользуется, стоит оценить риски и решить самостоятельно. Как минимум рекомендуется мониторить сетевые соединения через Little Snitch и подобные инструменты.

Это также напомнило соответствующим разработчикам, в каком направлении им следует прилагать усилия.

Тот, кто пользуется историей буфера обмена, всё равно лучше, чем тот, кто ею не пользуется.