CVE-2026-31971HTSlib是一个用于读写生物信息学文件格式的C语言库。CRAM是一种压缩格式,用于存储DNA序列比对数据。在HTSlib处理CRAM文件时,当读取使用BYTE_ARRAY_LEN方法编码的数据时,cram_byte_array_len_decode()函数未能正确验证解压数据量与目标输出缓冲区大小的匹配性。攻击者可以通过构造恶意的CRAM文件触发此漏洞,导致堆缓冲区溢出或栈溢出。成功利用此漏洞可能造成程序崩溃、堆栈数据结构被破坏、控制流被劫持,最严重情况下可实现任意代码执行。该漏洞无需特殊权限即可利用,但需要用户交互打开恶意文件。
漏洞根源在于HTSlib的CRAM文件解析模块中的cram_byte_array_len_decode()函数。当解析CRAM文件中使用BYTE_ARRAY_LEN编码的数据序列时,该函数在执行解压缩操作前缺少关键的边界检查。具体问题包括:1) 未验证输入数据长度是否超过输出缓冲区容量;2) 未检查BYTE_ARRAY_LEN编码块声明的长度值与实际缓冲区分配大小的对应关系;3) 解压操作使用memcpy或类似函数直接写入缓冲区时未进行长度限制。攻击者可通过构造包含超长BYTE_ARRAY_LEN编码序列的CRAM文件,在受害者打开该文件时触发缓冲区溢出。溢出数据可覆盖堆上的元数据、函数指针或栈上的返回地址,从而控制程序执行流程。由于HTSlib被多个生物信息学工具广泛使用,此漏洞影响范围较广。