iPhone 上有一类浏览器的卖点是「所有流量都走代理」:网页请求、DNS 查询全部经远端代理服务器转发,网站只能看到代理的 IP。iOS 版 Tor 浏览器、Onion Browser、Mysk 团队自己的 Psylo 都是这个设计。8 月 4 日 Mysk 的安全公告说,这个前提在三个 WebKit 特性面前不成立:DNS 预取、WebAuthn 关联来源请求、WebTransport 都会绕过代理配置,把流量直接从设备发出,网站拿到的是用户真实网络地址。
调查的起点是一个 Psylo 用户的 bug 报告:访问部分网站时出现 DNS 泄漏,且只有特定网站触发。按设计,Psylo 每个 silo 的流量都走 Mysk 私有代理网络,DNS 查询应全部从代理服务器发出。顺着线索,Mysk 找到了 DNS 泄漏源头,还发现了另外两条直接暴露设备真实 IP 的通道。
三条绕过代理的通道
三条泄漏都存在于 WebKit 内部,绕开了 iOS 17 / macOS 14 引入的 WKWebsiteDataStore.proxyConfigurations 接口——代理浏览器正是靠它把网页流量导向代理。
DNS 预取。网站通过 <link rel="dns-prefetch"> 标签让浏览器提前解析主机名,省掉后续连接的一次查询延迟。WebKit 处理这个标签时走设备的常规 DNS 路径,与代理设置无关。攻击手法很直接:页面为每个访客生成唯一子域名,然后在自己的权威 DNS 服务器上观察查询从哪里到达。桌面 Safari 从 Safari 5 就支持该标签,iOS 直到 iOS 26.0(2025 年 9 月)才启用,这解释了为什么只有部分网站触发泄漏。
WebAuthn 关联来源请求。通行密钥(passkey)通常绑定单一域名,关联来源请求让一个 passkey 可以在组织拥有的多个域名间共用:页面请求凭据时若 rpId 与自身来源不同,客户端要先抓取 https://<rpId>/.well-known/webauthn 这个 JSON 文件确认白名单。抓取请求由操作系统凭据服务直接发出,走设备自己的网络栈,宿主浏览器配置的代理对它毫无约束。页面可把 rpId 指向任意主机,配合 conditional mediation,无需用户交互就会触发。该特性随 iOS 18.0(2024 年 9 月)上线。
WebTransport。调用 new WebTransport(url) 会从设备直接建立 QUIC 连接,WebKit 用自己的网络参数建连,会话代理不在其中,服务器看到的自然是设备真实 IP。WebTransport 在 iOS 26.4(2026 年 3 月)公开可用,一个例外是 Onion Browser 的 Silver 安全级别——它通过 Lockdown Mode 禁用了 WebTransport。
图:leaks.psylo.app 概念验证页面,可实测各类泄漏。来源:mysk.blog
iCloud Private Relay 同样中招
三条泄漏对 iCloud Private Relay 同样生效。Private Relay 是 iCloud+ 订阅用户的隐私功能,把 Safari 的网页流量和 DNS 查询放进双跳中继,设计目标是任何单一实体(包括苹果自己)都无法同时看到用户身份和访问站点。
中招原因在于三条泄漏都发生在 WebKit 标准页面加载流程之外:Private Relay 平时代理 Safari 的 DNS 查询,预取查询绕过了它;WebAuthn 验证请求由系统凭据服务发出,从未进入中继路径;WebTransport 连接在代理流量之外建立。结果相同:目标服务器拿到设备真实 IP。
VPN 不受影响:它在系统层隧道全部网络流量,WebKit 无论从哪条通道发数据都出不了隧道。代理浏览器在应用层做承诺,VPN 在系统层封口,这一层差异决定了谁更可靠。
苹果商店政策放大影响面
影响范围被苹果自己的政策放大了:App Store 要求所有 iOS 浏览器必须基于 WebKit,代理浏览器只能依赖 WKWebsiteDataStore.proxyConfigurations 这类应用层接口。任何依赖该接口的 iOS 浏览器——包括全部 iOS 版 Tor 浏览器和 Psylo——都在泄漏之列,开发者再小心也绕不开。
Mysk 已联系 Tor Project 和 Onion Browser 的开发者,苹果尚未公开回应,AppleInsider 报道称苹果「必须在未来的更新中解决这三个问题」。截至写作时没有 CVE 编号,也没有修复版本发布。
Psylo 1.3.1 的修法:默认禁用,显式开启
Mysk 先在自己的浏览器里堵上了:Psylo 1.3.1 屏蔽 dns-prefetch 提示,默认禁用 WebTransport 和 WebAuthn。二者有正当用途,每个 silo 保留开关,需要时手动开启,把权衡交还给用户。
图:Psylo 浏览器图标。来源:mysk.blog
这个修法侧面说明了问题的性质:三条泄漏的共同点是功能特性自己发起网络请求,代理机制管不到,修复意味着重新设计这些特性的网络路径。HN 讨论里已有用户用 leaks.psylo.app 实测,WebAuthn 一项稳定泄漏真实 IP,WebTransport 时好时坏。
代理浏览器与 Private Relay 的价值建立在「所有流量都走代理」这个前提上,WebKit 用三个反例说明前提需要打折扣。对普通 iPhone 用户,把 Private Relay 当成匿名保证会失望,当成换 IP 与提速手段仍有价值;对开发者,默认禁用、显式开启是当下唯一可控的做法。苹果什么时候补齐这三个洞,才是真正的问题。
参考链接:
- mysk.blog:IP and DNS Leaks in WebKit Affecting Proxy Browsers and iCloud Private Relay
- AppleInsider:WebKit leaks in iOS & macOS expose user data in spite of proxy use
- HN 讨论 (49176697)