TLS密码套件在HTTP/3/QUIC支持中的错误配置
漏洞摘要
当使用curl命令的--ciphers
选项手动指定TLS密码套件时会出现此漏洞。在这种情况下,HTTP/3或QUIC无法正常工作,因为QUIC不依赖于为TLS 1.2或更早版本定义的传统TLS密码套件。因此,在使用--ciphers
选项时,尝试访问仅支持HTTP/3或QUIC的端点会导致连接失败。
curl实现问题:curl中的--ciphers
选项不区分传统TLS协议(TLS 1.2/1.3)和QUIC,在指定不兼容的密码套件时会导致配置冲突。
协议不匹配:HTTP/3使用QUIC,该协议不与--ciphers
选项指定的传统TLS密码套件一起工作。
受影响版本
1
2
3
4
|
curl 8.11.1 (x86_64-pc-linux-gnu) libcurl/8.11.1 OpenSSL/3.3.2 zlib/1.3.1 brotli/1.1.0 zstd/1.5.6 c-ares/1.34.3 libidn2/2.3.7 libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.64.0 nghttp3/1.6.0
Release-Date: 2024-12-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Largefile libz NTLM PSL SSL threadsafe TLS-SRP TrackMemory UnixSockets zstd
|
复现步骤
1
|
curl --disable -v --http3-only --ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA' https://1.1.1.1/cdn-cgi/trace
|
输出结果:
1
2
3
4
5
6
|
* Trying 1.1.1.1:443...
* failed setting cipher list: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:D
* QUIC connect to 1.1.1.1 port 443 failed: Could not use specified SSL cipher
* Failed to connect to 1.1.1.1 port 443 after 0 ms: Could not use specified SSL cipher
* closing connection #0
curl: (59) failed setting cipher list: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:D
|
即使限制--ciphers
参数的长度,仍然无法工作:
1
|
curl --disable -v --http3-only --ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256' https://1.1.1.1/cdn-cgi/trace
|
输出结果:
1
2
3
4
5
6
|
* Trying 1.1.1.1:443...
* failed setting cipher list: ECDHE-ECDSA-AES128-GCM-SHA256
* QUIC connect to 1.1.1.1 port 443 failed: Could not use specified SSL cipher
* Failed to connect to 1.1.1.1 port 443 after 0 ms: Could not use specified SSL cipher
* closing connection #0
curl: (59) failed setting cipher list: ECDHE-ECDSA-AES128-GCM-SHA256
|
支持材料/参考文献
影响
尝试将curl与--ciphers
选项一起用于HTTP/3或QUIC连接的用户会遇到连接失败问题。此问题可能会破坏依赖curl与HTTP/3/QUIC服务器交互的自动化或脚本。
项目团队回应
bagder (curl staff) 2025年2月7日 22:11 UTC:
请详细说明这如何成为一个安全问题?
jimfuller2024 (curl staff) 2025年2月8日 07:12 UTC:
期望是给定密码套件列表后,curl应该首先过滤出一组合适的密码选项并从中选择吗?如果是这样,这可以作为一个PR提交到curl/curl仓库,我们可以在那里讨论。
我也不明白这如何成为安全问题 - 如果提供错误的输入,有很多方法可以使curl无法工作…在输入不正确的情况下失败是适当的响应。可能发生的情况是您正在动态构建密码列表…构建该列表的任何内容都应该被修复。
bagder (curl staff) 于2025年2月10日 12:26 UTC将报告状态更改为"不适用"并关闭了报告。
bagder (curl staff) 13天前请求披露此报告:
根据项目的透明政策,我们希望所有报告都被披露并公开。
bagder (curl staff) 10天前披露了此报告。
报告详情
- 报告时间:2025年2月7日 22:09 UTC
- 报告者:zzq1015
- 报告对象:curl
- 报告ID:#2981303
- 严重程度:无评级 (—)
- 披露时间:2025年7月6日 21:05 UTC
- 弱点:无
- CVE ID:无
- 赏金:无