MAX слушает ваши звонки?
И может научиться искать что угодно. Без обновлений. Без вашего ведома.
В MAX нашли встроенный модуль распознавания ключевых слов во время звонков. Сейчас функция отключена, а система распознаёт только одну фразу: «не слышу». Но сама схема работы выглядит интереснее: модель подгружается с серверов VK и при желании может смениться без обновления приложения.
О таком механизме рассказал исследователь p1llag3r во второй части серии «Что скрывает MAX». Автор разобрал APK мессенджера, проследил путь от серверного конфига до нативного кода звонков и показал, как клиент получает архив с моделью, проверяет контрольную сумму и загружает файл в модифицированный WebRTC.
Речь идёт о системе Keyword Spotting, которая ищет заранее заданную фразу прямо в аудиопотоке. Похожие механизмы давно используют голосовые ассистенты. Во время звонка система получает звук с микрофона, режет поток на короткие фрагменты и оценивает, прозвучало ключевое выражение или нет.
По данным автора разбора, текущая модель ищет только фразу «не слышу» и нужна для фиксации проблем со связью. В перехваченном серверном конфиге модуль помечен как выключенный через флаг use: false. Там же указан лимит работы на 60 секунд за звонок.
Главный вопрос связан не с самой фразой, а с архитектурой. MAX не хранит модель жёстко внутри приложения. Клиент получает ссылку с сервера VK, скачивает ZIP-архив с CDN, сверяет MD5 и подгружает содержимое на устройство. При такой схеме VK теоретически может заменить модель на другую без обновления приложения и без отдельного уведомления пользователя.
Исследователь утверждает, что архив с моделью лежит в открытом доступе и скачивается без авторизации. Внутри находятся файл calls_kws.tflite и конфиг с параметрами. Размер модели составляет около 1,17 МБ, архитектура обозначена как BC-ResNet. Автор также пишет, что проверил несколько версий SDK на CDN и везде нашёл один и тот же файл.
Во время срабатывания модуль, по описанию автора, не отправляет на сервер сам аудиопоток, а формирует отчёт с уровнем уверенности. Затем клиент передаёт событие через канал статистики vchat.clientStats вместе с идентификаторами пользователя и звонка. Отдельно автор отмечает странную деталь: строка «не слышу» захардкожена в коде отправки, поэтому после замены модели отчёт может сохранить старую подпись, даже если словарь уже изменится.
Следов фоновой прослушки исследователь не нашёл. Модуль, по его словам, работает только во время звонков и не связан с голосовыми сообщениями. Для голосовых и видеосообщений в MAX используется другой механизм распознавания, который уже описан в пользовательских документах.
Ещё одна претензия касается прозрачности. В политике конфиденциальности и пользовательском соглашении автор не увидел прямого упоминания анализа речи во время звонка с помощью такого детектора. По сути претензия сводится к простому вопросу: модуль уже встроен в звонки, может включаться и меняться с сервера без обновления приложения, но в публичных документах MAX о такой механике, как утверждает автор, ничего не сказано.
В MAX заявили, что сообщения о доступе к разговорам пользователей не соответствуют действительности. В центре безопасности платформы сообщили, что все звонки в мессенджере зашифрованы, а данные пользователей защищены. Там добавили, что ИИ-инструменты в сервисе нужны только для повышения качества связи, работают обезличенно и не имеют доступа к содержимому звонков. В компании также пояснили, что машинное обучение помогает анализировать условия соединения и автоматически менять параметры звонка, например сервер или кодек, а обновление ML-моделей без пересборки всего приложения назвали стандартной практикой для современных SDK.