CVE-2026-31970HTSlib是一个用于读写生物信息学文件格式的C语言库。漏洞存在于GZI(Generalized Zip Index)索引文件的加载函数`bgzf_index_load_hfile()`中,攻击者可以通过构造恶意`.gzi`索引文件触发整数溢出。当函数执行时,溢出会导致分配一个过小或为零大小的缓冲区用于存储索引数据。随后向该缓冲区写入十六个零字节,如果溢出导致其他文件数据被加载到缓冲区中,函数会因读取的记录数不符合预期而失败,并尝试释放溢出的堆缓冲区。该漏洞可导致堆缓冲区溢出,攻击者可能利用此漏洞使程序崩溃、覆盖堆数据或获取任意代码执行。攻击需要用户交互打开特制的文件。
漏洞根源在于HTSlib的`bgzf_index_load_hfile()`函数在处理GZI索引文件时缺乏整数溢出检查。GZI文件用于索引BGZF(Block-Ganged Binary GZIP)压缩文件。当函数解析索引时,攻击者可以通过精心构造的GZI文件使某个长度计算发生整数溢出。例如,当计算所需缓冲区大小时,恶意输入可能导致计算结果回绕为一个极小的值或零。分配的缓冲区过小但后续代码仍尝试向其中写入数据,导致堆缓冲区溢出。攻击者可通过控制GZI文件内容来控制溢出的大小和写入的数据。在某些情况下,函数可能尝试将超过预期的文件数据加载到缓冲区中,最终导致堆损坏。成功利用此漏洞可实现任意代码执行。