整数溢出在krb5_read_data()中导致(可能的)大规模recv()写入
漏洞摘要
在krb5_read_data()函数中存在两个问题:
问题1:整数溢出漏洞
|
|
当len值经过类型转换后变为负数时,会绕过长度检查。随后在以下代码中:
|
|
如果len为-1,nread将被转换为(size_t)-1(即巨大的正数),最终传递给recv()函数,可能导致越界读取。
问题2:逻辑错误
在do-while循环结束后,将len=0传递给decode()函数,而不是实际的缓冲区长度。
受影响版本
自引入该代码以来的所有版本。
复现步骤
提供了完整的复现环境,包括:
repro_server.py
|
|
krb5_len_bug_harness.c
提供了完整的C语言测试代码,模拟漏洞触发条件。
漏洞利用性分析
虽然存在缓冲区溢出漏洞,但由于内核限制,recv()调用可能会失败并返回"Bad address"错误。测试表明在当前系统上难以实现有效利用。
修复方案
curl开发团队提供了修复补丁,主要修改包括:
- 将
len的类型从int改为uint32_t - 修复decode函数的参数传递
- 完善类型转换和长度检查
最终决策
经过评估,curl团队决定:
- 不将此问题归类为安全漏洞:因为自8.8.0版本引入该问题以来,相关代码实际上已无法正常工作,用户不会因此受到攻击。
- 完全移除Kerberos FTP支持:由于代码未被使用且维护成本高,决定在PR #18577中移除相关功能。
时间线
- 2025年9月16日:漏洞报告提交
- 2025年9月18日:报告公开披露
- 状态:Informative(信息类)
- 严重性:低(0.1 ~ 3.9)
- CVE ID:无
- 赏金:无