整数溢出风险在HTTP/2代理窗口大小计算中的报告
摘要
curl中的HTTP/2代理实现包含缓冲区大小计算中的潜在整数溢出漏洞,可能导致内存损坏或拒绝服务。
AI使用声明
本报告由人类安全研究人员通过手动代码审查准备,未使用AI生成报告。
受影响版本
所有包含HTTP/2代理实现的curl版本(自该功能引入以来)。在Linux x86_64上使用curl 8.6.0进行了测试。
漏洞分析
检查cf-h2-proxy.c中的窗口大小计算:
|
|
计算H2_TUNNEL_WINDOW_SIZE / PROXY_H2_CHUNK_SIZE
如果任一值通过恶意HTTP/2帧被操纵,可能会溢出。
|
|
使用100MB窗口大小(PROXY_HTTP2_HUGE_WINDOW_SIZE
)可能导致内存耗尽。
支持材料/参考文献
- 易受攻击的代码位于curl源代码库中的lib/cf-h2-proxy.c
- 其他HTTP/2实现中也发现了类似漏洞(CVE-2019-9511,CVE-2019-9513)
影响
控制恶意HTTP/2代理服务器的攻击者可能:
- 导致整数溢出,进而导致内存损坏
- 通过极大的窗口大小触发资源耗尽
- 通过精心构造的窗口大小通告导致拒绝服务
影响范围限于:
- 使用启用HTTP/2代理支持的curl的系统
- 当连接到不可信或受损的HTTP/2代理时
- 要求攻击者处于中间人位置或控制代理服务器
建议修复
- 为窗口大小计算添加边界检查
- 为窗口大小实施合理的最大限制
- 添加对等方窗口大小通告的验证
- 考虑在大小计算中使用饱和算术
附加信息
此漏洞是通过手动代码审查发现的,重点关注HTTP/2代理实现中的整数处理。风险在一定程度上得到缓解,因为它需要代理服务器受损或中间人位置,但潜在影响证明解决这些问题是有必要的。
该漏洞与已知的HTTP/2实现缺陷具有共同特征,这些缺陷已在其他软件(例如nghttp2、Apache HTTP Server)中被利用。
时间线
- 11天前:extramayoextracheeseextrafries向curl提交报告
- 10天前:curl工作人员dfandrich、jimfuller2024和bagder发表评论,质疑漏洞的可利用性
- 10天前:bagder将报告状态更改为"不适用",认为不是安全问题
- 10天前:bagder请求披露此报告
- 9天前:bagder披露此报告
报告详情
- 报告日期:2025年7月6日,UTC时间12:45
- 报告者:extramayoextracheeseextrafries
- 报告对象:curl
- 报告ID:#3238249
- 严重程度:中等(4 ~ 6.9)
- 披露日期:2025年7月7日,UTC时间10:16
- 弱点:整数溢出
- CVE ID:CVE-2019-9511,CVE-2019-9513
- 赏金:无
- 账户详情:无