CVE-2026-91403 y la Crisis WebPKI de eMudhra: Cómo Claves Privadas de 8 Bits (< 256) Forzaron Revocaciones de Emergencia en Java y Sistemas Operativos
CVE-2026-91403 (CWE-331 / CWE-326 (Entropía Insuficiente / Fuerza de Cifrado Inadecuada))
Severity: CRÍTICA (EMERGENCIA CRIPTOGRÁFICA WEBPKI) (CVSS 9.1)
Threat Actor: Cualquier Adversario con Capacidad de Interceptación TLS MitM o Falsificación de Firma de Código
Status: Claves Privadas Recuperables en < 1 ms; Revocaciones de Emergencia en Navegadores, Apple OS y Oracle Java
Affected Systems: 8 CAs Intermedias de eMudhra (emSign) | Almacenes de Confianza (cacerts) de Oracle Java SE / GraalVM sin Parchear
Fixed In: Alerta de Emergencia de Octubre 2026 para Oracle Java SE / GraalVM | Chrome CRLSet, Firefox OneCRL y Apple OS
Uno de los incidentes más extraordinarios del "Black October" de 2026 es un fallo criptográfico catastrófico en el ecosistema público WebPKI. Auditorías públicas en Mozilla revelaron que ocho Autoridades de Certificación (CA) intermedias generadas en 2025 por el proveedor de confianza digital eMudhra (emSign) fueron creadas con claves privadas ECDSA P-384 de apenas 8 bits, es decir, con un escalar secreto $d$ menor a 256. Dado que cualquier equipo puede calcular las 255 sumas posibles en la curva elíptica en menos de un milisegundo, las claves privadas de las ocho CAs intermedias quedaron expuestas públicamente, forzando revocaciones urgentes en Chrome (CRLSet), Firefox (OneCRL), macOS/iOS de Apple y una Alerta de Seguridad de Emergencia de Oracle (CVE-2026-91403, CVSS 9.1) para proteger entornos empresariales Java SE y GraalVM.

La Catástrofe Matemática: ECDSA P-384 con $d in [1, 255]$
En criptografía de curva elíptica sobre NIST P-384 (secp384r1), la clave privada $d$ debe ser un entero aleatorio de 384 bits ($1 le d < 2^{384}$), a partir del cual se calcula la clave pública $Q = d imes G$. Debido a un grave error de truncamiento de entropía durante la ceremonia de generación de claves en 2025, eMudhra generó ocho certificados de CA intermedia cuyo escalar privado $d$ era un entero entre 1 y 255:
Seguridad Estándar P-384:
Q = d * G donde 1 <= d < 2^384 (Logaritmo discreto requiere ~2^192 operaciones -> Inviable)
Fallo de eMudhra en 8 CAs Intermedias:
Q = d * G donde 1 <= d <= 255 (¡Búsqueda exhaustiva en máximo 255 pasos -> < 0.2 milisegundos!)
Cualquier atacante que posea el escalar $d$ de una CA intermedia no restringida puede emitir certificados TLS válidos para cualquier dominio en internet o firmar binarios maliciosos sin pasar por los servidores de eMudhra.
Por Qué Oracle Emitió la Alerta de Emergencia CVE-2026-91403 (CVSS 9.1)
Mientras que los navegadores web bloquean CAs comprometidas en horas mediante listas automáticas (CRLSet y OneCRL), los servidores backend en Java (Spring Boot, Kafka, Elasticsearch, JDBC) validan las conexiones TLS salientes contra el archivo estático $JAVA_HOME/lib/security/cacerts sin consultar CRLSet ni OneCRL. Por ello, cualquier máquina virtual Java (JVM) sin parchear queda expuesta a ataques Man-in-the-Middle (MitM) silenciosos. La actualización de emergencia de Oracle para CVE-2026-91403 bloquea explícitamente las CAs afectadas en JSSE.
Auditoría y Remediación en Almacenes de Confianza
cacerts de Java con keytool
# 1. Verificar la presencia de raíces de eMudhra / emSign en el almacén cacerts de la JVM
keytool -list -v -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit | grep -B 2 -A 10 -iE "emudhra|emsign"
# 2. Verificar políticas de desconfianza de CA en java.security tras aplicar el parche CVE-2026-91403
grep -n "jdk.security.caDistrustPolicies" "$JAVA_HOME/conf/security/java.security"- Aplicar el Parche CVE-2026-91403 en Todas las JVMs: Actualice Oracle Java SE, OpenJDK, Corretto, Temurin y GraalVM a las compilaciones de finales de octubre de 2026.
- Mitigación Manual en JVMs Legadas: Si no puede actualizar un contenedor Java de inmediato, elimine las raíces de eMudhra/emSign de
cacertsusandokeytool -delete -alias <alias_emudhra> -keystore $JAVA_HOME/lib/security/cacerts.