Once bytes harán que un servidor OpenSSL sin parches reserve hasta 131 KB de memoria para un mensaje que nunca llega. En los sistemas glibc que Okta probó, esa memoria desaparece hasta que se reinicia el proceso.
OpenSSL envió el byte hueco Se solucionó en junio sin CVE, sin avisos y sin entrada de registro de cambios que lo apunte. El equipo rojo de Okta, que informó del error de denegación de servicio y le puso nombre, publicó los detalles el jueves.
Las versiones fijas son OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6 y 3.0.21, todas con fecha del 9 de junio. Todas las versiones de esas ramas anteriores a las fijas lo tienen. Nada en una canalización de parches normal le indicará dónde están: no hay ningún identificador que pueda coincidir con un escáner ni ningún aviso que leer.
El defecto es que OpenSSL tomó la palabra del atacante. Cada mensaje de protocolo de enlace TLS lleva un encabezado de 4 bytes, tres de los cuales declaran la longitud del cuerpo. Las versiones anteriores aumentaron el búfer de recepción al tamaño declarado en el momento en que llegó el encabezado, antes de que apareciera un solo byte del cuerpo y antes de que se ejecutaran las comprobaciones del protocolo de enlace.
Para un ClientHello entrante, el límite máximo es de 131 KB. Luego el hilo trabajador se bloquea, esperando un cuerpo que nunca llega. Sin autenticación, sin sesión, sin intercambio de claves.
El recuerdo no vuelve
Por sí solo, eso es un ataque de agotamiento de la conexión, y esos son tan antiguos como Slowloris. Lo que hace que HollowByte se mantenga es simplista. Cuando el atacante interrumpe la conexión, OpenSSL libera el búfer, pero glibc retiene fragmentos pequeños y medianos para reutilizarlos en lugar de devolverlos al kernel.
El ataque varía el tamaño reclamado en cada conexión y, en las pruebas de Okta, eso fue suficiente para evitar que el asignador reutilizara lo que liberó. El montón se fragmenta, el tamaño del conjunto residente aumenta y permanece así mucho tiempo después de que el atacante se ha ido.
En las pruebas NGINX de Okta, un servidor de 1 GB fue eliminado por OOM con 547 MB de memoria congelada en fragmentos. En un servidor de 16 GB, HollowByte bloqueó el 25% de la memoria del sistema sin siquiera cruzar el límite de conexión, razón por la cual el Equipo Rojo dice que “las defensas estándar que limitan la conexión no lo detendrán”.
Esas cifras son propiedad de Okta y no publicó ningún código de explotación junto con ellas. The Hacker News no encontró ningún repositorio público de prueba de concepto en GitHub hasta el 18 de julio.
OpenSSL decidió que esto no era una vulnerabilidad
La solicitud de extracción de Matt Caswell, quien escribió el parche, lo dice claramente: el equipo de seguridad decidió “manejar esto como una única solución de ‘error o endurecimiento'”. La propia política de seguridad de OpenSSL define cuatro niveles de gravedad, desde Crítico hasta Bajo, y “error o endurecimiento” no se encuentra entre ellos.
Incluso un problema bajo obtiene un CVE, una nota de registro de cambios y una entrada en la página de vulnerabilidades. HollowByte no tiene ninguno de los tres. The Hacker News no encontró ninguna mención de la solución en las notas de la versión ni en las 23 entradas del registro de cambios 4.0.1 de OpenSSL.
OpenSSL no ha dicho por qué. Este es su caso: 131 KB por conexión es pequeño, cada servidor TLS asigna memoria por conexión y una asignación limitada no es una vulnerabilidad. La respuesta de Okta es que el recuerdo nunca vuelve.
Hacker News ha preguntado a OpenSSL por qué HollowByte se clasificó por debajo de Low y si la solución alcanzó las ramas de soporte extendido 1.1.1 y 1.0.2. También preguntó a Okta si la fragmentación sobrevive a asignadores distintos de glibc. Esta historia se actualizará con cualquier respuesta.
La línea del proyecto es más fina de lo que parece. En enero, OpenSSL asignó CVE-2025-66199, con calificación baja, a un error de compresión de certificados TLS 1.3 en el que una longitud proporcionada por pares hacía crecer un búfer de montón antes de la validación, con un valor de alrededor de 22 MiB por conexión.
Ese necesitaba cuatro cosas para alinearse: compresión de certificados compilada, un algoritmo de compresión disponible, la extensión negociada y, en los servidores, certificados de cliente solicitados. HollowByte no necesita ninguno de ellos.
La misma versión del 9 de junio asignó CVE-2026-34183, clasificado como Moderado, al crecimiento ilimitado de la memoria en el controlador QUIC PATH_CHALLENGE. Ambos son DoS por agotamiento de la memoria. Ambos obtuvieron números.
El lanzamiento también cerró 18 CVE, incluido un uso después de la liberación de alta gravedad en PKCS7_verify(), por lo que cualquiera que ejecute una de esas compilaciones ascendentes tiene la solución sin que se lo digan.
Río abajo es peor. El valor predeterminado documentado de Red Hat es realizar un backport en lugar de mover la versión, por lo que un paquete parcheado aún informa la versión a partir de la cual se creó. Lo que normalmente resuelve esto es el aviso y el feed OVAL, ambos codificados con nombres CVE. No hay ningún CVE aquí para ingresar.
Eso deja el registro de cambios del paquete o el mantenedor: pregunte si se basaron en la versión del 9 de junio o si tomaron el parche, que es la solicitud de extracción 30792 para master y 4.0, 30793 para 3.6, 3.5 y 3.4, y 30794 para 3.0.
Si crea OpenSSL usted mismo, actualice a la versión indicada y reinicie lo que cargó la versión anterior.
La solución cubre solo TLS. Caswell escribió en la solicitud de extracción que DTLS se quedó solo porque hacerlo correctamente habría sido mucho más invasivo y que el proyecto decidió no molestarse con eso por ahora. The Hacker News comparó la fuente de OpenSSL en las etiquetas 3.6.2 y 3.6.3 y encontró que el archivo de protocolo de enlace DTLS tenía bytes idénticos en toda la solución. En 4.0.1, la versión más reciente, esa ruta todavía dimensiona su búfer a partir de la longitud que declara el par.
OpenSSL no ha clasificado esa ruta ni se ha comprometido a solucionarla. Las notas de la versión, el registro de cambios y la página de vulnerabilidades no dicen nada al respecto. La solicitud de extracción sí lo hace.