报告编号: ALI-GW-2026-0211
发现日期: 2026-02-11
目标资产:(未备案域名)→(阿里云)
漏洞类型: DPI 深度包检测逃逸 / Fail-Open 设计缺陷
威胁等级: 高危
1. 漏洞概述
阿里云网关针对未备案域名的 HTTPS 访问实施 SNI 阻断策略,但其深度包检测 (DPI) 引擎在处理分片的 TLS Client Hello 报文时存在严重逻辑缺陷。当 Client Hello 因携带后量子密码 (PQC) 扩展而超过以太网 MTU(1500 字节) 时,将被 TCP 自然分片传输。此时 DPI 引擎无法完成 TCP 流重组或解析超时,导致策略决策失败即放行 (Fail-Open),从而完全绕过阻断。
该漏洞导致当前所有主流浏览器及新版网络工具 (默认启用 PQC) 均可无障碍访问未备案域名,监管策略形同虚设。
2. 背景与受影响范围
2.1 阻断机制简述
阿里云网关对目的 IP 为其云资源的 HTTPS 流量,会解析 TLS 握手阶段的 Client Hello 报文,提取 SNI(Server Name Indication) 字段,并与备案白名单比对。若域名未备案,则直接回复 TCP RST 中断连接。
2.2 影响范围
- 所有启用 PQC(X25519MLKEM768) 的 TLS 1.3 客户端,包括:
- Chrome 124+ / Firefox 124+(默认启用)
- curl 8.6.0+(--tls13-ciphers 含 PQC 套件)
- 其他基于 BoringSSL 、 NSS 、 OpenSSL 3.2+并启用 PQC 的软件
- 受影响地域:疑似阿里云全网网关,非特定区域。
不受影响的客户端:
- 禁用 PQC 的客户端 (如
--curves X25519) - 纯 TLS 1.2 及以下、不支持 key_share 扩展的旧版客户端
- 使用 Windows Schannel(默认无 PQC) 的 IE/Edge(旧版)
3. 技术分析
3.1 根本原因:DPI 引擎未实现 TCP 流重组
阿里云网关的 DPI 模块仅检测每个 TCP 连接的第一个数据包,并假设该包包含完整的 TLS Record 。对于超过 MTU 的 Client Hello,协议栈会将其拆分为多个 TCP 段发送:
- 第 1 个 TCP 段:TLS Record 头 + 部分扩展 (通常包含 SNI)
- 后续 TCP 段:剩余扩展 (含 PQC 公钥等)
DPI 引擎在仅收到第一个 TCP 段时:
- 根据 TLS Record Length 字段发现数据不完整 (如长度 1900,已收 1400)
- 未执行流重组 (Reassembly) 以等待后续分段
- 直接判定为 「不可解析」 或 「超时」,触发 Fail-Open 策略——放行该连接
结论:只要 Client Hello 大小 > MSS(通常 1460),触发 TCP 分段,即可无条件绕过阻断。
3.2 触发条件量化
| 客户端配置 | TLS 版本 | KeyShare 扩展 | 包大小 | TCP 分段 | 结果 |
|---|---|---|---|---|---|
| Chrome 134 (默认) | 1.3 | X25519MLKEM768 | ~1900 | ✅ | 绕过 |
| Firefox 135 (默认) | 1.3 | X25519MLKEM768 | ~1900 | ✅ | 绕过 |
| curl 8.11.0 (默认) | 1.3 | X25519MLKEM768 | ~1800 | ✅ | 绕过 |
curl 8.11.0 (--curves X25519) | 1.3 | X25519 | ~300 | ❌ | 拦截 |
| curl (伪装 TLS 1.2 + PQC) | 1.2 | X25519MLKEM768 | ~2400 | ✅ | 绕过 |
| Firefox (强制 TLS 1.2) | 1.2 | 无 | ~180 | ❌ | 拦截 |
| Windows 11 + Edge (旧版) | 1.2 | 无 | ~450 | ❌ | 拦截 |
关键证据:
- 分片必绕过:所有触发 TCP 分片的请求均成功获得 200 OK,未触发 RST 。
- 不分片必拦截:任何尺寸<1460 且完整的 Client Hello 均立即被 RST 。
Tip:阿里云作为国内重要的云服务提供商,这种问题也属实是好笑了 (yyyyt 也提到 gfw 曾也犯过这样的问题


