
Solución alternativa para deshabilitar la CLI y mitigar SECURITY-3314/CVE-2024-23897 y SECURITY-3315/CVE-2024-23898
= SECURITY-3314/SECURITY-3315 Mitigación
Este repositorio documenta mitigaciones que previenen la explotación de SECURITY-3314 y SECURITY-3315 en instancias afectadas.
== Resumen
El acceso a la CLI debe ser deshabilitado. Ambos pasos siguientes deben realizarse:
== Instrucciones
=== Deshabilitar el endpoint de la CLI
Si Jenkins está en ejecución, ejecuta el script proporcionado disable-cli.groovy en la https://www.jenkins.io/doc/book/managing/script-console/[Consola de Scripts].
Esto eliminará el endpoint HTTP de la CLI hasta que Jenkins se reinicie.
Crea un https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/[Script de Hook Groovy] de Post-Inicialización con el contenido de disable-cli.groovy para asegurar que el script se ejecute cada vez que Jenkins se (re)inicie.
==== Confirmación
Para confirmar que el script funcionó, navega a Manage Jenkins » Jenkins CLI.
Sin la mitigación aplicada, se muestra la documentación general de la CLI, incluyendo un resumen de los comandos CLI disponibles. Con la mitigación aplicada, se muestra un error HTTP 404 Not Found.
=== Deshabilitar el Puerto SSH
El https://plugins.jenkins.io/sshd/[Plugin SSH Server] proporciona acceso a la CLI de Jenkins a través de SSH. Este es un plugin cuya funcionalidad solía ser parte del núcleo de Jenkins, por lo que puede estar instalado incluso si nunca lo instalaste explícitamente.
Navega a Manage Jenkins » Security y asegúrate de que la configuración SSHD Port en la sección SSH Server esté establecida en Disable.
NOTA: Se recomienda hacer esto incluso si decides deshabilitar o desinstalar el plugin, ya que la funcionalidad de gestión de plugins puede reinstalar o re-habilitar el plugin para asegurar que las dependencias del plugin estén satisfechas.
Alternativamente, puedes agregar el siguiente fragmento al final del script disable-cli.groovy:
// Disable CLI access over SSH Server Plugin
if (j.getPlugin('sshd')) {
hudson.ExtensionList.lookupSingleton(org.jenkinsci.main.modules.sshd.SSHD.class).setPort(-1)
}
==== Confirmación
No es necesaria una configuración explícita con la opción de UI compatible para deshabilitar el Puerto SSH, pero puedes intentar conectarte al puerto SSH CLI previamente configurado.
El resultado esperado es un fallo al establecer la conexión.
Ten en cuenta que no es posible el uso no autenticado de la CLI SSH, por lo que no todos los errores son una indicación de que se haya deshabilitado correctamente.
Estos son ejemplos de un resultado esperado (seguro) (asumiendo que el puerto 2222 estaba configurado previamente):
$ ssh -p 2222 jenkins.example.org
ssh: connect to host jenkins.example.org port 2222: Connection refused
$ ssh -p 2222 jenkins.example.org
kex_exchange_identification: read: Connection reset by peer
Connection reset by … port 2222