curl摘要认证时序攻击漏洞分析

本文详细分析了curl摘要认证实现中的时序攻击漏洞,该漏洞源于非恒定时间字符串比较函数strcmp()的使用,攻击者可通过分析响应时间差异来确定服务器支持的认证算法。

时序攻击漏洞在curl摘要认证中的非恒定时间字符串比较

报告摘要

curl的摘要认证实现中存在时序攻击漏洞,该漏洞源于在digest.c第360行使用非恒定时间字符串比较函数(strcmp())来比较认证算法。这使得攻击者能够通过响应时间分析来确定服务器支持的认证算法。

本漏洞的发现和报告未使用任何AI工具。

受影响版本

  • curl版本:7.88.1 (x86_64-pc-linux-gnu)
  • 平台:Linux Ubuntu 22.04.3 LTS

复现步骤

  1. 设置启用摘要认证的测试服务器:
1
2
# 使用简单的Python HTTP服务器启用摘要认证
python3 -m http.server 8080 --digest
  1. 对本地服务器运行时序攻击PoC:poc_timing_attack.py
1
python3 poc_timing_attack.py http://localhost:8080/protected
  1. 观察算法比较的时间差异:
1
2
3
Testing algorithm: MD5             -   963236.5 ns
Testing algorithm: MD5-sess        -   826390.0 ns
Testing algorithm: SHA-1           -   814495.0 ns

PoC将识别响应时间明显不同的算法:

1
2
3
4
VULNERABILITY CONFIRMED: Timing attack possible
   The server likely uses algorithm: MD5
   Response time: 963236.50 ns
   Deviation: +25.9% from average

影响分析

攻击者可利用此漏洞:

  • 确定服务器支持的认证算法
  • 通过识别较弱算法(如MD5 vs SHA-256)促进针对性攻击
  • 获取服务器配置的侦察信息
  • 如果结合其他漏洞,可能绕过认证

该漏洞违反了安全敏感操作应使用恒定时间比较的原则,可能导致认证机制指纹识别。

附加信息

  • CVSS评分:5.3(中危)- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
  • 修复建议:在/lib/vauth/digest.c:360中将strcmp()替换为Curl_timestrcmp()
  • 类似漏洞:之前在curl代码库的其他部分已通过恒定时间比较修复解决

项目方回应

curl工作人员bagder表示:

  • 不认为这是一个安全问题
  • 服务器支持的认证机制会向未经认证的客户端公布,这是协议设计的本意
  • 选择机制本身不会使后续认证变弱
  • 通过观察后续请求的长度来检测机制要容易得多

最终,curl团队将报告状态改为"不适用"并决定公开披露此报告。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计