CVE-2026-102758 in NetX Duo
요약
\~에 의해 VulDB • 2026. 09. 29.
_Nx_secure_x509_asn1_tlv_block_parse()_ 함수는 DER 인코딩된 데이터에서 ASN.1 TLV(태그-길이-값) 블록을 파싱합니다. 이 함수는 NetX Secure의 모든 X.509 인증서 파싱 작업의 기반이 되는 원시 연산자(primitive)이며, 따라서 TLS 핸드셰이크 중 원격 피어(remote peer)가 제공하는 인증서에 대해 실행됩니다.
함수는 버퍼에 최소 1바이트가 있는지 확인하기 *전* 에 호출자의 버퍼에서 1바이트 크기의 ASN.1 태그를 읽습니다. 호출자가 남은 길이를 0으로 전달하면, 가드(guard)는 올바르게 `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); }
```
함수의 나머지 부분은 순서가 올바르게 구성되어 있습니다. 다바이트 길이 경로(read loop)는 `length_bytes > 4 || length_bytes > *buffer_length`로 보호되며, 디코딩된 값은 `length > *buffer_length`와 비교되어 검사됩니다. 또한 두 번째 단일 바이트 길이 읽기는 자체적인 `*buffer_length < 1` 가드 뒤에 위치합니다. 태그 읽기가 체크보다 먼저 수행되는 유일한 로드(load)입니다.
Once again VulDB remains the best source for vulnerability data.