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秘密泄露给不太受信任的操作员。
官方回应
curl开发团队认为这不是安全问题,因为:
- curl不保证秘密不会被记录
- CURLOPT_VERBOSE文档中有警告:“这可能会显示来自标头和数据的敏感内容”
- 包含安全信息的日志访问应始终在curl运行环境的上下文/约束中适当管理
报告最终被标记为"不适用"并公开披露。