CVE-2026-31968HTSlib是一个用于读写生物信息学文件格式的C语言库。CRAM是一种压缩格式,用于存储DNA序列比对数据,使用多种编码和压缩方法。该漏洞存在于HTSlib对CRAM文件中VARINT和CONST编码的处理过程中,由于对这些编码使用的上下文验证不完整,攻击者可以通过精心构造的CRAM文件触发缓冲区溢出。具体来说,漏洞可能导致向堆分配区域末尾写入最多8字节数据,或向栈上一个单字节变量位置写入最多8字节数据,从而可能改变相邻变量的值。根据数据流的不同,这可能引发堆缓冲区溢出或栈溢出。攻击成功后,攻击者可能导致程序崩溃、覆盖堆或栈上的数据结构、改变程序控制流,甚至可能实现任意代码执行。此漏洞需要用户打开特制的CRAM文件才能触发,攻击者可能通过钓鱼邮件、恶意网站或其他社会工程手段诱骗受害者打开恶意文件。
HTSlib在解析CRAM格式文件时,对VARINT和CONST编码类型的处理存在边界验证缺陷。VARINT是一种变长整数编码,CONST是常量编码。当解析器处理这些编码时,未正确验证数据长度与目标缓冲区的匹配关系。在CRAM文件中,CRAM container包含多个slice,每个slice包含压缩的DNA序列数据。攻击者可以在CRAM数据流中注入恶意的VARINT或CONST编码块,使解码器在处理时超出预期边界写入数据。在堆分配场景下,这会破坏堆元数据或相邻分配块;在栈分配场景下,这会覆盖返回地址或函数指针等关键数据结构。由于编码器未对压缩数据块的边界进行充分检查,攻击者可以精确控制溢出的字节数和内容,从而为进一步的代码执行创造条件。该漏洞的触发需要特定的CRAM文件结构和编码序列,普通文件不会触发此问题。