Jenkins, un popular software de servidor de automatización de código abierto, publicó un aviso el lunes sobre una vulnerabilidad crítica en el servidor web Jetty que podría dañar la memoria y hacer que se divulgue información confidencial.
Rastreada como CVE-2019-17638, la falla tiene una calificación CVSS de 9.4 e impacta las versiones 9.4.27.v20200227 a 9.4.29.v20200521 de Eclipse Jetty, una herramienta con todas las funciones que proporciona un servidor Java HTTP y un contenedor web para usar en marcos de software.
«Jenkins empaqueta Winstone-Jetty, un envoltorio alrededor de Jetty, para que actúe como servidor HTTP y servlet cuando se comenzó a usar java -jar jenkins.war. Así es como se ejecuta Jenkins cuando se usa cualquiera de los instaladores o paquetes, pero no cuando se ejecuta usando servlet contenedores como Tomcat”, se lee en el aviso.
«La vulnerabilidad puede permitir que los atacantes no autenticados obtengan encabezados de respuesta HTTP que pueden incluir datos confidenciales destinados a otro usuario».
La falla, que afecta a Jetty y Jenkins Core, parece haberse introducido en la versión 9.4.27 de Jetty, que agregó un mecanismo para manejar encabezados de respuesta HTTP grandes y evitar desbordamientos de búfer.
«El problema fue en el caso de un desbordamiento del búfer, liberamos el búfer del encabezado, pero no anulamos el campo», dijo el jefe de proyecto de Jetty, Greg Wilkins.
Para manejar esto, Jetty lanza una excepción para producir un error HTTP 431, lo que hace que los encabezados de respuesta HTTP se liberen dos veces en el grupo de búfer, lo que a su vez provoca la corrupción de la memoria y la divulgación de información.
Por lo tanto, debido al lanzamiento doble, dos subprocesos pueden adquirir el mismo búfer del grupo al mismo tiempo y potencialmente permitir que una solicitud acceda a una respuesta escrita por el otro subproceso, que puede incluir identificadores de sesión, credenciales de autenticación y otra información confidencial. .
Dicho de otra manera, «mientras el subproceso1 está a punto de usar el ByteBuffer para escribir los datos de la respuesta1, el subproceso2 llena el ByteBuffer con los datos de la respuesta2. El subproceso1 luego procede a escribir el búfer que ahora contiene los datos de la respuesta2. Esto da como resultado el cliente1, que emitió la solicitud1 y espera respuestas, para ver la respuesta2 que podría contener datos confidenciales pertenecientes al cliente2».
En un caso, la corrupción de la memoria hizo posible que los clientes cambiaran de sesión y, por lo tanto, tuvieran acceso entre cuentas, ya que las cookies de autenticación de la respuesta de un usuario se enviaban a otro usuario, lo que permitía que el usuario A saltara a la sesión del usuario B.
Después de que se revelaran las implicaciones de seguridad, la vulnerabilidad se abordó en Jetty 9.4.30.v20200611 publicado el mes pasado. Jenkins, que incluye Jetty a través de una interfaz de línea de comandos llamada Winstone, corrigió la falla en su utilidad en Jenkins 2.243 y Jenkins LTS 2.235.5 lanzados ayer.
Se recomienda que los usuarios de Jenkins actualicen su software a la última versión para mitigar la falla de corrupción del búfer.