Jenkins Arbitrary File Read to RCE via "Remember Me"
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'IA 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
Accedere 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
Estrarre 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
Calcolare il Tempo di Scadenza del Token:
Concatenare i Dati per il Token:
MAC Key Decryption
Decriptare il File della Chiave MAC:
Signature Computation
Calcolare HMAC SHA256:
Cookie Encoding
Generare il Cookie Finale:
Step 3: Code Execution
Session Authentication
Recuperare i Token CSRF e di Sessione:
Effettuare una richiesta a
/crumbIssuer/api/json
per ottenereJenkins-Crumb
.Catturare
JSESSIONID
dalla risposta, che sarà utilizzato insieme al cookie "remember-me".
Command Execution Request
Inviare una Richiesta POST con uno Script Groovy:
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.
Last updated