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

本文详细分析了curl 7.88.1版本中摘要认证实现存在的时序攻击漏洞。由于在digest.c第360行使用了非恒定时间字符串比较函数strcmp(),攻击者可通过分析响应时间差异推断服务器支持的认证算法,存在信息泄露风险。

报告 #3346118 - curl摘要认证中的时序攻击漏洞

漏洞概述

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

注意: 本漏洞的发现和报告生成均未使用人工智能。

受影响版本

  • 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. 对本地服务器运行时序攻击验证脚本:
1
python3 poc_timing_attack.py http://localhost:8080/protected
  1. 观察算法比较的时间差异:
1
2
3
测试算法:MD5       - 963236.5 ns
测试算法:MD5-sess  - 826390.0 ns
测试算法:SHA-1     - 814495.0 ns

验证脚本将识别响应时间明显不同的算法:

1
2
3
4
漏洞确认:时序攻击可行
   服务器可能使用算法:MD5
   响应时间:963236.50 ns
   偏差:比平均值高25.9%

影响分析

攻击者可利用此漏洞:

  • 确定服务器支持的认证算法
  • 通过识别较弱算法(如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开发团队认为这不是安全问题:

  • 服务器支持的认证机制会向未认证客户端公开,这是协议设计意图
  • 选择机制本身不会使后续认证变弱
  • 通过观察后续请求长度更容易检测机制选择

报告最终被标记为"不适用"并公开披露,同时报告者因使用AI生成验证脚本被禁止提交进一步报告。

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