根据文章“uTLS 的 Chrome 指纹泄漏问题探讨”,uTLS上的一个漏洞对于主流的代理工具造成了严重的威胁。该工具主要用于客户端哈希防篡改以模拟真实浏览器,但是有开发者发现该工具存在一个非常严重的指纹泄露漏洞。
有 50% 的概率,uTLS 会创造出一个矛盾的指纹:外部声称优先 $AES$,但 ECH 内部却用了 $ChaCha20$,因此将可以被立即识别为模仿浏览器。这一导致身份泄漏的漏洞存在于 2023.12 - 2025.10 之间的所有版本。
依赖 uTLS 库进行指纹模拟的代理工具受到影响,如 XRay fingerprint 默认设置为 chrome ,这将导致指纹泄露,需要手动修改为firefox或者其他的浏览器。
指纹泄露可被GFW利用从而极大地提高识别效率。虽然每个连接的泄露概率是50%,但代理工具会不断产生大量连接,因此对于GFW来说,识别率几乎可以达到100%。
uTLS指纹泄露漏洞
请注意,此漏洞会导致UTLS Chrome指纹纯被动识别,识别率50%(但是鉴于代理软件TCP连接数巨大,识别率可到100%)
影响范围 2023.12 - 2025.10
请立刻停用旧版客户端的Chrome指纹或更新客户端
*注 ECH GREASE 是网站不支持ECH时候发送的假ECH占位,目的是为了让防火墙区分不出来是不是真ECH
修复方案:在 GREASE ECH 中使用 AES 加密 Chrome 指纹识别
使用 GREASE ECH 时,Chrome 的指纹识别存在不匹配,这与密码套件的选择有关。Chrome 在选择外部 ClientHello 和 ECH 的首选密码套件时,会基于硬件支持保持一致。这意味着,例如,如果它首选 AES 作为外部密码套件,那么 ECH 也会使用 AES。Chrome 的 utls 中的 parrot 硬编码了外部密码套件的 AES 偏好,但 ECH 的密码套件选择却是在 AES 和 ChaCha20 之间随机选择的。因此,有 50% 的概率在外部密码套件使用 AES 的情况下,ECH 却选择了 ChaCha20,这在 Chrome 中是不可能的。本次提交使 Chrome 的 parrot 仅对 GREASE ECH 使用 AES,与当前外部密码套件的 AES 偏好保持一致。我认为这只是 GREASE ECH 中的一个问题,因为在真正的 ECH 中,当首选 AES 时,Chrome 会选择第一个有效的密码套件,这与 utls 的情况相同。因此,这方面无需进行任何更改。感谢原报告者报告此问题。