报告概述
本报告披露了curl库中Kerberos FTP支持组件存在的安全漏洞。漏洞源于krb5_read_data()
函数中的整数溢出问题,可能导致缓冲区越界读取或内存耗尽。
漏洞详情
问题1:整数溢出导致安全检查绕过
在krb5_read_data()
函数中存在关键代码缺陷:
|
|
当网络字节序转换后的值超过INT_MAX
时,会发生整数溢出,使len
变为负值。这会绕过大小检查,导致后续逻辑错误:
|
|
如果len
为-1,nread
将被转换为巨大的size_t
值(约18446744071562072064),最终传递给recv()
系统调用。
问题2:解码函数逻辑错误
代码中的do-while循环在len
减至0后,错误地将0值传递给decode函数,而非实际读取的数据长度。
影响版本
自功能引入以来的所有curl版本均受影响。
验证过程
报告提供了完整的PoC代码,包括:
服务端模拟代码(repro_server.py)
|
|
客户端测试代码(krb5_len_bug_harness.c)
|
|
漏洞利用性分析
测试表明,虽然漏洞存在,但由于内核会对过大的recv()
调用返回"Bad address"错误,实际利用可能受限。但在特定系统配置下仍可能导致内存耗尽。
官方响应与修复
curl维护者确认了漏洞存在,但指出:
- 自8.8.0版本引入的解码bug使该功能实际上无法正常使用
- 决定完全移除Kerberos FTP支持而非修复漏洞
- 提交了移除相关代码的PR #18577
时间线
- 2025-09-16:漏洞报告提交
- 2025-09-18:报告公开披露
- 状态标记为"Informative"(信息性),非安全漏洞
技术细节
报告还讨论了历史版本中的相关代码变化,以及socket_read()
函数中可能存在的无限循环问题(EOF处理缺陷)。
最终结论认为,由于功能本身已损坏且使用范围有限,该整数溢出问题不构成实际安全威胁。