Mullvad 10 сентября предупредил о новом способе обхода VPN в Android. Вредоносное приложение может отправлять служебные пакеты напрямую в интернет даже при включённой настройке «Блокировать соединения без VPN», которая должна запрещать подобный трафик. Получатель пакетов видит реальный внешний IP-адрес сети пользователя, хотя VPN продолжает работать.
Проблему исследовал Армин Шупук, опубликовавший технический разбор ещё 29 июля. Описанный метод раскрывает сетевой адрес и позволяет отслеживать присутствие устройства в сети, но не передаёт произвольное содержимое приложений. Формат служебного пакета задаёт Android, а вредоносная программа выбирает адрес получателя. Для атаки достаточно обычных сетевых разрешений, которые система выдаёт без отдельного запроса пользователю.
Обход связан с механизмом NAT-T keepalive. Небольшие периодические пакеты помогают сохранять соединение через устройства, которые выполняют трансляцию адресов. Android может поручить отправку сетевому чипу, чтобы не будить приложение ради каждого пакета. По объяснению Mullvad, при передаче такой задачи аппаратуре система пропускает проверку, которая должна направлять трафик через VPN или блокировать прямое соединение.
В эксперименте с Pixel 8 Pro исследователь зафиксировал на отдельном маршрутизаторе пакеты UDP на порт 4500, отправлявшиеся каждые десять секунд при активной блокировке соединений без VPN. Проверки также затронули Samsung Galaxy Z Fold7 и Nothing Phone (3a) с Android 16, однако для двух последних моделей автор подтвердил работу аппаратного механизма без аналогичного внешнего перехвата пакетов. Шупук предполагает, что проблема распространена среди устройств с Android 12 и новее, опираясь на общий системный код и анализ прошивок. Полноценные испытания каждой модели исследователь не проводил.
После запуска отправка может продолжаться при заблокированном экране и в энергосберегающих режимах. По результатам испытаний, принудительная остановка или удаление приложения, потеря сети и перезагрузка прекращали активную передачу. Публикации описывают исследовательские проверки и не приводят сведений об использовании метода в реальных атаках.
Согласно хронологии Шупука, Google получил отчёт 15 мая, а 19 мая пометил обращение как дубликат более ранней заявки. В доступной исследователю переписке нет подтверждения исправления или присвоения CVE. Закрытие обращения как дубликата само по себе не означает, что разработчики устранили уязвимость.
Для полноценного исправления Mullvad считает необходимыми изменения в Android. Команда GrapheneOS знает о проблеме и, по информации Mullvad, работает над защитой. На момент проверки 12 сентября соответствующая задача GrapheneOS оставалась открытой, поэтому считать альтернативную систему уже защищённой от нового обхода нельзя.
Mullvad также описал потенциальную временную меру. Защитное приложение могло бы занять доступные аппаратные ресурсы для keepalive-пакетов раньше вредоносной программы. Компания не планирует добавлять подобную защиту, поскольку подход сам требует трафика вне туннеля и не помогает, если злоумышленник успел первым.
Майская уязвимость Android использовала другой механизм. Приложение поручало системе отправить заключительное сообщение при закрытии соединения QUIC, а Android выпускал пакет мимо VPN. GrapheneOS тогда отключила проблемную функцию. Новый случай затрагивает периодическую аппаратную отправку пакетов и требует отдельного исправления. За несколько месяцев исследователи показали два разных пути, позволяющих обычному приложению нарушить обещание системной настройки «Блокировать соединения без VPN».