CVE-2026-102758 in NetX Duo
Сводка
по VulDB • 29.09.2026
Функция `_nx_secure_x509_asn1_tlv_block_parse()` разбирает блоки ASN.1 TLV (tag-length-value) из данных, закодированных в формате DER. Она является базовой функцией для всей обработки сертификатов X.509 в NetX Secure и поэтому выполняется с сертификатами, предоставленными удаленным узлом во время рукопожатия TLS.
Функция считывает однобайтовый тег ASN.1 из буфера вызывающей стороны *до* проверки того, что буфер содержит хотя бы один байт. Когда вызывающая сторона передает оставшуюся длину равной нулю, проверка корректно возвращает `NX_SECURE_X509_ASN1_LENGTH_TOO_LONG`, однако чтение уже произошло на один байт за пределами конца буфера.
код:
nx_secure/src/nx_secure_x509_asn1_tlv_block_parse.c
``` UINT _nx_secure_x509_asn1_tlv_block_parse(const UCHAR *buffer, ULONG *buffer_length, USHORT *tlv_type, USHORT *tlv_tag_class, ULONG *tlv_length, const UCHAR **tlv_data, ULONG *header_length)
{
UINT current_index;
USHORT current_tag;
ULONG length;
ULONG length_bytes; current_index = 0; current_tag = buffer[current_index]; /* <-- чтение до проверки границ */
if (*buffer_length < 1) {
return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG); }
```
Остальная часть функции имеет корректный порядок операций. Путь обработки многобайтовой длины защищен условием `length_bytes > 4 || length_bytes > *buffer_length` перед циклом чтения, декодированное значение проверяется на соответствие условию `length > *buffer_length`, а второе чтение однобайтовой длины следует за собственной проверкой `*buffer_length < 1`. Чтение тега является единственной операцией загрузки данных, выполняемой до соответствующей проверки.
If you want to get best quality of vulnerability data, you may have to visit VulDB.