来源: https://habr.com/ru/articles/1020080/
在 Max 中发现间谍模块后不久,我发现了所有已知 VLESS 客户端中的一个严重漏洞。
此漏洞允许您绕过每个应用程序的拆分隧道和私有空间(Knox/Shelter/Island 等),并保证检测到您正在使用的代理的出口 IP。
此外,其中一个客户端非常脆弱,它允许泄露您的配置,在最坏的情况下,甚至可以解密您的所有流量。
我已将此问题报告给这些客户端的开发人员,但他们置之不理。数字发展部最近发布了一份手册,其中明确表示他们要么已经知道这个漏洞,要么很快就会知道。
我决定不能再等了,必须写篇文章告诉大家这件事,这样至少能让你们有机会防范。但目前,还没有有效的防护措施。
先决条件
当一些不怀好意的人拼命叫嚣,声称将 Max 变成掌上审计员的想法完全是捏造的阴谋论时,俄罗斯数字发展部却公开要求获得认证的俄罗斯 IT 公司在其产品中实施间谍软件模块,以帮助阻止个人 VPN 服务器。
他们还发布了详细的指导方针,说明此类模块应该如何工作、应该具备哪些功能以及应该收集有关 VPN 的哪些信息。
所以现在每个俄罗斯应用程序里都会有小小的RKN。
漏洞
所有基于 xray/sing-box 的移动客户端都在未经授权的情况下运行本地 socks5 代理。
每个应用程序的拆分隧道是通过以下方式实现的:[ VpnService …tun2socks
VpnService -> tun2socks -> xray socks5 -> VPN server -> freedom
但是,如果用户的设备包含间谍软件(例如,作为某些政府应用程序的一部分),那么没有什么可以阻止他们直接连接到这个 Xray SOCKS5 代理,绕过 VPN 服务,并找出外部 IP 地址并将其阻止。
问题在于,Android 隐私空间(例如 Knox、Shelter、Island 等)虽然隔离了 VPN 服务,但并未隔离回环接口。这意味着即使间谍软件位于隐私空间内,仍然可以扫描所有本地端口并找到 Socks5 代理。这非常糟糕,因为它会给人一种虚假的安全感。
显然,俄罗斯联邦通信、信息技术和大众传媒监管局(Roskomnadzor)要么已经知晓这一漏洞,要么即将独立发现它。以下摘自他们的手册:
不同技术的典型代理端口列表:SOCKS:1080、9000、5555、16000-16100;http:80、443、3128、3127、8000、8080、8081、8888;透明代理:80、443、4080、7000/7044、8082、12345;Tor:9050、9051、9150。
我还发布了一个绕过应用级拆分隧道限制的概念验证代码,链接如下:GitHub - runetfreedom/per-app-split-bypass-poc · GitHub
Yandex 之前就已经使用过这项技术了。
哪些客户通过了验证?
2026年3月10日,我已将此漏洞信息发送给所有主流VLESS客户端的开发者。截至今日(2026年4月7日),没有一个客户端修复此漏洞。
以下是我核实并通知开发人员的客户列表:
- Happ 非常脆弱,尤其危险。任何情况下都不建议使用。详情如下。
- v2RayTun存在漏洞
- V2BOX存在漏洞
- v2rayNG存在漏洞
- Hiddify存在漏洞
- Exclave 存在安全隐患
- NPV隧道存在安全隐患
- Neko Box 存在漏洞
此外,常见配置中最常见的 Clash 和 Sing-box 客户端也存在漏洞。
一些开发者承诺会修复这个问题(但显然还没有),而另一些开发者则立即表示他们不会修复这个问题。
是我唯一一个没能说服他们的人,也许如果我们一起联系他们,或者有人提交一个 PR,他们就会修复这个问题。
我们都需要至少一个可靠的客户。在目前的情况下,没有时间再增加客户了。
缺点是,除了启用 Socks5 的身份验证之外,您还必须禁用 UDP,因为 Socks5 中的 UDP 基本上无需身份验证即可工作。
Happ
Happ 客户端理应在本文中单独成章。出于某种未知原因,他们未经授权便激活了 Xray API HandlerService ,这会导致用户配置信息(包括密钥、服务器输入 IP 地址和 SNI)被泄露。
如果审查者同时利用xray 配置中另一个相当常见的漏洞,他们实际上就能解密用户流量。出于显而易见的原因,我不会在此透露这个漏洞。如果有人弄明白了我的意思,恳请他们不要泄露出去。
我们还分析并逆向工程了 Happ 客户端,但没有找到启用 HandlerService 的合理理由。有人认为这是为了实现动态配置切换,但事实并非如此——无论何时配置发生更改,Happ 都会显式地重启 xray。
当我向他们报告这个漏洞并提供了概念验证时,他们说需要它来收集连接统计信息,这显然是谎言。LogService (相关数据也包含在内)就足以满足需求了。此外,统计数据和配置管理与此有何关联也不清楚。
您可以通过向右滑动服务器 → 分享 → JSON 轻松查看这一点。您甚至可以看到 API 是如何启动的。
有传言说这是个后门,添加它并非出于经济利益,而是另有目的。我不知道这是否属实,但无论如何,这个问题都无法修复。他们的客户端已经从俄罗斯应用商店下架,所以他们无法发布更新。
唯一的解决办法是通过 UserAgent 在您的订阅服务器上屏蔽 Happ Happ/* 。请记住,即使您的 VPN 服务器上只有一个用户使用了易受攻击的客户端,也会使您暴露于审查之下(包括您的入站 IP 和 SNI),您的服务器将无法运行。
我测试了常规配置和常规订阅。我不知道 JSON 订阅会如何工作,但它们并不常见。
总的来说,我和他们的互动给我留下了非常糟糕的印象。当其他开发者(包括一些大型项目的作者)都在正常地交谈和讨论时,这些人却立刻变得傲慢得令人难以置信,声称他们正在开发商业产品,而且几乎是大型科技公司,所以他们应该比任何骗子都更懂行。可笑的是,另一个商业客户端(v2RayTun)的开发者,他们的产品并没有这么明显的漏洞,反而感谢了他们,并表示会修复问题。
也许 Happ 的人之所以这样对待我,是因为他们非常不高兴我竟然找到了它。
是否有救赎?
但对于如何解决这个问题,目前还没有完美的答案。目前,没有任何 VLESS 客户端能够免疫此漏洞,甚至不允许手动激活 Socks5 身份验证。这在 iOS 上尤其困难,因为大多数客户端已从应用商店下架,因此无法获得更新。
每个应用程序的拆分隧道和私有环境都无济于事。
即使现在有人发布了修复程序,仍然会有数百万人使用旧版本的应用程序。
因此,我建议您做好准备,审查机构肯定会查到您的出境 IP 地址。以下是我们可以应对这种情况的方法:
-
使用独立的输入和输出 IP 地址。即使审查机构发现了你的输出 IP 地址,你仍然可以连接到输入 IP 地址并使用互联网。1a. 如果你无法获得第二个 IP 地址,你可以将所有输出流量封装在 CloudFlare WARP 中。
-
应该使用拆分路由。俄罗斯 IP 地址上没有被屏蔽的资源(它们通过其他方法处理)。因此,在客户端,您应该采用
geoip:ru→direct,other->策略proxy。 -
服务器端需要屏蔽对[
geoip:ru网站名称]的回传访问。否则,Yandex/WB/Ozon 等网站的监控程序会向审查机构报告你正在使用代理,审查机构可以通过分析流量模式找到你的 IP 连接。我知道这个方案比较复杂且不方便,但目前情况特殊。
顺便一提,对于 Windows 系统,所需的策略已经在 v2rayN 客户端中实现了(预设“除 RF 外全部”)。
我通常不会这样做,但这篇文章可能很快就会被删除,所以我请求大家帮忙传播这条信息 。如果没有宣传和社区的帮助,这件事会非常困难。
UDP 1. 文章发表一小时后,Happ 的开发者在其 Telegram 群组中否认这是一个漏洞,即使在自己的受众的压力下也拒绝修复它。
UDP 2.尽管如此,Happ 还是同意修复这两个漏洞。
UDP 3. Pavel (@seriouskaktus)编写了一个比 POC 更高级的检测器,该检测器已发布在文章https://github.com/cherepavel/VPN-Detector中。
