Уязвимость локального прокси в 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, оно:
- Подключается напрямую к прокси, минуя VpnService и его правила per-app split tunneling;
- Отправляет через туннель запрос на подконтрольный сервер;
- Наблюдает внешний 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 сначала отверг претензию, затем согласился и выпустил исправление |
| Далее | Большинство клиентов закрыли локальный прокси авторизацией/байндингом |
Что делать пользователям
- Обновите клиент. Исправления выпущены для Happ, Hiddify, v2rayNG, V2RayTun и других активно развиваемых клиентов. Замороженные проекты (NekoBox for Android с февраля 2026, архивные Nekoray) остаются уязвимыми — смените клиент.
- Не считайте per-app VPN защитой от локального вредоноса. Если на устройстве есть недоверенное приложение, считайте, что факт использования VPN/прокси ему известен.
- Проверьте себя. Открытый детектор cherepavel/VPN-Detector демонстрирует технику обнаружения; PoC runetfreedom — исходник обхода.
Уроки
- «Локальный интерфейс» ≠ «безопасный интерфейс» в мире, где на устройстве живут десятки недоверенных приложений.
- Авторизация локальных API — обязательна, даже для «внутренних» сервисов.
- Архитектурная деталь, безобидная в мире одного доверенного приложения, стала системной уязвимостью, когда одинаковый дизайн скопировали все участники рынка.
Полный текст исследования: habr.com/ru/articles/1020080. Наше изложение фактов по нему — в расследовании Happ.