Vulnerabilidad en OpenSSL podría congelar memoria de servidores con peticiones TLS

Publicado el

Vulnerabilidad HollowByte en OpenSSL

Una vulnerabilidad descubierta en OpenSSL, conocida como HollowByte, permite que servidores no actualizados reserven hasta 131 KB de memoria por cada mensaje TLS de 11 bytes que nunca se recibe. Esto afecta a los sistemas basados en glibc y puede llevar a un agotamiento de la memoria hasta que el proceso del servidor se reinicie.

El equipo de seguridad de Okta ha informado sobre este error, que fue corregido en las versiones OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6 y 3.0.21, publicadas el 9 de junio. Sin embargo, no se ha asignado un CVE, ni se ha emitido un aviso oficial o un registro de cambios que señale esta corrección. El equipo de Okta, que reportó el bug, ha publicado detalles sobre la vulnerabilidad, indicando que una conexión puede quedar bloqueada a la espera de un cuerpo de mensaje que nunca llega.

Funcionamiento de la Vulnerabilidad

La vulnerabilidad radica en cómo OpenSSL maneja los mensajes de handshake TLS. Cada mensaje contiene un encabezado de 4 bytes, donde 3 bytes indican el tamaño del cuerpo. Las versiones anteriores de OpenSSL aumentaban el buffer de recepción al tamaño declarado en el encabezado antes de recibir cualquier byte del cuerpo y antes de realizar las comprobaciones necesarias del handshake. Para un mensaje ClientHello, el límite es de 131 KB. Esto provoca que el hilo de trabajo se bloquee, esperando un cuerpo que no aparecerá, lo que se traduce en un ataque de agotamiento de conexiones.

Cuando el atacante cierra la conexión, OpenSSL libera el buffer, pero glibc retiene bloques pequeños y medianos para su reutilización, lo que impide que el sistema operativo recupere la memoria. El ataque se intensifica al variar el tamaño declarado en cada conexión, lo que impide que el asignador de memoria reutilice lo que ha liberado. En pruebas realizadas por Okta con NGINX, un servidor de 1 GB fue forzado a un estado de OOM-kill con 547 MB de memoria congelada en fragmentos. En un servidor de 16 GB, HollowByte logró bloquear el 25% de la memoria del sistema sin alcanzar el límite de conexiones, lo que lleva al equipo de Okta a afirmar que "las defensas estándar de limitación de conexiones no lo detendrán".

Respuesta de OpenSSL

OpenSSL ha decidido no considerar esta vulnerabilidad como un problema crítico. En el pull request de Matt Caswell, quien escribió el parche, se menciona que el equipo de seguridad optó por tratarlo como una solución a un "error o un refuerzo". La política de seguridad de OpenSSL define cuatro niveles de severidad, desde Crítico hasta Bajo, y "error o refuerzo" no está incluido en estas categorías. Un problema clasificado como bajo recibiría un CVE, una nota en el registro de cambios y una entrada en la página de vulnerabilidades. Sin embargo, HollowByte no cuenta con ninguno de estos elementos.

La falta de un CVE para esta vulnerabilidad plantea serias preocupaciones sobre la gestión y actualización de los sistemas afectados. Para los usuarios que ejecutan versiones antiguas de OpenSSL, el proceso de actualización se complica debido a la ausencia de pistas claras sobre la existencia de la vulnerabilidad. Se recomienda a los administradores de sistemas que verifiquen si han aplicado el parche correspondiente y que reinicien cualquier proceso que utilice la versión antigua de OpenSSL.

La solución actual cubre únicamente TLS. Caswell ha indicado en el pull request que DTLS no se abordó en esta corrección, ya que hacerlo correctamente implicaría cambios mucho más invasivos. El seguimiento de esta situación es crucial, ya que representa una potencial puerta de entrada para ataques de denegación de servicio que pueden afectar a múltiples sistemas en un entorno de producción.

Fuente

Ver noticia original