curl默认最低TLS版本设置为TLS v1.0带来的加密安全风险

本文详细分析了curl库中默认将TLS v1.0设置为最低版本的安全隐患,包括可能遭受BEAST等攻击的风险,并探讨了代码实现和修复建议。

curl默认最低TLS版本设置为TLS v1.0(加密弱点)

报告摘要

curl将TLS v1.0设置为默认最低版本,该版本已过时且易受BEAST等攻击,对数据完整性和保密性构成风险。此问题通过手动代码审查发现,未使用AI识别问题或生成本报告。

受影响版本

  • 版本:8.15.0-DEV(来自https://github.com/curl/curl的源代码,审查时的提交)
  • 平台:任何使用curl且OpenSSL版本较旧未强制更严格最低版本的平台
  • curl -V输出不适用,因为这是源代码问题

重现步骤

  1. 查看文件./docs/libcurl/opts/CURLOPT_SSLVERSION.md。在文档中可以看到,当使用CURL_SSLVERSION_DEFAULT选项时,curl将TLS v1.0设置为默认最低版本(自7.39.0版本起),除非使用的TLS库强制要求更高版本。

  2. 在同一GitHub仓库中,打开文件./lib/vtls/openssl.c并搜索CURL_SSLVERSION_DEFAULT。您会注意到,当使用此默认设置时,curl不会设置特定的最低TLS版本,而是遵循OpenSSL库的默认值。如果使用较旧版本的OpenSSL,这可能低至TLS v1.0。

  3. 如果您使用较旧的OpenSSL版本(如1.1.0之前的任何版本,默认使用TLS v1.0)构建curl,或者仅使用CURL_SSLVERSION_DEFAULT设置而不更改它,curl最终可能会使用TLS v1.0建立连接。这是一个问题,因为TLS v1.0易受BEAST等攻击,可能使您的数据面临风险。

  4. 想看到危险吗?设置curl连接到允许TLS v1.0的服务器,如测试服务器或使用openssl s_server。使用默认设置或旧的OpenSSL库,curl将降级到TLS v1.0。攻击者随后可以利用此弱连接窥探或篡改数据。

支持材料/参考文献

  • ./docs/libcurl/opts/CURLOPT_SSLVERSION.md(默认TLS v1.0最低版本的文档)
  • ./lib/vtls/openssl.c(处理CURL_SSLVERSION_DEFAULT而未强制更高最低版本的代码)

影响

摘要:攻击者可以使用BEAST等攻击破解TLS v1.0,窃取数据或干扰连接。如果curl使用较旧的OpenSSL库或坚持默认最低版本,就会发生这种情况。这会使HTTPS/FTPS链路上的敏感信息面临风险,特别是对于不了解此默认设置的用户。

时间线及讨论

6天前 - monkey_dee向curl提交报告

curl团队回应

  • 感谢报告,将在24小时内调查并回复
  • 初始印象是使用旧版OpenSSL可能有更多问题
  • 认为这是文档记录的行为,不是漏洞
  • 建议在公开场合讨论移除TLSv1.0支持的可能性

讨论要点

  • 使用十年旧的OpenSSL版本构建curl不应惊讶存在严重安全问题
  • 但默认设置可能使用户陷入不安全配置
  • 建议在curl代码中将默认最低版本提升至TLS v1.2

报告状态:已关闭,标记为"不适用"

披露:根据项目透明政策,报告被公开披露

报告详情

  • 报告时间:2025年7月10日 18:24 UTC
  • 报告者:monkey_dee
  • 报告对象:curl
  • 严重程度:中等(4~6.9)
  • 披露时间:2025年7月10日 21:42 UTC
  • 弱点类型:使用破损或有风险的加密算法
  • CVE ID:无
  • 赏金:无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计