CVE-2025-65494libcoap是一个开源的C语言实现的COAP(Constrained Application Protocol)协议库,广泛应用于物联网(IoT)设备和嵌入式系统中。2025年11月披露的安全漏洞位于libcoap 4.3.5版本的OpenSSL集成模块中,具体为src/coap_openssl.c文件内的get_san_or_cn_from_cert()函数。该函数在处理X.509证书时存在空指针解引用缺陷。当程序接收到攻击者精心构造的恶意X.509证书时,调用OpenSSL的sk_GENERAL_NAME_value()函数会返回NULL指针,而代码未对该返回值进行有效性检查就直接进行解引用操作,导致程序崩溃并引发拒绝服务(DoS)条件。由于该漏洞可通过网络远程触发,且无需任何认证或用户交互即可利用,因此具有较高的安全风险。攻击者只需向目标服务发送包含恶意证书的网络请求即可造成服务中断,影响依赖libcoap进行安全通信的IoT设备和系统的可用性。
漏洞根源在于libcoap的证书处理逻辑缺乏健壮性。在src/coap_openssl.c的get_san_or_cn_from_cert()函数中,代码尝试从X.509证书中提取Subject Alternative Name(SAN)或Common Name(CN)字段。正常流程中,OpenSSL的sk_GENERAL_NAME_value()函数用于遍历证书扩展中的SAN条目。然而,当攻击者构造的证书包含异常结构(如空的SAN扩展或特殊构造的GENERAL_NAMES序列)时,sk_GENERAL_NAME_value()可能返回NULL指针。漏洞代码直接对该NULL指针进行解引用操作(如访问其成员或调用其方法),导致程序触发SIGSEGV信号并崩溃。由于libcoap通常作为服务器端组件运行,监听网络端口处理客户端请求,攻击者可以远程发送包含恶意证书的DTLS握手请求或TLS连接请求来触发此漏洞。此漏洞属于典型的输入验证不足导致的安全问题,修复方案应在调用sk_GENERAL_NAME_value()后添加NULL检查,并在返回NULL时安全地处理错误情况。