CVE-2026-33307mod_gnutls是Apache HTTPD的TLS模块。在0.12.3和0.13.0之前的版本中,用于客户端证书验证的代码存在缺陷。该代码将客户端发送的证书链导入到固定大小的数组中,而未检查证书数量是否超过数组大小。虽然`gnutls_x509_crt_t`是指针类型,未直接写入攻击者数据,但在数组末尾之后写入指针通常会触发段错误,理论上也可能导致栈损坏。默认不使用客户端证书的配置不受影响。该问题已在0.12.3和0.13.0版本中修复。
该漏洞源于mod_gnutls在处理客户端证书验证时的逻辑错误。受影响版本的代码试图将客户端提供的证书链导入到一个固定大小的`gnutls_x509_crt_t x50[]`数组中。关键在于,代码缺乏对证书链长度的边界检查。具体而言,`gnutls_x509_crt_t`被定义为指向GnuTLS不透明结构的指针。在导入证书数据之前,该结构通过`gnutls_x509_crt_init()`初始化。因此,攻击者无法直接控制写入缓冲区的数据内容。然而,当证书数量超过数组容量时,程序会在数组最后一个元素之后继续写入指针。这种越界写入操作通常会直接导致服务进程崩溃,即拒绝服务。虽然在实践中未观察到栈破坏导致代码执行的情况,但理论上存在这种可能性。攻击者无需认证即可通过网络发送特制的长证书链数据包来触发此漏洞。只有启用了客户端证书验证的服务器配置(即非默认配置)才会受到影响。