Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en OpenSSL SSL_select_next_proto (CVE-2024-5535)

Gravedad CVSS v3.1:
CRÍTICA
Tipo:
CWE-200 Revelación de información
Fecha de publicación:
27/06/2024
Última modificación:
12/07/2024

Descripción

Resumen del problema: llamar a la función API de OpenSSL SSL_select_next_proto con un búfer de protocolos de cliente compatible vacío puede provocar una falla o que se envíe contenido de la memoria al igual. Resumen de impacto: una lectura excesiva del búfer puede tener una variedad de consecuencias potenciales, como un comportamiento inesperado de la aplicación o un bloqueo. En particular, este problema podría provocar que se envíen hasta 255 bytes de datos privados arbitrarios de la memoria al par, lo que provocaría una pérdida de confidencialidad. Sin embargo, este problema solo afecta a las aplicaciones que llaman directamente a la función SSL_select_next_proto con una lista de longitud 0 de protocolos de cliente compatibles. Normalmente, esto nunca sería un escenario válido y normalmente no está bajo el control de un atacante, pero puede ocurrir por accidente en el caso de un error de configuración o programación en la aplicación que realiza la llamada. La función API de OpenSSL SSL_select_next_proto suele ser utilizada por aplicaciones TLS que admiten ALPN (negociación de protocolo de capa de aplicación) o NPN (negociación de siguiente protocolo). NPN es más antiguo, nunca se estandarizó y está en desuso en favor de ALPN. Creemos que ALPN está mucho más implementado que NPN. La función SSL_select_next_proto acepta una lista de protocolos del servidor y una lista de protocolos del cliente y devuelve el primer protocolo que aparece en la lista de servidores que también aparece en la lista de clientes. En caso de que no haya superposición entre las dos listas, devuelve el primer elemento de la lista de clientes. En cualquier caso, indicará si se encontró una superposición entre las dos listas. En el caso de que se llame a SSL_select_next_proto con una lista de clientes de longitud cero, no detecta esta condición y devuelve la memoria inmediatamente después del puntero de la lista de clientes (e informa que no hubo superposición en las listas). Esta función normalmente se llama desde una devolución de llamada de la aplicación del lado del servidor para ALPN o una devolución de llamada de la aplicación del lado del cliente para NPN. En el caso de ALPN, libssl garantiza que la lista de protocolos proporcionados por el cliente nunca tendrá una longitud cero. La lista de protocolos del servidor proviene de la aplicación y normalmente nunca se debe esperar que tenga una longitud cero. En este caso, si la función SSL_select_next_proto se llamó como se esperaba (con la lista proporcionada por el cliente pasada en los parámetros client/client_len), entonces la aplicación no será vulnerable a este problema. Si la aplicación se configuró accidentalmente con una lista de servidores de longitud cero y accidentalmente pasó esa lista de servidores de longitud cero en los parámetros client/client_len y además no pudo manejar correctamente una respuesta "sin superposición" (que normalmente daría como resultado una falla en el protocolo de enlace en ALPN) entonces será vulnerable a este problema. En el caso de NPN, el protocolo permite al cliente seleccionar de manera oportunista un protocolo cuando no hay superposición. OpenSSL devuelve el primer protocolo de cliente en el caso de que no haya superposición para respaldar esto. La lista de protocolos de cliente proviene de la aplicación y normalmente nunca se debe esperar que tenga una longitud cero. Sin embargo, si la función SSL_select_next_proto se llama accidentalmente con un client_len de 0, se devolverá un puntero de memoria no válido. Si la aplicación utiliza esta salida como protocolo oportunista, se producirá la pérdida de confidencialidad. Este problema se ha evaluado como de gravedad baja porque es más probable que las aplicaciones sean vulnerables si utilizan NPN en lugar de ALPN, pero NPN no se utiliza ampliamente. También requiere una configuración de la aplicación o un error de programación.-- truncada---