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上测试)。
重现步骤
设置
- 构建启用AWS SigV4的libcurl(自7.75.0起默认启用)
- 导出有效的AWS凭证(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)
- 启用详细模式(–verbose或CURLOPT_VERBOSE)
运行签名请求
运行简单的签名AWS请求,例如列出S3存储桶:
|
|
观察日志
在控制台(或重定向的日志)中,libcurl打印敏感信息:
|
|
重放请求
具有这些日志访问权限的攻击者可以立即在几分钟内重放请求:
|
|
只要签名在有效窗口内(通常为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: 无 赏金: 无