Source: htslib Version: 1.22.1+ds2-1 Severity: important Tags: security upstream X-Debbugs-Cc: [email protected], Debian Security Team <[email protected]>
Hi, The following vulnerabilities were published for htslib. CVE-2026-31962[0]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data. While most alignment records store DNA sequence and | quality values, the format also allows them to omit this data in | certain cases to save space. Due to some quirks of the CRAM format, | it is necessary to handle these records carefully as they will | actually store data that needs to be consumed and then discarded. | Unfortunately the `cram_decode_seq()` did not handle this correctly | in some cases. Where this happened it could result in reading a | single byte from beyond the end of a heap allocation, followed by | writing a single attacker-controlled byte to the same location. | Exploiting this bug causes a heap buffer overflow. If a user opens a | file crafted to exploit this issue, it could lead to the program | crashing, or overwriting of data and heap structures in ways not | expected by the program. It may be possible to use this to obtain | arbitrary code execution. Versions 1.23.1, 1.22.2 and 1.21.1 include | fixes for this issue. There is no workaround for this issue. CVE-2026-31963[1]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data. As one method of removing redundant data, CRAM uses | reference-based compression so that instead of storing the full | sequence for each alignment record it stores a location in an | external reference sequence along with a list of differences to the | reference at that location as a sequence of "features". When | decoding these features, an out-by-one error in a test for CRAM | features that appear beyond the extent of the CRAM record sequence | could result in an invalid write of one attacker-controlled byte | beyond the end of a heap buffer. Exploiting this bug causes a heap | buffer overflow. If a user opens a file crafted to exploit this | issue, it could lead to the program crashing, or overwriting of data | and heap structures in ways not expected by the program. It may be | possible to use this to obtain arbitrary code execution. Versions | 1.23.1, 1.22.2 and 1.21.1 include fixes for this issue. There is no | workaround for this issue. CVE-2026-31964[2]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data using a variety of encodings and compression methods. | While most alignment records store DNA sequence and quality values, | the format also allows them to omit this data in certain cases to | save space. Due to some quirks of the CRAM format, it is necessary | to handle these records carefully as they will actually store data | that needs to be consumed and then discarded. Unfortunately the | `CONST`, `XPACK` and `XRLE` encodings did not properly implement the | interface needed to do this. Trying to decode records with omitted | sequence or quality data using these encodings would result in an | attempt to write to a NULL pointer. Exploiting this bug causes a | NULL pointer dereference. Typically this will cause the program to | crash. Versions 1.23.1, 1.22.2 and 1.21.1 include fixes for this | issue. There is no workaround for this issue. CVE-2026-31965[3]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data. In the `cram_decode_slice()` function called while | reading CRAM records, validation of the reference id field occurred | too late, allowing two out of bounds reads to occur before the | invalid data was detected. The bug does allow two values to be | leaked to the caller, however as the function reports an error it | may be difficult to exploit them. It is also possible that the | program will crash due to trying to access invalid memory. Versions | 1.23.1, 1.22.2 and 1.21.1 include fixes for this issue. There is no | workaround for this issue. CVE-2026-31966[4]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data. As one method of removing redundant data, CRAM uses | reference-based compression so that instead of storing the full | sequence for each alignment record it stores a location in an | external reference sequence along with a list of differences to the | reference at that location as a sequence of "features". When | decoding CRAM records, the reference data is stored in a char array, | and parts matching the alignment record sequence are copied over as | necessary. Due to insufficient validation of the feature data | series, it was possible to make the `cram_decode_seq()` function | copy data from either before the start, or after the end of the | stored reference either into the buffer used to store the output | sequence for the cram record, or into the buffer used to build the | SAM `MD` tag. This allowed arbitrary data to be leaked to the | calling function. This bug may allow information about program state | to be leaked. It may also cause a program crash through an attempt | to access invalid memory. Versions 1.23.1, 1.22.2 and 1.21.1 include | fixes for this issue. There is no workaround for this issue. CVE-2026-31967[5]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data. In the `cram_decode_slice()` function called while | reading CRAM records, the value of the mate reference id field was | not validated. Later use of this value, for example when converting | the data to SAM format, could result in the out of bounds array | reads when looking up the corresponding reference name. If the array | value obtained also happened to be a valid pointer, it would be | interpreted as a string and an attempt would be made to write the | data as part of the SAM record. This bug may allow information about | program state to be leaked. It may also cause a program crash | through an attempt to access invalid memory. Versions 1.23.1, 1.22.2 | and 1.21.1 include fixes for this issue. There is no workaround for | this issue. CVE-2026-31968[6]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data using a variety of encodings and compression methods. | For the `VARINT` and `CONST` encodings, incomplete validation of the | context in which the encodings were used could result in up to eight | bytes being written beyond the end of a heap allocation, or up to | eight bytes being written to the location of a one byte variable on | the stack, possibly causing the values to adjacent variables to | change unexpectedly. Depending on the data stream this could result | either in a heap buffer overflow or a stack overflow. If a user | opens a file crafted to exploit this issue it could lead to the | program crashing, overwriting of data structures on the heap or | stack in ways not expected by the program, or changing the control | flow of the program. It may be possible to use this to obtain | arbitrary code execution. Versions 1.23.1, 1.22.2 and 1.21.1 include | fixes for this issue. There is no workaround for this issue. CVE-2026-31969[7]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data using a variety of encodings and compression methods. | When reading data encoded using the `BYTE_ARRAY_STOP` method, an | out-by-one error in the `cram_byte_array_stop_decode_char()` | function check for a full output buffer could result in a single | attacker-controlled byte being written beyond the end of a heap | allocation. Exploiting this bug causes a heap buffer overflow. If a | user opens a file crafted to exploit this issue, it could lead to | the program crashing, or overwriting of data and heap structures in | ways not expected by the program. It may be possible to use this to | obtain arbitrary code execution. Versions 1.23.1, 1.22.2 and 1.21.1 | include fixes for this issue. There is no workaround for this issue. CVE-2026-31970[8]: | HTSlib is a library for reading and writing bioinformatics file | formats. GZI files are used to index block-compressed GZIP [BGZF] | files. In the GZI loading function, `bgzf_index_load_hfile()`, it | was possible to trigger an integer overflow, leading to an under- or | zero-sized buffer being allocated to store the index. Sixteen zero | bytes would then be written to this buffer, and, depending on the | result of the overflow the rest of the file may also be loaded into | the buffer as well. If the function did attempt to load the data, | it would eventually fail due to not reading the expected number of | records, and then try to free the overflowed heap buffer. Exploiting | this bug causes a heap buffer overflow. If a user opens a file | crafted to exploit this issue, it could lead to the program | crashing, or overwriting of data and heap structures in ways not | expected by the program. It may be possible to use this to obtain | arbitrary code execution. Versions 1.23.1, 1.22.2 and 1.21.1 include | fixes for this issue. The easiest work-around is to discard any | `.gzi` index files from untrusted sources, and use the `bgzip -r` | option to recreate them. CVE-2026-31971[9]: | HTSlib is a library for reading and writing bioinformatics file | formats. CRAM is a compressed format which stores DNA sequence | alignment data using a variety of encodings and compression methods. | When reading data encoded using the `BYTE_ARRAY_LEN` method, the | `cram_byte_array_len_decode()` failed to validate that the amount of | data being unpacked matched the size of the output buffer where it | was to be stored. Depending on the data series being read, this | could result either in a heap or a stack overflow with attacker- | controlled bytes. Depending on the data stream this could result | either in a heap buffer overflow or a stack overflow. If a user | opens a file crafted to exploit this issue it could lead to the | program crashing, overwriting of data structures on the heap or | stack in ways not expected by the program, or changing the control | flow of the program. It may be possible to use this to obtain | arbitrary code execution. Versions 1.23.1, 1.22.2 and 1.21.1 include | fixes for this issue. There is no workaround for this issue. If you fix the vulnerabilities please also make sure to include the CVE (Common Vulnerabilities & Exposures) ids in your changelog entry. For further information see: [0] https://security-tracker.debian.org/tracker/CVE-2026-31962 https://www.cve.org/CVERecord?id=CVE-2026-31962 [1] https://security-tracker.debian.org/tracker/CVE-2026-31963 https://www.cve.org/CVERecord?id=CVE-2026-31963 [2] https://security-tracker.debian.org/tracker/CVE-2026-31964 https://www.cve.org/CVERecord?id=CVE-2026-31964 [3] https://security-tracker.debian.org/tracker/CVE-2026-31965 https://www.cve.org/CVERecord?id=CVE-2026-31965 [4] https://security-tracker.debian.org/tracker/CVE-2026-31966 https://www.cve.org/CVERecord?id=CVE-2026-31966 [5] https://security-tracker.debian.org/tracker/CVE-2026-31967 https://www.cve.org/CVERecord?id=CVE-2026-31967 [6] https://security-tracker.debian.org/tracker/CVE-2026-31968 https://www.cve.org/CVERecord?id=CVE-2026-31968 [7] https://security-tracker.debian.org/tracker/CVE-2026-31969 https://www.cve.org/CVERecord?id=CVE-2026-31969 [8] https://security-tracker.debian.org/tracker/CVE-2026-31970 https://www.cve.org/CVERecord?id=CVE-2026-31970 [9] https://security-tracker.debian.org/tracker/CVE-2026-31971 https://www.cve.org/CVERecord?id=CVE-2026-31971 Regards, Salvatore

