HAPP·Research

Уязвимость локального прокси в VLESS-клиентах: технический разбор

Апрель 2026: исследование runetfreedom показало, что все мобильные VLESS-клиенты открывают SOCKS5 на loopback без авторизации, а Happ — ещё и Xray API. Что это значит для пользователей.

В апреле 2026 года пользователь Habr под ником runetfreedom (автор нашедший ранее шпионский модуль в мессенджере MAX) опубликовал исследование, затронувшее практически весь рынок мобильных прокси-клиентов: Happ, v2rayNG, Hiddify, NekoBox, V2RayTun, V2Box, Exclave, Npv Tunnel и типовые конфигурации Clash/sing-box.

Архитектура, из которой выросла уязвимость

Все Android-клиенты семейства V2Ray устроены одинаково:

VpnService (система отдаёт пакеты в TUN)
  → tun2socks (конвертация пакетов в TCP/UDP-потоки)
    → локальный SOCKS5-прокси (обычно 127.0.0.1:1080 или случайный порт)
      → ядро Xray/sing-box (шифрование и маршрутизация)
        → VPN-сервер → интернет

SOCKS5-прокси слушает на loopback-интерфейсе (127.0.0.1) и без авторизации — в этом и проблема. Loopback считался «внутренней территорией» устройства: доступ к нему есть только у самого устройства.

В чём заключалась атака

Любое приложение на устройстве может сканировать localhost-порты. Найдя открытый SOCKS5, оно:

  1. Подключается напрямую к прокси, минуя VpnService и его правила per-app split tunneling;
  2. Отправляет через туннель запрос на подконтрольный сервер;
  3. Наблюдает внешний IP выхода — если он не совпадает с IP провайдера, устройство использует VPN.

Два следствия разной тяжести:

  • Обход приватных пространств. Изолированные профили (Shelter, Island, Knox) изолируют VpnService между профилями, но не изолируют loopback — «частный» и «рабочий» профили делят один localhost.
  • Обнаружение VPN-использования. Шпионский модуль в любом приложении (включая государственное или корпоративное) получает детектируемый признак. В публикации отмечалось, что порты из этой схемы перечислены в методических материалах по выявлению VPN: SOCKS 1080, 9000, 5555, диапазон 16000–16100.

Усугубляющий фактор Happ: открытый Xray API

У Happ нашёлся дополнительный слой: Xray API без авторизации с включённым HandlerService. Через него можно было не только проверить факт VPN, но и выгрузить пользовательскую конфигурацию: адреса серверов, ключи, SNI. Разработчики объяснили включённый API потребностями статистики; автор исследования заметил, что для статистики достаточно LogService, а HandlerService — это управление конфигурацией.

Теоретическая эскалация: зная полный конфиг (включая секреты сервера), цензор получает возможность активного зондирования и попыток расшифровки. Публикация прямо рекомендовала серверам подписок блокировать запросы с User-Agent Happ/*.

Хронология

Дата Событие
10 марта 2026 Автор разослал уведомления разработчикам
7 апреля 2026 Публикация исследования; ни один клиент не исправлен
Апрель 2026 Happ сначала отверг претензию, затем согласился и выпустил исправление
Далее Большинство клиентов закрыли локальный прокси авторизацией/байндингом

Что делать пользователям

  1. Обновите клиент. Исправления выпущены для Happ, Hiddify, v2rayNG, V2RayTun и других активно развиваемых клиентов. Замороженные проекты (NekoBox for Android с февраля 2026, архивные Nekoray) остаются уязвимыми — смените клиент.
  2. Не считайте per-app VPN защитой от локального вредоноса. Если на устройстве есть недоверенное приложение, считайте, что факт использования VPN/прокси ему известен.
  3. Проверьте себя. Открытый детектор cherepavel/VPN-Detector демонстрирует технику обнаружения; PoC runetfreedom — исходник обхода.

Уроки

  • «Локальный интерфейс» ≠ «безопасный интерфейс» в мире, где на устройстве живут десятки недоверенных приложений.
  • Авторизация локальных API — обязательна, даже для «внутренних» сервисов.
  • Архитектурная деталь, безобидная в мире одного доверенного приложения, стала системной уязвимостью, когда одинаковый дизайн скопировали все участники рынка.

Полный текст исследования: habr.com/ru/articles/1020080. Наше изложение фактов по нему — в расследовании Happ.