fix(sub): make Happ require auth on its local SOCKS/HTTP proxy (#6628)

Happ ships its local SOCKS5 (127.0.0.1:10808) and HTTP inbounds with
authorization disabled by default. Any app on the same device can then
connect to that proxy, bypassing Android's per-app VPN routing, and learn
the VPN server address - the leak publicly described in March-April 2026
for Happ, v2rayNG and other VLESS clients. Happ fixed its Xray API
exposure, but the unauthenticated local proxy remained.

Happ exposes a standard subscription header for this (no Provider ID
required): socks-auth-mode / http-auth-mode = auto|manual|from-json|
disable. A new subscription setting, subHappLocalProxyAuth (default
"auto"), sends both headers to Happ clients. Like every other Happ header
it is emitted only when Happ auto-detect is enabled and the User-Agent is
Happ, so panels that never opted into the Happ integration see no change.
An empty value sends nothing and keeps the client's own setting.

Verified on Happ Android 4.4.1 (Xray 26.7.28): a subscription carrying
socks-auth-mode manual + a test user/password switched the client's
Inbounds screen to Manual with those credentials on "refresh subscription",
and "auto" switched it to Auto with generated credentials.

Co-authored-by: Kirill Rudenko <rudenko@npp-energy.ru>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
Kirill Rudenko
2026-09-26 23:03:20 +03:00
committed by GitHub
parent 8979072bd9
commit 6ab718f813
27 changed files with 162 additions and 0 deletions
+5
View File
@@ -1676,6 +1676,11 @@
"subHappColorProfileDesc": "Custom iOS color theme as a JSON string, or resetcolors to restore the default colors.",
"subHappPingType": "Latency Ping Method",
"subHappPingTypeDesc": "How Happ measures node latency: via proxy (GET or HEAD), TCP, or ICMP.",
"subHappLocalProxyAuth": "Local Proxy Authorization",
"subHappLocalProxyAuthDesc": "Sends Happ socks-auth-mode / http-auth-mode. Without authorization, any app on the device can use Happ's local SOCKS5/HTTP proxy to reach the tunnel and learn the server address. \"Auto\" makes Happ generate random credentials; works without a Provider ID.",
"subHappLocalProxyAuthAuto": "Auto (random credentials)",
"subHappLocalProxyAuthDisable": "Disabled",
"subHappLocalProxyAuthUnset": "Not sent (client default)",
"subHappAutoConnect": "Auto-Connect on Launch",
"subHappAutoConnectDesc": "Instruct Happ to automatically connect to VPN when the application starts.",
"subHappAutoConnectType": "Auto-Connect Target",