5,8 млн сайтов сдали вас Meta, 3 млн — Яндексу. Прямо в приложение

Даже в режиме инкогнито.


wrmkp0tcl08nboup194s8qjgg311whz3.png


Meta* и Yandex использовали скрытую технологию отслеживания, связывающую действия пользователей в браузере с их аккаунтами в Android-приложениях. Исследователи утверждают, что нативные приложения Facebook*, Instagram* и несколько приложений Яндекса (включая Карты и Браузер) прослушивали фиксированные порты localhost на устройствах Android для получения данных из веб-скриптов, встроенных на миллионы сайтов.

Эти JavaScript-скрипты — Meta* Pixel и Яндекс.Метрика — запускаются в мобильном браузере и устанавливают соединение с приложениями через сокеты localhost. Через них передаются метаданные, cookie и команды, включая идентификаторы устройств, такие как Android Advertising ID (AAID) . Это позволяет деанонимизировать пользователей, связывая их поведение в браузере с учётными записями.

Такая методика обходит стандартные механизмы конфиденциальности — от удаления cookie до инкогнито-режима и настроек разрешений Android. Более того, эти данные могут быть перехвачены сторонними приложениями, если те также прослушивают те же порты.

Meta Pixel передавал cookie _fbp из браузера в приложения Meta через WebRTC с SDP Munging, используя порты 12580–12585. Полученные данные приложения Facebook* и Instagram* направляли на сервер через GraphQL-запрос . Позже Meta изменила механизм на WebRTC TURN. Обновление от 3 июня подтвердило, что Meta прекратила отправку данных на localhost, а соответствующий код почти полностью удалён. Аналогичное прекращение подтверждено и со стороны Яндекса.

Cookie _fbp применяется для идентификации браузеров и встроен примерно на 25% из миллиона популярных сайтов . Несмотря на его статус как first-party cookie, через localhost-коммуникацию Meta получала возможность объединять сессии с разных сайтов.

Яндекс использовал другую схему: его приложения слушали порты 29009, 29010, 30102 и 30103. Скрипт Метрики направлял зашифрованные данные на эти порты, используя адреса 127.0.0.1 и домен yandexmetrica[.]com. Полученные через Java API идентификаторы возвращались браузеру и затем передавались на сервер Метрики (mc[.]yango[.]com). Такая схема действует минимум с 2017 года и усложняет обнаружение из-за обхода традиционных механизмов контроля.

Обе схемы оказались уязвимыми к утечке истории просмотров: стороннее приложение может прослушивать порты и извлекать заголовки Origin, тем самым определяя посещённые сайты. Доказательство концепции, представленное исследователями, подтвердило, что Chrome, Edge и Firefox уязвимы даже в приватном режиме. Brave и DuckDuckGo оказались защищены за счёт блокировки localhost.

По данным BuiltWith , Meta* Pixel встроен на 5,8 млн сайтов, Яндекс.Метрика — почти на 3 млн . При сканировании топ-100 000 сайтов Meta Pixel пытался соединиться с localhost на 13 468 сайтах в США и 11 890 в Европе без предварительного согласия. У Яндекса — на 1 095 и 1 064 сайтах соответственно.

Meta начала использовать метод WebRTC STUN в ноябре 2024 года, а с мая 2025 перешла на WebRTC TURN. Яндекс применяет HTTP-коммуникацию с февраля 2017 года и HTTPS — с мая 2018. Данные зафиксированы в HAR-файлах архивов HTTP Archive.

Тесты показали, что браузеры Chrome, Firefox и Edge подвержены уязвимостям. Chrome в версии 137 добавил защиту от SDP Munging. Firefox готовит патчи к версии 139. Brave и DuckDuckGo используют блок-листы и требуют подтверждения при работе с localhost с 2022 года.

Ни Meta, ни Яндекс не документировали этот механизм. Пользователи и разработчики сообщали о странном сетевом поведении в форуме разработчиков Meta *, не получив ответов. Исследование предполагает, что отслеживание работало даже без входа в аккаунты, в режиме инкогнито и при очистке cookies, что делает его особенно проблемным с точки зрения конфиденциальности.

* Компания Meta и её продукты признаны экстремистскими, их деятельность запрещена на территории РФ