curl built with GnuTLS backend defaults to weak crypto parameters
Timeline nyymi 提交报告至 curl。 2025年10月31日,晚上9:48 (UTC)
摘要
使用GnuTLS后端配置的curl(--with-gnutls)默认使用库的“NORMAL”作为基础加密安全级别。根据GnuTLS文档:
|
|
因此,该库将允许使用弱消息认证(例如1024位DH组或使用DH复合组)的连接。 幸运的是,实际利用所需的不安全服务器配置相当罕见,但即使在今天,也不能完全排除这种可能性。
此问题的发现和报告未使用任何AI辅助工具。
受影响版本
- 8.16.0
- 8.17.0-DEV (当前 master 分支)
复现步骤
|
|
建议的修复
建议的修复方法是通过使用SECURE192基础级别,默认采用192位安全级别:
|
|
实现修复的示例补丁:
|
|
参考资料
影响
允许弱加密连接到配置不当的服务器,从而使处于中间人位置的潜在攻击者能够破解加密。
时间线评论摘要
nyymi (2025年11月1日,上午3:58 UTC): 询问如果NORMAL被记录为“意味着所有已知的安全密码套件”而GnuTLS没有做到这一点,这个bug是否应该提交给GnuTLS。
回复指出,移除SHA1密码套件并不能修复GNUTLS_PROFILE_LOW允许1024位DH组、DH复合组和RSA密钥的问题。优先级字符串同时控制着使用的密码和使用的加密安全参数(GNUTLS_PROFILE_… -> GNUTLS_SEC_PARAM_…),两者都受DEFAULT影响。
bagder (curl 工作人员) (2025年11月1日,上午10:07 UTC): 同意如果NORMAL没有使用“已知的安全密码套件”,那肯定是GnuTLS应该修复的bug。如果这个选项被视为安全问题,问题主要在GnuTLS,但我们可能仍想在代码中修复它以帮助用户。需要与GnuTLS专家讨论以确定必要的调整。
nyymi (2025年11月1日,下午12:34 UTC): 据理解,客户端应用程序无法直接调整安全配置文件。目前只能通过优先级字符串在LOW和HIGH配置文件之间选择(NORMAL,SECURE128使用LOW配置文件,SECURE192和SECURE256使用HIGH配置文件)。HIGH配置文件作为libcurl默认值可能过于严格。
icing (curl 工作人员) (2025年11月1日,下午12:50 UTC):
指出libcurl客户端可以通过CURLOPT_SSL_CIPHER_LIST显式设置gnutls完整优先级字符串。
nyymi (2025年11月3日,上午8:54 UTC): 详细阐述了漏洞利用的实际风险和前提条件,包括1024位RSA和1024位DH组的可利用性、攻击者所需的条件,并与现代OpenSSL的默认行为进行了对比(OpenSSL默认拒绝1024位DH组)。
nyymi (2025年11月3日,上午9:46 UTC):
提出了缓解建议:添加一个配置选项(例如--accept-gnutls-weak-crypto)来指定GnuTLS默认安全级别。如果未设置,默认安全级别为SECURE192。如果指定了该选项,则使用NORMAL。
jimfuller2024 (curl 工作人员) (2025年11月3日,上午10:00 UTC): 认为这有些令人困惑,既然curl用户已有变通方案,curl可能不需要做任何事情,这更可能是GnuTLS需要考虑的事情。
nyymi (2025年11月3日,下午2:21 UTC): 认为curl有责任修复,因为GnuTLS文档明确说明了使用NORMAL作为基线的结果,而curl的期望是默认安全。
nyymi (2025年11月4日,上午3:30 UTC):
发现可以使用%PROFILE_MEDIUM来强制执行中等配置文件。
dueno1 (GnuTLS 维护者) (2025年11月4日,下午12:36 UTC):
同意是时候收紧默认值并更新文档。建议curl暴露一种在构建时指定默认优先级字符串的方法(例如./configure --with-default-gnutls-priority-string=...),将责任推给用户或发行版。
bagder (curl 工作人员) (2025年11月5日,上午7:41 UTC): 同意为构建者提供更改curl构建使用的加密配置的方法是一个公平的建议,但curl不能推卸自己的责任:curl应该构建和提供安全的默认值。认为GnuTLS也需要这样做。
bagder (curl 工作人员) (2025年11月10日,上午9:49 UTC): 将报告状态更改为“信息性”并关闭。如果这被视为安全问题,问题属于GnuTLS而不是curl。对于早于修复版本的GnuTLS,仍应讨论是否在curl中采取某些措施。可能在GnuTLS进行调整之前,不应该在curl中修复它,以免在官方修复之前引起对该问题的注意。
nyymi (2025年11月20日,上午11:03 UTC): 询问鉴于GnuTLS似乎要等到明年才有计划,而指导是在此期间调整应用程序,那么现在是否应该这样做。
bagder (curl 工作人员) (15天前): 希望curl为用户构建得安全,无论他们是否使用发行版。如果用户使用GnuTLS构建,期望默认使用安全选项和密码。发行版可以设置自己的选择,但世界更大。认为发行版不会影响curl中的GnuTLS密码。同意可以暴露构建时指定默认优先级字符串的方法,但这在这里没有帮助,因为希望为默认用户修复构建。认为应该继续采用@nyymi上面的建议,因为感觉等太久不合适。并指出这也将导致我们在公开场合讨论这个问题。
bagder (curl 工作人员) (1天前): 已合并到git:https://github.com/curl/curl/pull/19853
nyymi (1天前): 请求公开此报告。
bagder (curl 工作人员) (1天前): 同意公开此报告。
报告于 2025年10月31日,晚上9:48 UTC 报告者 nyymi 报告对象 curl 报告 ID #3407352 状态 信息性 严重性 无 (0.0) 公开于 2025年12月8日,上午10:45 UTC 弱点 加密强度不足 CVE ID 无 赏金 无