Repository navigation
v1.0.5 — Большой апдейт безопасности
🔐 CVE: Утечка IP через локальный SOCKS5-прокси
Подробнее: habr.com/ru/articles/1020080
Проблема: XRay поднимал локальный SOCKS5 на 127.0.0.1:10808 без аутентификации. Любое приложение на устройстве могло подключиться к этому прокси и через него узнать реальный exit-IP VPN-сервера. Затронуты все популярные клиенты: v2rayNG, Hiddify, Neko Box и др.
Исправление:
- Генерация случайных UUID-credentials на каждую VPN-сессию
- XRay config:
auth: password+accountsдля SOCKS5 и HTTP inbound tun_helper.cpp:socks5://user:pass@127.0.0.1:portпередаётся в tun2socksJava Authenticator.setDefault()для health-check запросов внутри сервиса- Credentials очищаются при дисконнекте
🛡️ Privacy hardening: скрытие факта использования VPN
[CRITICAL] Утечка IPv6 MyVpnService.kt
- Было:
addRoute("::", 0)без IPv6-адреса → трафик уходил мимо тоннеля - Стало:
addAddress("fd00::2", 128)— весь IPv6 идёт через XRay
[CRITICAL] Незашифрованный DNS-фолбэк XrayConfigBuilder.kt
- Было:
8.8.8.8+localhostкак запасные DNS — port 53 в открытом виде - Стало: только DoH (
https://1.1.1.1/dns-query+https://8.8.8.8/dns-query)
[HIGH] Уведомления раскрывали имя сервера MyVpnService.kt
- Было:
"Connected · DE #12"— видно на экране блокировки - Стало:
"Secure Connection"/"Active"— нейтральные системные слова
[HIGH] Логирование серверных данных MyVpnService.kt, XrayManager.kt
- Все
Log.i/wс серверными данными обёрнуты вBuildConfig.DEBUG - XRay: в release логируются только ошибки, не весь stdout
[HIGH] Fingerprinting health-check паттерна MyVpnService.kt
- Было: Telegram URLs каждые ровно 30с + скачивание фиксированных 51200 байт
- Стало: рандомный jitter 0–15с к интервалам watchdog; пул из 5 стандартных connectivity-check URL (google/generate_204, cp.cloudflare.com и др.); случайная ротация 2 из 5; размер speed-теста 30–70 KB (случайно)
[MEDIUM] Имена бинарников детектировались другими приложениями
- Было:
libxray.so,libtun2socks.so— легко находились через/proc - Стало:
libcore.so,libnetstack.so— нейтральные системные имена
[MEDIUM] BootReceiver exported=true
- Стало:
exported=false— системныйBOOT_COMPLETEDпродолжает работать
⚙️ Прочие изменения
PingServersUseCase: MAX_ACCEPTABLE_LATENCY 50ms → 80ms
- За городом высокий пинг обрезал все доступные серверы