CVE-2025-65499libcoap是一个开源的C语言实现的CoAP(Constrained Application Protocol)协议库,广泛应用于物联网(IoT)设备和嵌入式系统中,用于轻量级的机器间通信。CVE-2025-65499漏洞存在于libcoap 4.3.5版本的TLS验证回调函数中,攻击者可以通过发送精心构造的DTLS握手数据包触发数组索引错误。当SSL_get_ex_data_X509_STORE_CTX_idx()函数返回-1时,tls_verify_call_back()函数会使用这个无效索引访问数组,导致程序崩溃或产生未定义行为,从而造成拒绝服务(DoS)攻击。由于该漏洞可通过网络远程利用,且不需要认证即可触发,因此对使用libcoap的IoT设备和服务构成中等程度的安全威胁。
漏洞根源位于libcoap源码文件src/coap_openssl.c中的tls_verify_call_back()函数。在DTLS握手过程中,该函数调用SSL_get_ex_data_X509_STORE_CTX_idx()获取X509证书验证上下文的索引值。正常情况下,该函数返回一个有效的非负整数作为数组索引。然而,当攻击者发送特制的DTLS握手数据包时,该函数可能返回-1这个错误值。tls_verify_call_back()函数随后使用这个-1值作为数组索引进行数据访问,导致越界读取或写入。由于TLS/SSL库的内部数据结构通常使用数组存储安全上下文信息,这种数组索引错误会破坏内存布局,引发程序崩溃或潜在的进一步安全问题。攻击者只需要构造特定的DTLS ClientHello或握手消息即可触发此漏洞,无需进行完整的TLS握手或证书验证流程。