Xray-core icon indicating copy to clipboard operation
Xray-core copied to clipboard

[Bug] 关于xtls-rprx-vision偶发的ssl错误的分析

Open xsm1997 opened this issue 2 years ago • 9 comments

关于1.6.6-2也会发生的偶发ssl错误,我这里抓包有新的发现。

简要概括:xtls转发流量时,漏掉了某些包。

左边bug.pcapng为本地透明代理后抓到的包,右边orig.pcapng为在服务器上抓到的包。

image image

注意两个图中的142.251.42.174和172.217.31.174不同是因为我在服务端开了sniffing,实际上是同一个连接经过代理。

这个包可以对上,是正常的。

image image

从这里开始,流复制发生了跳跃。本地收到的包也被解析成了Continuation Data,并且没有tls header。

image

本地收到了错误的包后,应用马上检测到,报错并发送了TCP RST。(那个客户端发的长度为106的Application Data应该是TLS 1.3的Alert?)

image image

注意到发生错误的后一个服务器上的包,其tls header(右图)也被复制到了本地客户端(左图),成为了Continuation Data的一部分。至此可以肯定是发生了流的错误复制。流复制发生了跳过的可能性极高,因为即使在完整的抓包记录中,搜索客户端没收到的那部分包中的data,也找不到任何结果。

经过计算,这个样本中发生跳过的长度为2456-2466。有长度为10的区间是因为不确定在处理的时候有没有算上tls header(长度为5)。

我已上传脱敏后的抓包记录,供开发者分析。

xtls_bug.zip

没有抓取服务端的xtls调试信息的原因是,目前这个bug已经很偶发,且不能稳定复现。仅在特定客户端发起的大量https请求中少量复现。所以,服务端抓取有用的日志非常困难。

xsm1997 avatar Dec 15 '22 14:12 xsm1997

@yuhan6665 大佬可以看一眼吗?

xsm1997 avatar Dec 15 '22 14:12 xsm1997

强烈恳请大佬们修复这个问题,困扰我太久了,完全影响体验。

GreatMichaelLee avatar Dec 15 '22 14:12 GreatMichaelLee

@xsm1997 感谢大佬分析 这个问题需要仔细研究 你提到 仅在特定客户端发起的大量https请求中少量复现 有没有发现哪个客户端环境比较容易复现?

yuhan6665 avatar Dec 15 '22 15:12 yuhan6665

除浏览器以外的很多客户端都有此现象,包括go的http包、使用java的客户端(如Jetbrains大多数IDE)、linux下的curl、git等。linux下的客户端比windows下的容易触发此bug。在更新了新版后,浏览器访问网页的请求几乎不会遇到这个bug了。

xsm1997 avatar Dec 15 '22 15:12 xsm1997

Capture traffic in client and server, then

while true;do curl google.com ;done

Run a evening, maybe could catch 😏

cross-hello avatar Dec 15 '22 16:12 cross-hello

#1408 抓这个的包试试看看会不会容易复现

coreff avatar Dec 15 '22 18:12 coreff

我这个抓包的访问也是dl.google.com,看来大家都是访问google的某些站(包括go的)触发bug比较多。

xsm1997 avatar Dec 15 '22 18:12 xsm1997

小米浏览器第一次打开网页几乎是必显示ERR_SSL_BAD_RECORD_MAC_ALERT的。要刷新才会好。

hrimfaxi avatar Dec 16 '22 00:12 hrimfaxi

小米浏览器第一次打开网页几乎是必显示ERR_SSL_BAD_RECORD_MAC_ALERT的。要刷新才会好。

一样,安卓更容易复现,安卓用的是v2rayNG+chrome, windows下也会有,相对概率小一点,用的客户端是v2rayN + chrome.

GreatMichaelLee avatar Dec 16 '22 01:12 GreatMichaelLee

1.7.0版本用了几天,v2ranN+windows+chrome这个错误已经几乎没有了。但是qv2ray+mac+chrome还是蛮频繁的。linux下倒是没有测试。

xinxuwang avatar Jan 03 '23 01:01 xinxuwang

qv2ray+mac+chrome 一样的配置。更新vs code extension可以稳定复现。

bboysnick5 avatar Jan 03 '23 04:01 bboysnick5

1.7.0,v2rayng+android+chrome,v2rayn+windows+chrome,不稳定复现,不频繁,但还是能遇到

even0306 avatar Jan 03 '23 06:01 even0306

哔咔漫画(PicACG)用vision流控什么都加载不出来,也是这个原因引起的吗? 其他流控和协议都访问正常

zycboss avatar Jan 03 '23 09:01 zycboss

Windows 10 XRay 1.7.0 Chrome 108

用 vision 流控,Chrome 能打开 Youtube Music 网站,但是无法听任何歌曲,一直转圈加载。我这里 100% 复现。 换成普通TLS,马上就正常了。

mclovin-2k avatar Jan 06 '23 04:01 mclovin-2k

这个issue竟然把主席引出来了 你做的好啊()

Fangliding avatar Jan 06 '23 15:01 Fangliding

这个issue竟然把主席引出来了 你做的好啊()

抛砖引玉 :)

yuhan6665 avatar Jan 06 '23 15:01 yuhan6665

什么时候发fix版本?

---原始邮件--- 发件人: @.> 发送时间: 2023年1月6日(周五) 晚上11:17 收件人: @.>; 抄送: "michael @.@.>; 主题: Re: [XTLS/Xray-core] [Bug] 关于xtls-rprx-vision偶发的ssl错误的分析 (Issue #1444)

这个issue竟然把主席引出来了 你做的好啊()

抛砖引玉 :)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

GreatMichaelLee avatar Jan 07 '23 02:01 GreatMichaelLee

感谢你提交的详细错误报告,请使用 v1.7.2+ https://github.com/XTLS/Xray-core/releases/tag/v1.7.2

RPRX avatar Jan 07 '23 18:01 RPRX

@RPRX 话说不知道第一次连接必出问题是特性还是BUG 可能修好吗()

Fangliding avatar Jan 07 '23 18:01 Fangliding

@RPRX 话说不知道第一次连接必出问题是特性还是BUG 可能修好吗()

如果只有 XTLS Vision 有此问题,应该是 BUG

RPRX avatar Jan 07 '23 18:01 RPRX

@Fangliding 类似 https://github.com/XTLS/Xray-core/issues/1506 ?

RPRX avatar Jan 09 '23 09:01 RPRX

@RPRX 是我傻了 更新服务端不更新客户端 把客户端换到最新似乎没问题了()

Fangliding avatar Jan 09 '23 10:01 Fangliding