Gitea Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gitea είναι μια αυτοφιλοξενούμενη λύση ελαφριάς φιλοξενίας κώδικα που διαχειρίζεται η κοινότητα γραμμένη σε Go.
Για να τρέξετε μια τοπική εγκατάσταση του Gitea μπορείτε απλά να τρέξετε ένα κοντέινερ docker:
Συνδεθείτε στην πόρτα 3000 για να αποκτήσετε πρόσβαση στη σελίδα ιστού.
Μπορείτε επίσης να το εκτελέσετε με το kubernetes:
Δημόσια αποθετήρια: http://localhost:3000/explore/repos
Καταχωρημένοι χρήστες: http://localhost:3000/explore/users
Καταχωρημένες Οργανώσεις: http://localhost:3000/explore/organizations
Σημειώστε ότι από προεπιλογή η Gitea επιτρέπει στους νέους χρήστες να εγγραφούν. Αυτό δεν θα δώσει ιδιαίτερα ενδιαφέροντα πρόσβαση στους νέους χρήστες σε άλλα αποθετήρια οργανώσεων/χρηστών, αλλά ένας συνδεδεμένος χρήστης μπορεί να είναι σε θέση να οραματιστεί περισσότερα αποθετήρια ή οργανώσεις.
Για αυτό το σενάριο θα υποθέσουμε ότι έχετε αποκτήσει κάποια πρόσβαση σε έναν λογαριασμό github.
Αν somehow έχετε ήδη διαπιστευτήρια για έναν χρήστη μέσα σε μια οργάνωση (ή κλέψατε ένα cookie συνεδρίας) μπορείτε απλά να συνδεθείτε και να ελέγξετε ποιες άδειες έχετε σε ποιες αποθήκες, σε ποιες ομάδες είστε, να καταγράψετε άλλους χρήστες, και πώς είναι προστατευμένα τα αποθετήρια.
Σημειώστε ότι η 2FA μπορεί να χρησιμοποιηθεί οπότε θα μπορείτε να έχετε πρόσβαση σε αυτές τις πληροφορίες μόνο αν μπορείτε επίσης να περάσετε αυτήν την επιβεβαίωση.
Σημειώστε ότι αν καταφέρετε να κλέψετε το cookie i_like_gitea
(προς το παρόν ρυθμισμένο με SameSite: Lax) μπορείτε να παριστάνετε πλήρως τον χρήστη χωρίς να χρειάζεστε διαπιστευτήρια ή 2FA.
Η Gitea επιτρέπει στους χρήστες να ρυθμίζουν κλειδιά SSH που θα χρησιμοποιούνται ως μέθοδος αυθεντικοποίησης για την ανάπτυξη κώδικα εκ μέρους τους (δεν εφαρμόζεται 2FA).
Με αυτό το κλειδί μπορείτε να κάνετε αλλαγές σε αποθετήρια όπου ο χρήστης έχει κάποιες προνόμια, ωστόσο δεν μπορείτε να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στο api της gitea για να ανιχνεύσετε το περιβάλλον. Ωστόσο, μπορείτε να καταγράψετε τοπικές ρυθμίσεις για να αποκτήσετε πληροφορίες σχετικά με τα αποθετήρια και τους χρήστες στους οποίους έχετε πρόσβαση:
Αν ο χρήστης έχει ρυθμίσει το όνομά του ως το όνομα χρήστη του gitea, μπορείτε να αποκτήσετε πρόσβαση στα δημόσια κλειδιά που έχει ρυθμίσει στον λογαριασμό του στο https://github.com/<gitea_username>.keys, μπορείτε να το ελέγξετε αυτό για να επιβεβαιώσετε ότι το ιδιωτικό κλειδί που βρήκατε μπορεί να χρησιμοποιηθεί.
SSH κλειδιά μπορούν επίσης να ρυθμιστούν σε αποθετήρια ως κλειδιά ανάπτυξης. Οποιοσδήποτε έχει πρόσβαση σε αυτό το κλειδί θα μπορεί να εκκινήσει έργα από ένα αποθετήριο. Συνήθως σε έναν διακομιστή με διαφορετικά κλειδιά ανάπτυξης, το τοπικό αρχείο ~/.ssh/config
θα σας δώσει πληροφορίες σχετικά με το ποιο κλειδί σχετίζεται.
Όπως εξηγείται εδώ, μερικές φορές είναι απαραίτητο να υπογράψετε τις δεσμεύσεις ή μπορεί να σας ανακαλύψουν.
Ελέγξτε τοπικά αν ο τρέχων χρήστης έχει κάποιο κλειδί με:
Για μια εισαγωγή σχετικά με Tokens Χρήστη δείτε τις βασικές πληροφορίες.
Ένα token χρήστη μπορεί να χρησιμοποιηθεί αντί για έναν κωδικό πρόσβασης για να αυθεντικοποιηθεί στον διακομιστή Gitea μέσω API. θα έχει πλήρη πρόσβαση στον χρήστη.
Για μια εισαγωγή σχετικά με Εφαρμογές Oauth Gitea δείτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη Εφαρμογή Oauth για να αποκτήσει πρόσβαση σε προνομιακά δεδομένα/ενέργειες των χρηστών που τις αποδέχονται πιθανώς ως μέρος μιας εκστρατείας phishing.
Όπως εξηγείται στις βασικές πληροφορίες, η εφαρμογή θα έχει πλήρη πρόσβαση στον λογαριασμό του χρήστη.
Στο Github έχουμε github actions που από προεπιλογή αποκτούν ένα token με δικαιώματα εγγραφής πάνω στο repo που μπορεί να χρησιμοποιηθεί για να παρακάμψει τις προστασίες κλάδου. Σε αυτή την περίπτωση δεν υπάρχει, οπότε οι παρακάμψεις είναι πιο περιορισμένες. Αλλά ας δούμε τι μπορεί να γίνει:
Ενεργοποίηση Push: Αν οποιοσδήποτε με δικαιώματα εγγραφής μπορεί να σπρώξει στον κλάδο, απλά σπρώξτε το.
Whitelist Restricted Push: Με τον ίδιο τρόπο, αν είστε μέρος αυτής της λίστας σπρώξτε στον κλάδο.
Ενεργοποίηση Λίστας Εγκεκριμένων Συγχωνεύσεων: Αν υπάρχει μια λίστα εγκεκριμένων συγχωνεύσεων, πρέπει να είστε μέσα σε αυτήν.
Απαιτήσεις εγκρίσεων μεγαλύτερες από 0: Τότε... πρέπει να συμβιβαστείτε με έναν άλλο χρήστη.
Περιορισμός εγκρίσεων σε whitelisted: Αν μόνο οι whitelisted χρήστες μπορούν να εγκρίνουν... πρέπει να συμβιβαστείτε με έναν άλλο χρήστη που είναι μέσα σε αυτή τη λίστα.
Ακύρωση παλιών εγκρίσεων: Αν οι εγκρίσεις δεν αφαιρούνται με νέες καταθέσεις, θα μπορούσατε να καταλάβετε μια ήδη εγκεκριμένη PR για να εισάγετε τον κωδικό σας και να συγχωνεύσετε την PR.
Σημειώστε ότι αν είστε διαχειριστής οργανισμού/repo μπορείτε να παρακάμψετε τις προστασίες.
Webhooks είναι ικανά να στέλνουν συγκεκριμένες πληροφορίες gitea σε ορισμένα μέρη. Μπορείτε να είστε σε θέση να εκμεταλλευτείτε αυτή την επικοινωνία. Ωστόσο, συνήθως ένα μυστικό που δεν μπορείτε να ανακτήσετε έχει οριστεί στο webhook που θα αποτρέψει τους εξωτερικούς χρήστες που γνωρίζουν τη διεύθυνση URL του webhook αλλά όχι το μυστικό να εκμεταλλευτούν αυτό το webhook. Αλλά σε ορισμένες περιπτώσεις, οι άνθρωποι αντί να ορίσουν το μυστικό στη θέση του, το θέτουν στη διεύθυνση URL ως παράμετρο, οπότε ελέγχοντας τις διευθύνσεις URL θα μπορούσε να σας επιτρέψει να βρείτε μυστικά και άλλα μέρη που θα μπορούσατε να εκμεταλλευτείτε περαιτέρω.
Τα webhooks μπορούν να οριστούν σε επίπεδο repo και οργανισμού.
Αν με κάποιο τρόπο καταφέρατε να μπείτε μέσα στον διακομιστή όπου τρέχει το gitea θα πρέπει να αναζητήσετε το αρχείο ρύθμισης παραμέτρων gitea. Από προεπιλογή βρίσκεται στο /data/gitea/conf/app.ini
Σε αυτό το αρχείο μπορείτε να βρείτε κλειδιά και κωδικούς πρόσβασης.
Στο μονοπάτι gitea (κατά προεπιλογή: /data/gitea) μπορείτε επίσης να βρείτε ενδιαφέρουσες πληροφορίες όπως:
Η βάση δεδομένων sqlite: Αν το gitea δεν χρησιμοποιεί εξωτερική βάση δεδομένων θα χρησιμοποιήσει μια βάση δεδομένων sqlite.
Οι συνεδρίες μέσα στον φάκελο συνεδριών: Εκτελώντας cat sessions/*/*/*
μπορείτε να δείτε τα ονόματα χρηστών των συνδεδεμένων χρηστών (το gitea θα μπορούσε επίσης να αποθηκεύει τις συνεδρίες μέσα στη βάση δεδομένων).
Το ιδιωτικό κλειδί jwt μέσα στον φάκελο jwt.
Περισσότερες ευαίσθητες πληροφορίες θα μπορούσαν να βρεθούν σε αυτόν τον φάκελο.
Αν είστε μέσα στον διακομιστή μπορείτε επίσης να χρησιμοποιήσετε το δυαδικό gitea
για να αποκτήσετε/τροποποιήσετε πληροφορίες:
gitea dump
θα εκτυπώσει το gitea και θα δημιουργήσει ένα αρχείο .zip.
gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET
θα δημιουργήσει ένα token του υποδεικνυόμενου τύπου (persistency).
gitea admin user change-password --username admin --password newpassword
Αλλάξτε τον κωδικό πρόσβασης.
gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token
Δημιουργήστε νέο διαχειριστή χρήστη και αποκτήστε ένα token πρόσβασης.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)