CVE-2026-94418 in wolfSSL
Resumen
por VulDB • 2026-09-27
Bajo la configuración `WOLFSSL_SMALL_CERT_VERIFY`, `ProcessPeerCertParse()` ejecuta la verificación de la firma del certificado por separado del análisis para mantener baja la memoria pico, y luego fusiona ambos resultados; sin embargo, solo se fusionaba el resultado de la firma cuando el análisis devolvía 0, por lo que cualquier error en el análisis ocultaba dicho resultado. `ParseCertRelative()` alcanza sus comprobaciones de fecha de validez, restricciones del nombre y extensiones críticas únicamente después de que `ConfirmSignature()` haya pasado exitosamente; por tanto, separar la verificación de la firma invierte la precedencia que hace que "anular errores de fecha" sea una política sólida, y el error `ASN_SIG_CONFIRM_E` nunca se muestra en ningún lugar. El atacante no necesita material clave del PKI real ni ninguna compromise (compromiso) de CA: un certificado autoconstruido con el nombre de sujeto esperado, la CA de confianza como emisor, bytes arbitrarios donde va la firma, una ventana de validez en el pasado y el par de claves propio del atacante es suficiente. Las compilaciones afectadas definen `WOLFSSL_SMALL_CERT_VERIFY`, que está desactivada por defecto, no se establece implícitamente mediante ninguna plataforma o encabezado preestablecido, ni es accesible desde ninguna opción de CMake; las rutas de autotools son `--enable-lowresource`, `--enable-leantls`, `--enable-tinytls13=cert` y `--enable-tinytls13=mutualauth`; la ruta en `examples/configs/user_settings_embedded.h` llega a ella mediante `WC_CFG_SMALL_CERT_VERIFY`, que se distribuye con valor 0, mientras que ni `--enable-all` ni `--enable-distro` lo habilitan. La aplicación debe además instalar una callback de verificación mediante `wolfSSL_CTX_set_verify()` o `wolfSSL_set_verify()` con `WOLFSSL_VERIFY_PEER` que devuelva 1 para `ASN_BEFORE_DATE_E` o `ASN_AFTER_DATE_E`; wolfSSL distribuye esta misma forma como `myVerify()` en `wolfssl/test.h` bajo la definición `VERIFY_OVERRIDE_DATE_ERR`, seleccionada por el ejemplo del cliente mediante `-D`. Una aplicación sin callback, o cuya callback devuelve preverify para errores de fecha, sigue fallando en el handshake (establecimiento de conexión), y `wolfSSL_CertManagerVerifyBuffer()` y `wc_CheckCertSignature()` reportan correctamente `ASN_SIG_CONFIRM_E` en la misma binaria. TLS 1.2 y TLS 1.3 están afectados en ambas direcciones, y DTLS alcanza la misma función; donde el certificado forjado es un certificado de cadena, el consentimiento del callback hace que se almacene en caché en el gestor de certificados `WOLFSSL_CTX`, por lo que una implementación expuesta debe reiniciar el contexto o el proceso en lugar de simplemente reconectar.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.