Вскоре после нахождения шпионского модуля в Max я обнаружил критическую уязвимость во всех известных VLESS клиентах.
Эта уязвимость позволяет обходить per-app split tunneling и приватные пространства (Knox/Shelter/Island/etc) и гарантированно обнаруживать выходной ip прокси, который вы используете.
При этом один из клиентов уязвим настолько, что позволяет дампить ваши конфиги и, в худшем случае, расшифровать весь ваш трафик.
Я сообщил об этом разработчикам этих клиентов, но они это проигнорировали. На днях минцифры разослала методичку, из которой ясно что они либо знают, либо скоро узнают об этой уязвимости.
Я решил, что ждать больше нельзя и нужно публиковать статью об этом чтобы у вас всех был хотя бы шанс. Но сейчас защиты от этого нет.

Предпосылки
Пока некие нехорошие люди ломали копья и кричали во все горло, что тот факт, что Max превращают в карманный ревизор это все выдумки и конспирология, Минцифры открыто потребовало от аккредитованных российских IT компаний внедрения в свои продукты шпионских модулей, которые будут помогать блокировать персональные впн серверы.
Так же они выпустили подробную методичку как именно должны работать такие модули, какие функции иметь и какую информацию о VPN собирать.
Так что теперь маленький РКН будет сидеть в каждом российском приложении.
Уязвимость
Все мобильные клиенты на основе xray/sing-box запускают локальный socks5 прокси без авторизации.
При этом per-app split tunneling реализуется используя VpnService, который перенаправляет трафик в tun2socks (или что-то похожее). Схема выглядит следующим образом:
VpnService -> tun2socks -> xray socks5 -> VPN server -> freedom
Но если на устройстве пользователя находится spyware (к примеру как часть какого-то государственного приложения), то ничего не мешает ему напрямую подключиться к этому xray socks5 proxy минуя VpnService и узнать внешний ip адрес и заблокировать его.
Ситуацию осложняет то, что android private space (Knox, Shelter, Island, etc) хотя и изолирует VpnService, но не изолирует loopback интерфейс. Это значит что даже если spyware находится внутри private space, то все равно возможно просканировать все localhost порты и найти socks5 proxy. Это очень плохо тем, что дает ложное чувство безопасности.
Судя по всему РКН либо знают, либо очень близки к самостоятельному нахождению этой уязвимости. Вот цитата из их методички:
Список характерных Proxy-портов для разных технологий: SOCKS: 1080, 9000, 5555, 16000-16100; http: 80, 443, 3128, 3127, 8000, 8080, 8081, 8888; прозрачные Proxy: 80, 443, 4080, 7000/7044, 8082, 12345; Tor: 9050, 9051, 9150.
Я так же публикую POC обхода per app split tunneling вот тут: https://github.com/runetfreedom/per-app-split-bypass-poc
Сама техника уже эксплуатировалась Яндексом ранее
Какие клиенты были проверены
10 марта 2026 года я разослал разработчикам всех популярных VLESS клиентов информацию об этой уязвимости. На сегодняшний день (7 апреля 2026) ни один клиент это не исправил.
Вот список клиентов которые я проверил и уведомил разработчиков:
Happ - уязвим и особо опасен, не рекомендуется использовать ни при каких обстоятельствах. Подробности ниже.
v2RayTun - уязвим
V2BOX - уязвим
v2rayNG - уязвим
Hiddify - уязвим
Exclave - уязвим
Npv Tunnel - уязвим
Neko Box - уязвим
Так же самые распространенные Clash и Sing-box клиенты в распространенных конфигурациях так же уязвимы.
Кто-то из разработчиков пообещал исправить (но, как видно, еще не), кто-то сразу сказал, что исправлять это не будет.
У меня у одного не получилось их убедить, возможно если мы все вместе обратимся к ним или кто-то пришлет PR, то это исправят.
Нам всем нужен хотя бы один безопасный клиент. В текущей ситуации уже не до большого.
Минус в том, что кроме включения авторизации на socks5 придется выключить UDP, так как UDP в socks5 работает фактически без авторизации.
Happ
Клиент Happ по праву удостоился отдельного раздела в этой статье. По никому не известной причине они активируют xray api без авторизации с включенным HandlerService, который позволяет буквально дампить пользовательские конфиги, включая ключи, входной ip адрес сервера и sni.
Если в связке с этим цензор проэксплуатирует еще одну достаточно распространенную уязвимость конфигурации xray, то он сможет буквально расшифровать трафик пользователя. По очевидным причинам я не буду раскрывать эту уязвимость тут. Если кто-то догадается что я имею в виду, то очень прошу не распространяться об этом.
Так же клиент Happ был подвергнут анализу и реверс инжинирингу, но не удалось найти ни одной разумной причины включать HandlerService. Выдвигались предположения, что это сделано для переключения конфигурации на лету, но нет - при смене конфига Happ явно перезапускает xray.
Когда я сообщал им об этой уязвимости и предоставил POC, то они сказали что им это нужно для сбора статистики подключения, что является наглой ложью. Для этого было бы достаточно только LogService (который тоже включается). Более того, не ясно причем тут статистика и управление конфигурацией.
Вы можете очень легко проверить это свайпом по серверу вправо -> поделиться -> json. Даже там будет видно как запускается api.
На уровне слухов злые языки говорят, что это бекдор и он был добавлен не случайно, а за некий крупный финансовый интерес. Я не знаю правда это или нет, но в любом случае исправить это уже невозможно. Их клиенты удалены из русского AppStore, так что они не смогут выпустить обновление.
Единственный выход тут - заблокировать Happ на серверах своих подписок по UserAgent Happ/*. Помните - даже один пользователь вашего VPN сервера с уязвимым клиентом сдаст вас цензору с потрохами (включая входной ip и sni) и вашему серверу капут.
Я тестировал обычные конфиги и обычные подписки, не знаю как будут работать json подписки, но они не особо распространены.
В целом от общения с ними сложилось отвратительное впечатление. Все остальные разработчики нормально разговаривали и обсуждали (включая авторов огромных проектов), эти же ребята сразу включили какой-то дикий гонор, что у них тут коммерческий продукт и почти Big Tech, так что они понимают уж лучше всяких проходимцев. Забавно, что при этом разработчик другого коммерческого клиента (v2RayTun), у которых нет таких диких дыр, поблагодарил и сказал, что исправят.
Может быть ребята из Happ вели себя так, потому что были очень недовольны тем фактом, что я вообще это нашел.
Есть ли спасение?
А вот на вопрос что делать хорошего ответа нет. Прямо сейчас нет VLESS клиента, который не подвержен этой уязвимости или хотя бы позволяет вручную активировать socks5 авторизацию. А на iOS с этим особенно сложно, так как большинство клиентов удалено из стора, следовательно не получат обновления.
Per-app split tunneling и приватные окружения не спасут.
Даже если кто-то сейчас выпустит фикс, то останутся миллионы людей со старыми версиями приложения.
Поэтому я предлагаю готовиться к тому, что цензор обязательно узнает ваш выходной IP. Вот как мы можем поступить в этой ситуации:
Иметь отдельные входные и выходные IP. Если цензор узнает ваш выходной IP, то вы все еще сможете подключаться к входному и пользоваться интернетом. 1а. Если у вас нет возможности получить второй IP, то в качестве альтернативы вы можете завернуть весь ваш выходной трафик в CloudFlare WARP.
Следует применить раздельную маршрутизацию. На российских IP адресах нет заблокированных ресурсов (с ними борются другими методами). Так что на клиентах вам следует иметь стратегию
geoip:ru->direct,other->proxy.На сервере вам нужно заблокировать доступ обратно в
geoip:ru. Если вы этого не сделаете, то шпионы в яндексах/wb/ozon’ах и т.д. сдадут цензору то, что вы пользуетесь прокси и цензор сможет найти ip подключения проанализировав паттерн трафика. Я понимаю, что решение это сложное и неудобное, но и обстоятельства сейчас особые.
Кстати, для Windows нужная стратегия уже реализована в клиенте в v2rayN (пресет “Все, кроме РФ”)
Обычно я так не делаю, но эту статью вероятно скоро удалят, так что я попрошу всех вас помочь в распространении этой информации. Без огласки и помощи комьюнити справиться будет очень сложно.
UDP 1. Через час после публикации статьи разработчик Happ в своей телеграм группе отказался считать это уязвимостью и отказался исправлять даже под давлением своей собственной аудитории
UDP 2. Happ все же согласились исправить обе уязвимости.
UDP 3. Павел @seriouskaktus написал более продвинутый детектор, чем POC, который опубликован в статье https://github.com/cherepavel/VPN-Detector
Комментарии (805)

Advixum
07.04.2026 07:13На андройде AFWall+ может блокировать обращения приложений к localhost.

runetfreedom Автор
07.04.2026 07:13Указывайте, пожалуйста, что это только для rooted устройств, т.е 0.01%

Advixum
07.04.2026 07:13Повод для очередного повышения цифровой грамотности населения)

runetfreedom Автор
07.04.2026 07:13root имеет свою цену, которую мало кто готов заплатить. Это банки, потеря Knox и так далее…

Eduard_Bocharov
07.04.2026 07:13Knox, конечно, потеря, но это касается только Самсунга. В остальных случаях можно рут скрыть

WantedPotato
07.04.2026 07:13А вы на практике пробовали рут скрывать? Это вечная война щита и меча. Сегодня удается крыть - завтра обнаружат.

andrey_snegovik
07.04.2026 07:13У меня рут права и скрыто всё. Работает всё 3 года.
Для работы Mir Pay стоит модуль Pay Security Bypass. Если какое-то приложение жалуется на Root, в Magisk скрываю через Deny List

Spiritschaser
07.04.2026 07:13Собираюсь рутануться и поставить Magisk. Средствами magisk можно ли решить описанную в теме проблему? Например, посадить условный Max в песочницу, чтобы он думал, что он на телефоне Inoi подключён по wifi за лютым фаерволом, и открыт только https прокси на 10.0.0.1?

LuciusWill
07.04.2026 07:13Зачем мучать смартфон? Макс и рос-приложения надо ставить на отдельный, бюджетный смартфон. Это надёжнее, чем рисковать своим основным устройством.

vcKomm
07.04.2026 07:13А в чем профит? Завтра добавят анальный зонд на хабр и смысл от второго устройства?

RTFM13
07.04.2026 07:13хабр в браузере.
https://github.com/ACK-J/Port_Authority
и всякие https://privacybadger.org/ мастхэв

SarmatKuricin
07.04.2026 07:13Если я правильно понял. То проблему уязвимости рутованных устройств это не решает. Понятно, что ещё нужно троян умудриться установить себе. Но вполне может и с обновлением какого-то приложения прилететь. И если я всё правильно понял, то лучше два устройство использовать, чем одно с root правами.

RTFM13
07.04.2026 07:13два устройства проще и надёжнее.
но рута вы даёте ручками каждому приложению отдельно, никто вас не заставляет раздавать рута направо и налево.
уязвимость самого магиска риск к.м.к. приемлемый если у вас нет миллиардных криптосчетов. а если даже есть, то я бы еще подумал кому доверять - магиску и кастомной фирмваре или той мегатонне предустановленного российского и китайского блоатваре.

Sap_ru
07.04.2026 07:13Magisk уже больше года ни хрена ни с одним банковским приложением не работает.

romankotlyarovru
07.04.2026 07:13Все там работает, исключения какие-то "хитрые" устройства. Но лично перешел на KernelSU/SukiSU Ultra, там этот вопрос решается гораздо проще

ichika51
07.04.2026 07:13Я могу ошибаться в формулировке, но на lineageos через magisk скрыл рут права и пользуюсь банкингом и госуслугами уже около года без нареканий.

achekalin
07.04.2026 07:13Мне такой подход нравится: по сути, отключу-ка я фичу безопасности, чтобы с этого устройства в банк ходить.
У меня знакомый есть, техдир в крупной компании, у него в заведовании случился зловред, который со счета юрлица несколько лямов украл, напрямую влезая в работу банк-клиента на ПК. Чувак офигел, никогда не верил, что кто-то такое сотворит, мишень для атаки оказалась совсем мелкой. А уж на своём телефоне, где стоит совсем одинаковый клиенты сбера и той же альфы с тиньком... Ну, в общем, рут штука такая, может и иной раз оказаться не совсем лишним.

Ndochp
07.04.2026 07:13Вот на PC рутом можно по страницам банков ходить, а на телефоне всё сразу становится плохо. Неужели линукс (на нем же андроид?) настолько хуже винды?

kukovik
07.04.2026 07:13Линукс -- лучше. Но только если руту -- рутово, а пользователю -- пользователево.
(на самом деле вопрос в распространенности. десктопный линукс довольно редкий зверь и авторы зловредов просто не прикладывают достаточных усилий из-за незначительного выхлопа. чего не скажешь про андроид)
Ndochp
07.04.2026 07:13Так и не добрался купить рутующуюся модель телефона, но разве после этого увлекательного процесса все приложания становятся запущенными с рут правами, а не только те, которые мне надо? Думал что для произвольного apk с трояном ничего не должно поменяться. По хорошему оно про рутованность телефона и знать не должно. Только бекаперы, фаерволы та еще несколько системных утилит нуждаются к расширенному доступу. Ну или если охота в кишки кому-нибудь залезть.

WantedPotato
07.04.2026 07:13На рутованных телефонах разблокирован загрузчик. Если иметь физический доступ к телефону, то никакая защита не поможет.
Сами приложения при запуске могут запросить root доступ. Однако мы знаем много случаев, когда находили уязвимости в sudo на linux, так что root на андроиде может так же иметь 0-day уязвимости.
Единственный телефон куда можно поставить безопасно прошивку, это pixel. Так как там можно заблокировать загрузчик обратно.

b-men
07.04.2026 07:13Ведроид как был унылым недоделанным местами гуаном таковым и остаётся увы. Как его не крути он линуксом полноценным никогда не станет. Так как априори лишь базируется на линукс ядре.
Все что сверху данного ядра увы отношения к линукс увы не имеет.
Хорошо еще что китайцы на ряде своих устройств предпочитают весьма не слабо переделывать код ведроида, что бы свой собственный функционал реализовать, но увы все это не влияет на прискорбное состояние безопасности данной оси.

RTFM13
07.04.2026 07:13ни одна ос из-за кучи легаси не поспевает за реальностью в области безопасности.
из популярных лидер наверное огрызки, но слишком дорогой ценой полной анальной зависимости.

Miller777
07.04.2026 07:13Угу.
А потом разработчики софта на сообщение о том, что что-то не работает, отвечают: у вас Xiaomi? Идите лесом, это не Android.
Сталкивался уже.

andrey_snegovik
07.04.2026 07:13Magisk уведомляет, что приложение запрашивает root-права. Нужно больше деталей о ситуации, иначе при детальном разборе может оказаться, что root тут вообще ни при чём.

Blacpaul57
07.04.2026 07:13Тут палка о двух концах. Либо ты доверяешь закрытому банкингу, либо контролируешь систему через рут, но берешь все риски на себя

Miller777
07.04.2026 07:13Я бы хотел такие галки в настройках телефона.
Я хочу разблокировать загрузчик.
Я хочу рут-права.
Я понимаю риски.
Я понимаю, что эти действия могут привести к потере гарантии.
Я принимаю все последствия на себя.
И без всех этих танцев с бубнами (подбор правильного recovery, кастомной прошивки и прошивальщика), ожидания недели, или сколько там сейчас, пока китайский бот не одобрит (я про Xiaomi сейчас) и сноса всех данных и приложений при разблокировки загрузчика.
Я понимаю, зачем данные при разблокировке загрузчика удаляются, но все же, может можно было как-то по-другому?
Проставил пять галок, перезагрузился, все у тебя рут и данные никуда не делись. Хочешь, живи на стоке с ним, хочешь - накати кастом...
Мечты...

faiwer
07.04.2026 07:13В остальных случаях можно рут скрыть
Я зарёкся так делать. Лишился на своей трубке возможности бесконтактной оплаты. А доступ к банковскому приложению так и не появился. One+

BPOH
07.04.2026 07:13Happ - уязвим и особо опасен, не рекомендуется использовать ни при каких обстоятельствах... Только что прилетело обновление на Happ и он перестал детектиться per-app-split-bypass-poc

hellomadworld
07.04.2026 07:13Обновил на самый последний Happ: стоит и маршрутизация с geoip.ru и geosite:category-ru в директ и выбор приложений (сплит тун) в котором нет PoC топикстартера. Да при проверке xray api не оперделяет. Но локальный порт находит и видит внешний ip vps сервера. Что именно должно перестать детектится? название клиента?))
Скрытый текст




Nyanny
07.04.2026 07:13Чушь.
Грамотность тут не причем.
Не составляет особо труда по гайду с 4пда рутировать устройство. Только попробуйте найти ещё устройства, в которых можно разблокировать загрузчик. С каждым годом их все меньше.
Так что зависимость не от "грамотности населения", как вы пренебрежительно сказали, а от самих устройств. Которых, опять же, с каждым годом все меньше.

Spiritschaser
07.04.2026 07:13Только попробуйте найти ещё устройства, в которых можно разблокировать загрузчик
Sony к вашим услугам. Там не то что разблокировать, кастомизация прошивок во все поля.

Alxgr
07.04.2026 07:13Разблокировать можно, кроме (пока) 1 VII и японских аппаратов.
https://developer.sony.com/open-source/aosp-on-xperia-open-devices/get-started/unlock-bootloader
https://wiki.lineageos.org/devices/#sony
Но комьюнити едва живое: lineage, еще полтора кастома да и всё. Это не десятые годы, когда там прошивок было на любой вкус и цвет.

Advixum
07.04.2026 07:13Тенденция по заблокированным загрузчикам безусловно есть, но пока вариантов достаточно. Xiaomi (включая Redmi, POCO), Pixel, Samsung, OnePlus, Motorola, Sony. Там конечно подводных камней полно. Однако, на 4PDA они весьма подробно изучены.

Zolg
07.04.2026 07:13> Xiaomi (включая Redmi, POCO)
Увы, у xiaomi процедура разлочки бутлоадера превратилась в лотерею с непредсказуемым исходом.

Tambaru
07.04.2026 07:13У Xiaomi есть квота на 2000 устройств в сутки. Для успешной разблокировки нужно скриптом кинуть запрос ровно в секунду обновления квоты. А так да, разблокировать можно.
Fedyash
Так вот оно что! То-то я с утра сижу и бьюсь уже целый час — через Hiddify и все тайм-аут. Короче, понятно. И ведь надо же! Скажем так: не зря им там зарплату платят...
MikaSan
Happ работает нормально сейчас. Отвалился на днях hiddify на винде и самсунге у семьи, пришлось перевозить. У happ конечно открытого исходного кода нет, но в целом на нем сижу уже с год, проблем не знаю. Плюс есть раздельное проксирование даже на пк, правда замороченнее, чем на телефоне. И если немного пошаманить по их мануалу, то автобут с автоподкобчением есть. Хз на сколько контора надежная, но вроде пока норм
qwehjk
На днях отвалились старые версии hiddify. С последней версией на линуксе и андроиде всё работает, у меня по крайней мере.
rusbeard
отвал какой-то частичный кстати, 1 сервер работает, а другой, который на телефоне пашет в таймауте
Fedyash
В итоге, в моем случае, дело было в том, что просто нужно было поменять домен на нейтральный и не вызывающий особых вопросов, скажем так. Снова все заработало в итоге. Но я именно на Винде пользовался Hiddify (да и Happ тоже). На смартфоне (у меня iOS), пожалуй, принимая во внимание описанное в статье не буду заходить ни в какие приложения кроме ТГ.
GamovK
happ, хорош в плане удобства чтения логов и настройки, но со временем тоже начал выдавать неожиданности, наиболее стабильный клиент сейчас v2raytun и FlClashX
Limping
А для них где-то есть обновляемый routing наподобие
https://github.com/frayZV/simple-ru-routing ?
VladStepu2001
А пробовали обновлять данные профиля ("Update subscriptions")?
У меня тоже было такое пару раз, и это помогло.
Fedyash
Да у меня же бесплатный или вы о каких именно данных? У меня версия 4.1.1. Я такого там не увидел.
Pixilys
Три точки слева от названия профиля, там обновлялка. Если нет, то надо идти туда откуда начинали создавать подключение и всё заново.
Fedyash
А, ок. Я понял. В итоге завелось все, но дело было не в Hiddify, а в моей ссылке. Палёная она была, скажем так простым языком.
NeSkazhu56
Попробуй переустановить клиент, у меня тоже была такая проблема и я думал что отвалился сервер, но как оказалось проблема была именно в клиенте hiddify, так как при тестах выяснилось что с других клиентов подключение норм
ne_pridumal_nik
Hiddify сам по себе довольно глючный, давно его не использую
kolych97
Как понимаю, это про архитектуру Android VPN, а не iOS. На Android через VpnService + tun2socks часто поднимается локальный SOCKS, и при кривой реализации его можно дернуть. На iOS такого нет. Network Extension + sandbox не дают другим приложениям ходить в локальные сервисы. Так что это скорее косяк клиентов под Android, а не проблема протокола или всех платформ.
runetfreedom Автор
Слепая вера в какие-то волшебные sandbox’ы эппла ни к чему хорошему не приведет.
Apple точно так же уязвим, в том числе к атаке на Happ.
Поставьте, к примеру, libterm и попробуйте
Вообще вокруг iOS очень много сказок.
kolych97
Не до конца понял, какой именно сценарий вы демонстрируйте. С libterm ты же сам из своего процесса ходишь в 127.0.0.1, это ожидаемо. В статье речь про то, когда стороннее приложение без ведома пользователя может найти и использовать локальный SOCKS. Можете уточнить, как в iOS вы воспроизводите именно cross-app доступ к этому прокси, а не доступ из того же приложения?
Aelliari
Э нет, прокси запущен в одном процессе, libterm - в другом. Воспроизводится. Можно ещё к этому прокси подцепиться через апп который умеет подключаться к прокси, например телеграм
kolych97
Ок, допускаю, что в отдельных реализациях это может воспроизводиться и на ios. Но насколько я знаю на ios при использовании network extension обычно нет необходимости поднимать socks наружу. Трафик обрабатывается внутри системного vpn стека. На android же из-за vpnservice часто используется схема tun2socks + локальный proxy, поэтому там этот сценарий куда более типовой.
runetfreedom Автор
Причем тут VpnService? Xray (по крайней мере раньше) не умел принимать трафик на TUN интерфейс. Единственным способом зароутить туда трафик был tun2socks.
Это справедливо и для Andoroid и для iOS (и даже для Windows)
kolych97
Ааа, всё, теперь понял, не туда ушёл в размышлениях, спасибо за пояснение. Пытался выгородить клиентов и искать проблему в другом месте, а по факту всё упирается именно в их реализацию. Тогда действительно странно, что они до сих пор тянут эту схему, так как я думал, что Xray до сих пор не умеет нормально работать с TUN.
MikeLog
В IOS версии нет возможности сплитовать туннель, то есть указывать каким аппам можно ходить через впн, а каким нет, если у вас есть такой клиент для влесс на иос, напишите, я с удовольствием его скачаю и проверю.