libcurl AWS SigV4签名泄露漏洞深度解析

本文详细分析了libcurl在启用AWS SigV4签名支持时存在的安全漏洞,当开启详细日志记录时会泄露字符串签名和HMAC签名,可能导致AWS凭证泄露和API调用重放攻击。

AWS SigV4签名通过libcurl详细日志记录泄露

报告概述

当libcurl构建了AWS SigV4支持时,启用详细日志记录(CURLOPT_VERBOSE或–verbose)会导致库将字符串签名和最终的HMAC签名打印到日志中。

由于签名在几分钟内保持有效并且直接来自AWS凭证,此行为会将敏感材料泄露到日志文件或控制台中。任何具有这些日志读取权限的操作员、日志聚合系统或低权限账户都可以重放经过身份验证的AWS API调用或恢复签名请求的详细信息。

这是libcurl的http_aws_sigv4.c中的凭证泄露漏洞。

受影响组件

文件: lib/http_aws_sigv4.c 函数: aws_sigv4_add(),该函数使用infof()调用字符串签名和计算出的签名。 影响: 启用了AWS SigV4签名的最新libcurl(在8.x上测试)。

重现步骤

设置

  1. 构建启用AWS SigV4的libcurl(自7.75.0起默认启用)
  2. 导出有效的AWS凭证(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)
  3. 启用详细模式(–verbose或CURLOPT_VERBOSE)

运行签名请求

运行简单的签名AWS请求,例如列出S3存储桶:

1
2
3
4
5
AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY... \
AWS_SECRET_ACCESS_KEY=SECRET... \
curl --aws-sigv4 "aws:amz:us-east-1:s3" \
     --verbose \
     https://s3.amazonaws.com/

观察日志

在控制台(或重定向的日志)中,libcurl打印敏感信息:

1
2
* string-to-sign: AWS4-HMAC-SHA256 20250929T124500Z ...
* signature: 7a5d1c84e2c3d8f9...

重放请求

具有这些日志访问权限的攻击者可以立即在几分钟内重放请求:

1
2
curl -H "Authorization: AWS4-HMAC-SHA256 Credential=..., SignedHeaders=..., Signature=7a5d1c84e2c3d8f9..." \
     https://s3.amazonaws.com/

只要签名在有效窗口内(通常为5分钟),重放就会成功。

影响

机密性: AWS API凭证/签名泄露到日志中 完整性: 攻击者可以重放AWS API调用(例如,列出存储桶、上传/下载对象) 可用性: 重放可能被滥用以使用有效的签名请求淹没服务 实际场景: 任何使用–verbose进行故障排除的团队,或将libcurl输出记录到中央日志收集器的团队,都会无意中将AWS秘密泄露给不太受信任的操作员。

项目方回应

dfandrich (curl工作人员) 评论: curl不保证秘密不会被记录。除了此来源之外,还有许多其他秘密来源也被记录;例如参见最近的PR https://github.com/curl/curl/pull/18535。CURLOPT_VERBOSE文档中还有一个警告,即"这可能会显示来自标头和数据的敏感内容"。

jimfuller2024 (curl工作人员) 评论: 同意@dfandrich - 正如他提到的,我们在CURLOPT_VERBOSE中记录了这一点,这也显示在手册页(–version)上…这不是一个安全问题,我们说过"请不要这样做"。包含安全信息的日志访问应始终在curl运行环境的上下文/约束中进行适当管理。

bagder (curl工作人员) 将报告关闭并将状态更改为"不适用": 认为不是安全问题。

bagder (curl工作人员) 请求披露此报告: 根据项目的透明政策,我们希望所有报告都被披露并公开。

报告详情

报告时间: 2025年9月29日16:45 UTC 报告者: leftyha 报告对象: curl 报告ID: #3361913 严重性: 无评级(—) 披露时间: 2025年10月1日07:00 UTC 弱点: 信息泄露 CVE ID: 无 赏金: 无

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