Aviso de seguridad
Nivel de peligrosidad: Crítico
Descripción
La vulnerabilidad identificada como CVE-2024-23897 (CVSS 9,8), es una vulnerabilidad de lectura arbitraria de archivos. La vulnerabilidad se encuentra en el analizador de comandos de la línea de comandos (CLI) de Jenkins. Este analizador de comandos permite a los usuarios ejecutar comandos en el controlador de Jenkins. La vulnerabilidad permite a un atacante ejecutar comandos arbitrarios en el controlador de Jenkins sin autenticarse.
Para explotar esta vulnerabilidad, un atacante puede enviar un comando arbitrario al CLI de Jenkins. Este comando puede ser utilizado para leer cualquier archivo en el sistema de archivos del controlador de Jenkins. Jenkins usa la biblioteca args4j para analizar argumentos y opciones de comandos en el controlador Jenkins al procesar comandos CLI. Este analizador de comandos tiene una característica, que reemplaza un carácter `@` seguido de una ruta de archivo, en un argumento con el contenido del archivo (`expandAtFiles`). Se puede acceder a la interfaz de línea de comandos a través de SSH o con el cliente CLI de Jenkins, un archivo .jar distribuido con Jenkins. Esto permite a los atacantes en el controlador Jenkins leer archivos arbitrarios, archivos binarios que contengan claves criptográficas, aunque con ciertas restricciones.
Las consecuencias de esta vulnerabilidad pueden ser graves, ya que permiten a un atacante robar datos confidenciales, instalar malware o realizar otras acciones maliciosas.
Recursos afectados
- Jenkins 2.441 y anteriores.
- LTS 2.426.2 y anteriores.
Estos son otros aspectos a considerar como posibles a ataques:
- Ejecución remota de código a través de URL raíz de recursos (variante 1)
- Ejecución remota de código a través de URL raíz de recursos (variante 2)
- Ejecución remota de código mediante la cookie "Recordarme"
- Ejecución remota de código mediante ataques de secuencias de comandos entre sitios (XSS) almacenados a través de registros de compilación
- Ejecución remota de código mediante bypass de protección CSRF
- Descifrar secretos almacenados en Jenkins
- Eliminar cualquier elemento en Jenkins
- Descargar un volcado de memoria de Java
Solución
Los administradores deben actualizar Jenkins de manera oportuna, independientemente del valor de `archivo.codificación`.
En caso de administrar Jenkins aun con la CLI basada en comunicación remota igual deben actualizar.
Es necesario deshabilitar el acceso a la CLI. Se deben seguir los dos pasos siguientes:
- Eliminar el punto final HTTP CLI
- Deshabilite el puerto SSH (complemento de servidor SSH)
Deshabilita la función del analizador de comandos (En caso de problemas con esta solución, deshabilite este cambio, configurando la propiedad del sistema Java hudson.cli.CLICommand.allowAtSyntax en verdadero)
Recomendaciones
En caso de no poder actualizar Jenkins a la versión 2.442 o LTS 2.426.3, se recomienda tomar las siguientes acciones:
- Deshabilitar el acceso a la CLI: Deshabilitar el acceso a la CLI evitará la explotación por completo y es la solución alternativa recomendada para los administradores que no pueden actualizar de inmediato. La aplicación de esta solución no requiere reiniciar Jenkins. Para obtener instrucciones, consulte la documentación de esta solución alternativa .
- Evite el acceso a WebSocket mediante un proxy inverso: Si solo se puede acceder a Jenkins a través de un proxy inverso, configure ese proxy para impedir el acceso a la CLI a través de WebSocket al no actualizar las solicitudes.
Referencias
Una vulnerabilidad crítica de Jenkins expone los servidores a posibles ataques RCE