记录到 qlog 之前未验证 Acks 导致 ngtcp2 中的缓冲区溢出 (CVE-2024-52811)
CVE编号
CVE-2024-52811
利用情况
暂无
补丁情况
N/A
披露时间
2024-11-26
漏洞描述
ngtcp2项目是一个在C语言中实现IETF QUIC协议的努力。在受影响的版本中,ACK在写入qlog之前没有经过验证,这导致了缓冲区溢出的问题。在`ngtcp2_conn::conn_recv_pkt`的ACK处理中,如果ACK已经在负载中被处理过,新加入的逻辑会跳过`conn_recv_ack`。然而,这导致我们也跳过了`ngtcp2_pkt_validate_ack`。被跳过的ACK仍然会被写入qlog。漏洞出现在`ngtcp2_qlog::write_ack_frame`中。现在有可能使用无效的ACK来触发这段代码,假设`largest_ack=0`且`first_ack_range=15`。执行`largest_ack - first_ack_range`会导致整数溢出,溢出长度为20个字符。然而,ngtcp2的qlog代码假定写入的数字是有符号整数,只考虑了19个字符的额外空间(参见`NGTCP2_QLOG_ACK_FRAME_RANGE_OVERHEAD`)。因此,我们会覆盖缓冲区,导致堆溢出。这是一个高优先级的漏洞,如果启用qlog,可能会影响到许多用户。默认情况下,qlog是禁用的。由于其开销较大,它主要用于调试目的,但实际使用情况未知。ngtcp2 v1.9.1修复了此漏洞,建议用户进行升级。无法升级的用户不应启用qlog。
解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
文章评论