Every CVE Search/ Get API key

CVE-2026-102758

The `_nx_secure_x509_asn1_tlv_block_parse()` function parses ASN.1 TLV (tag-length-value) blocks...

7.5 High

The _nx_secure_x509_asn1_tlv_block_parse() function parses ASN.1 TLV (tag-length-value) blocks out of DER-encoded data. It is the primitive underneath all X.509 certificate parsing in NetX Secure, and therefore runs on certificates supplied by a remote peer during the TLS handshake.

The function reads the one-byte ASN.1 tag from the caller's buffer before checking that the buffer holds at least one byte. When a caller passes a remaining length of zero, the guard correctly returns NX_SECURE_X509_ASN1_LENGTH_TOO_LONG, but the read has already happened one byte past the end of the buffer.

code:

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];      /* <-- read before the bounds check */
    if (*buffer_length < 1)
    {
        return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG);
    }


The remainder of the function is correctly ordered. The multi-byte length path is guarded by length_bytes > 4 || length_bytes > *buffer_length before its read loop, the decoded value is checked against length > *buffer_length, and the second single-byte length read follows its own *buffer_length < 1 guard. The tag read is the only load placed ahead of its check.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
High

Exploit likelihood

0.17%Up 0.1 points since Sep 30, 2026
90%50%10%1%

What each source reports

CVE List Score used 7.5

The _nx_secure_x509_asn1_tlv_block_parse() function parses ASN.1 TLV (tag-length-value) blocks out of DER-encoded data. It is the primitive underneath all X.509 certificate parsing in NetX Secure, and therefore runs on certificates supplied by a remote peer during the TLS handshake.

The function reads the one-byte ASN.1 tag from the caller's buffer before checking that the buffer holds at least one byte. When a caller passes a remaining length of zero, the guard correctly returns NX_SECURE_X509_ASN1_LENGTH_TOO_LONG, but the read has already happened one byte past the end of the buffer.

code:

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];      /* <-- read before the bounds check */
    if (*buffer_length < 1)
    {
        return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG);
    }


The remainder of the function is correctly ordered. The multi-byte length path is guarded by length_bytes > 4 || length_bytes > *buffer_length before its read loop, the decoded value is checked against length > *buffer_length, and the second single-byte length read follows its own *buffer_length < 1 guard. The tag read is the only load placed ahead of its check.

Record
CVE-2026-102758
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-126
Updated
2026-11-02
EUVDEUVD-2026-89113 7.5

The _nx_secure_x509_asn1_tlv_block_parse() function parses ASN.1 TLV (tag-length-value) blocks out of DER-encoded data. It is the primitive underneath all X.509 certificate parsing in NetX Secure, and therefore runs on certificates supplied by a remote peer during the TLS handshake.

The function reads the one-byte ASN.1 tag from the caller's buffer before checking that the buffer holds at least one byte. When a caller passes a remaining length of zero, the guard correctly returns NX_SECURE_X509_ASN1_LENGTH_TOO_LONG, but the read has already happened one byte past the end of the buffer.

code:

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];      /* <-- read before the bounds check */
    if (*buffer_length < 1)
    {
        return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG);
    }


The remainder of the function is correctly ordered. The multi-byte length path is guarded by length_bytes > 4 || length_bytes > *buffer_length before its read loop, the decoded value is checked against length > *buffer_length, and the second single-byte length read follows its own *buffer_length < 1 guard. The tag read is the only load placed ahead of its check.

Record
EUVD-2026-89113
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
GitHub AdvisoriesGHSA-qfqh-8mhg-fcvw 7.5

The `_nx_secure_x509_asn1_tlv_block_parse()` function parses ASN.1 TLV (tag-length-value) blocks...

The _nx_secure_x509_asn1_tlv_block_parse() function parses ASN.1 TLV (tag-length-value) blocks out of DER-encoded data. It is the primitive underneath all X.509 certificate parsing in NetX Secure, and therefore runs on certificates supplied by a remote peer during the TLS handshake.

The function reads the one-byte ASN.1 tag from the caller's buffer before checking that the buffer holds at least one byte. When a caller passes a remaining length of zero, the guard correctly returns NX_SECURE_X509_ASN1_LENGTH_TOO_LONG, but the read has already happened one byte past the end of the buffer.

code:

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];      /* <-- read before the bounds check */
    if (*buffer_length < 1)
    {
        return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG);
    }


The remainder of the function is correctly ordered. The multi-byte length path is guarded by length_bytes > 4 || length_bytes > *buffer_length before its read loop, the decoded value is checked against length > *buffer_length, and the second single-byte length read follows its own *buffer_length < 1 guard. The tag read is the only load placed ahead of its check.

Record
GHSA-qfqh-8mhg-fcvw
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-126
Updated
2026-11-02
NVD 7.5

The _nx_secure_x509_asn1_tlv_block_parse() function parses ASN.1 TLV (tag-length-value) blocks out of DER-encoded data. It is the primitive underneath all X.509 certificate parsing in NetX Secure, and therefore runs on certificates supplied by a remote peer during the TLS handshake.

The function reads the one-byte ASN.1 tag from the caller's buffer before checking that the buffer holds at least one byte. When a caller passes a remaining length of zero, the guard correctly returns NX_SECURE_X509_ASN1_LENGTH_TOO_LONG, but the read has already happened one byte past the end of the buffer.

code:

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];      /* <-- read before the bounds check */
    if (*buffer_length < 1)
    {
        return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG);
    }


The remainder of the function is correctly ordered. The multi-byte length path is guarded by length_bytes > 4 || length_bytes > *buffer_length before its read loop, the decoded value is checked against length > *buffer_length, and the second single-byte length read follows its own *buffer_length < 1 guard. The tag read is the only load placed ahead of its check.

Record
CVE-2026-102758
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-126
Updated
2026-11-02
OSV 7.5

The _nx_secure_x509_asn1_tlv_block_parse() function parses ASN.1 TLV (tag-length-value) blocks out of DER-encoded data. It is the primitive underneath all X.509 certificate parsing in NetX Secure, and therefore runs on certificates supplied by a remote peer during the TLS handshake.

The function reads the one-byte ASN.1 tag from the caller's buffer before checking that the buffer holds at least one byte. When a caller passes a remaining length of zero, the guard correctly returns NX_SECURE_X509_ASN1_LENGTH_TOO_LONG, but the read has already happened one byte past the end of the buffer.

code:

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];      /* <-- read before the bounds check */
    if (*buffer_length < 1)
    {
        return(NX_SECURE_X509_ASN1_LENGTH_TOO_LONG);
    }


The remainder of the function is correctly ordered. The multi-byte length path is guarded by length_bytes > 4 || length_bytes > *buffer_length before its read loop, the decoded value is checked against length > *buffer_length, and the second single-byte length read follows its own *buffer_length < 1 guard. The tag read is the only load placed ahead of its check.

Record
CVE-2026-102758
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-126
Updated
2026-11-02

Affected products

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-102758 is a high vulnerability (CVSS 7.5) in Eclipse Foundation Netx Duo, published September 29, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.17%, the 6th percentile. No source names a fixed version.

References

MoveEnter Open