curl库schannel.c中TLS数据传输的整数溢出漏洞分析

Integer Overflow in schannel.c TLS Data Transmission

漏洞摘要

该漏洞允许在加密数据传输过程中添加TLS缓冲区大小时发生整数溢出,导致发送错误的数据大小并引发TLS安全问题。在Windows 10测试环境中,Windows的Schannel会拒绝构造的畸形TLS握手(SEC_E_INVALID_TOKEN)。

漏洞代码位置

./lib/vtls/schannel.c:

/* send the encrypted message including header, data and trailer */
len = outbuf[0].cbBuffer + outbuf[1].cbBuffer + outbuf[2].cbBuffer;

漏洞详情

curl在TLS连接建立后的数据传输阶段(非握手阶段)将三个缓冲区相加:outbuf0、outbuf1和outbuf2。在32位编译环境下,如果这些缓冲区足够大,加法运算可能发生整数溢出,导致len值变小。

这可能引发:

  • 错误的数据传输大小
  • TLS协议违规
  • 内存安全问题
  • 最坏情况下可能导致安全绕过(如果溢出导致curl发送的数据少于预期)

验证方法

使用附件的概念验证(PoC)恶意HTTP服务器进行测试,任何使用curl连接该恶意服务器的Windows用户都会受影响。

PoC服务器日志示例

=== Schannel Vulnerability PoC Server (Windows) ===
[*] Malicious server listening on port 4433
[*] Test with: curl -k https://localhost:4433
[*] Client connected
[*] Received 1815 bytes (ClientHello)
[*] Sending malicious TLS record...
[*] Sent malicious TLS records
[*] Connection closed

数学验证PoC

size_t len = outbuf[0].cbBuffer + outbuf[1].cbBuffer + outbuf[2].cbBuffer;
// 当cbBuffer值足够大时,32位系统会发生整数溢出

影响版本

  • 8.15.0: release
  • 8.16.0: dev

潜在影响

攻击者可实现认证绕过(如果凭据通过TLS传输),或通过操纵TLS握手触发大缓冲区大小导致溢出,造成DoS攻击。实际利用需要控制或入侵TLS服务器,并绕过Windows的Schannel验证。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-08-04 16:18  qife  阅读(9)  评论(0)    收藏  举报