Gitea Security
Last updated
Last updated
Το Gitea είναι μια αυτο-φιλοξενούμενη κοινοτικά διαχειριζόμενη ελαφριά λύση φιλοξενίας κώδικα που έχει γραφτεί σε Go.
Για να εκτελέσετε μια τοπική εγκατάσταση του Gitea, μπορείτε απλά να εκτελέσετε έναν docker container:
Συνδεθείτε στη θύρα 3000 για να αποκτήσετε πρόσβαση στην ιστοσελίδα.
Μπορείτε επίσης να το εκτελέσετε με το kubernetes:
Δημόσια αποθετήρια: http://localhost:3000/explore/repos
Εγγεγραμμένοι χρήστες: http://localhost:3000/explore/users
Εγγεγραμμένες Οργανώσεις: http://localhost:3000/explore/organizations
Σημειώστε ότι από προεπιλογή το Gitea επιτρέπει σε νέους χρήστες να εγγραφούν. Αυτό δεν παρέχει ιδιαίτερα ενδιαφέρουσα πρόσβαση στους νέους χρήστες σε σχέση με άλλες οργανώσεις/χρήστες αποθετηρίων, αλλά ένας συνδεδεμένος χρήστης μπορεί να έχει τη δυνατότητα να δει περισσότερα αποθετήρια ή οργανώσεις.
Για αυτό το σενάριο θα υποθέσουμε ότι έχετε αποκτήσει πρόσβαση σε έναν λογαριασμό github.
Εάν έχετε ήδη διαπιστευτήρια για έναν χρήστη μέσα σε μια οργάνωση (ή κλέψατε ένα διαδικτυακό cookie συνεδρίας), μπορείτε απλά να συνδεθείτε και να ελέγξετε ποιες άδειες έχετε για ποια αποθετήρια, σε ποιες ομάδες βρίσκεστε, να απαριθμήσετε άλλους χρήστες και να δείτε πώς προστατεύονται τα αποθετήρια.
Σημειώστε ότι μπορεί να χρησιμοποιείται διπλή επαλήθευση (2FA), οπότε θα μπορείτε να έχετε πρόσβαση σε αυτές τις πληροφορίες μόνο εάν περάσετε και αυτόν τον έλεγχο.
Σημειώστε ότι εάν καταφέρετε να κλέψετε το cookie i_like_gitea
(που είναι ρυθμισμένο αυτή τη στιγμή με SameSite: Lax), μπορείτε να προσωποποιήσετε πλήρως τον χρήστη χωρίς να χρειάζεστε διαπιστευτήρια ή 2FA.
Το Gitea επιτρέπει στους χρήστες να ορίζουν κλειδιά SSH που θα χρησιμοποιηθούν ως μέθοδος επαλήθευσης για την ανάπτυξη κώδικα εκ μέρους τους (δεν εφαρμόζεται 2FA).
Με αυτό το κλειδί μπορείτε να πραγματοποιήσετε αλλαγές σε αποθετήρια όπου ο χρήστης έχει κάποια δικαιώματα, αλλά δεν μπορείτε να το χρησιμοποιήσετε για να έχετε πρόσβαση στο API του gitea για να απαριθμήσετε το περιβάλλον. Ωστόσο, μπορείτε να απαριθμήσετε τις τοπικές ρυθμίσεις για να λάβετε πληροφορίες σχετικά με τα αποθετήρια και τον χρήστη στον οποίο έχετε πρόσβαση:
Εάν ο χρήστης έχει ρυθμίσει το όνομα χρήστη του ως το όνομα χρήστη του gitea, μπορείτε να έχετε πρόσβαση στα δημόσια κλειδιά που έχει ορίσει στον λογαριασμό του στο https://github.com/<gitea_username>.keys, μπορείτε να ελέγξετε αυτό για να επιβεβαιώσετε ότι το ιδιωτικό κλειδί που βρήκατε μπορεί να χρησιμοποιηθεί.
Τα κλειδιά SSH μπορούν επίσης να οριστούν σε αποθετήρια ως κλειδιά αναπτύξεων. Οποιοσδήποτε με πρόσβαση σε αυτό το κλειδί θα μπορεί να εκκινήσει έργα από ένα αποθετήριο. Συνήθως, σε έναν διακομιστή με διάφορα κλειδιά αναπτύξεων, το τοπικό αρχείο ~/.ssh/config
θα σας δώσει πληροφορίες σχετικά με το ποιο κλειδί σχετίζεται.
Όπως εξηγείται εδώ, μερικές φορές είναι απαραίτητο να υπογράφετε τις δεσμεύσεις ή μπορεί να αποκαλυφθείτε.
Ελέγξτε τοπικά εάν ο τρέχων χρήστης έχει κάποιο κλειδί με:
Για μια εισαγωγή σχετικά με τα User Tokens ελέγξτε τις βασικές πληροφορίες.
Ένα user token μπορεί να χρησιμοποιηθεί αντί για κωδικό πρόσβασης για πιστοποίηση εναντίον του διακομιστή Gitea μέσω του API. Θα έχει πλήρη πρόσβαση στον λογαριασμό του χρήστη.
Για μια εισαγωγή σχετικά με τις εφαρμογές Gitea Oauth ελέγξτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη εφαρμογή Oauth για να έχει πρόσβαση σε προνομιούχα δεδομένα/ενέργειες των χρηστών που τους αποδέχονται πιθανότατα ως μέρος μιας επίθεσης phishing.
Όπως εξηγείται στις βασικές πληροφορίες, η εφαρμογή θα έχει πλήρη πρόσβαση στον λογαριασμό του χρήστη.
Στο Github έχουμε τις ενέργειες του github που από προεπιλογή λαμβάνουν ένα διακριτικό με δυνατότητα εγγραφής στο αποθετήριο που μπορεί να χρησιμοποιηθεί για παράκαμψη των προστασιών του κλαδιού. Σε αυτήν την περίπτωση αυτό δεν υπάρχει, οπότε οι παρακάμψεις είναι πιο περιορισμένες. Αλλά ας δούμε τι μπορεί να γίνει:
Ενεργοποίηση Παραμονής: Αν οποιοσδήποτε με δυνατότητα εγγραφής μπορεί να προωθήσει στο κλαδί, απλά προωθήστε το.
Λευκή Λίστα Περιορισμένης Προώθησης: Με τον ίδιο τρόπο, αν είστε μέρος αυτής της λίστας προωθήστε στο κλαδί.
Ενεργοποίηση Λευκής Λίστας Συγχώνευσης: Αν υπάρχει μια λευκή λίστα συγχώνευσης, πρέπει να είστε μέσα σε αυτήν.
Απαιτούνται έγκριση περισσότερη από 0: Τότε... πρέπει να παραβιάσετε έναν άλλο χρήστη.
Περιορισμός έγκρισης σε λευκή λίστα: Αν μόνο οι χρήστες στη λευκή λίστα μπορούν να εγκρίνουν... πρέπει να παραβιάσετε έναν άλλο χρήστη που βρίσκεται μέσα σε αυτήν τη λίστα.
Απόρριψη ανενεργών εγκρίσεων: Αν οι εγκρίσεις δεν αφαιρούνται με νέες ενημερώσεις, μπορείτε να αποκτήσετε πρόσβαση σε ένα ήδη εγκεκριμένο αίτημα ενσωμάτωσης για να εισαγάγετε τον κώδικά σας και να συγχωνεύσετε το αίτημα ενσωμάτωσης.
Σημειώστε ότι αν είστε διαχειριστής οργανισμού/αποθετηρίου μπορείτε να παρακάμψετε τις προστασίες.
Τα Webhooks είναι σε θέση να στείλουν συγκεκριμένες πληροφορίες του gitea σε κάποια μέρη. Μπορείτε να εκμεταλλευτείτε αυτήν την επικοινωνία. Ωστόσο, συνήθως ένα μυστικό που δεν μπορείτε να ανακτήσετε έχει οριστεί στο webhook που θα αποτρέψει εξωτερικούς χρήστες που γνωρίζουν το URL του webhook αλλά όχι το μυστικό να εκμεταλλευτούν αυτό το webhook. Ωστόσο, σε ορισμένες περιπτώσεις, αντί να ορίζουν το μυστικό στη θέση του, το ορίζουν στο URL ως παράμετρο, οπότε η έλεγχος των URL μπορεί να σας επιτρέψει να βρείτε μυστικά και άλλα μέρη που μπορείτε να εκμεταλλευτείτε περαιτέρω.
Τα Webhooks μπορούν να οριστούν σε επίπεδο αποθετηρίου και οργανισμού.
Αν κατά κάποιον τρόπο καταφέρετε να μπείτε μέσα στον διακομιστή όπου τρέχει το gitea, θα πρέπει να αναζητήσετε το αρχείο ρυθμίσεων του gitea. Από προεπιλογή βρίσκεται στη διαδρομή /data/gitea/conf/app.ini
Σε αυτό το αρχείο μπορείτε να βρείτε κλειδιά και κωδικούς πρόσβασης.
Στη διαδρομή του gitea (προεπιλογή: /data/gitea) μπορείτε επίσης να βρείτε ενδιαφέρουσες πληροφορίες όπως:
Η sqlite βάση δεδομένων: Αν το gitea δεν χρησιμοποιεί μια εξωτερική βάση δεδομ