Github 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)
(From here) Σε υψηλό επίπεδο, το GitHub είναι μια ιστοσελίδα και μια υπηρεσία βασισμένη στο cloud που βοηθά τους προγραμματιστές να αποθηκεύουν και να διαχειρίζονται τον κώδικά τους, καθώς και να παρακολουθούν και να ελέγχουν τις αλλαγές στον κώδικά τους.
Τα αποθετήρια του Github μπορούν να ρυθμιστούν ως δημόσια, ιδιωτικά και εσωτερικά.
Ιδιωτικά σημαίνει ότι μόνο οι άνθρωποι της οργάνωσης θα μπορούν να τα προσπελάσουν
Εσωτερικά σημαίνει ότι μόνο οι άνθρωποι της επιχείρησης (μια επιχείρηση μπορεί να έχει πολλές οργανώσεις) θα μπορούν να το προσπελάσουν
Δημόσια σημαίνει ότι όλο το διαδίκτυο θα μπορεί να το προσπελάσει.
Σε περίπτωση που γνωρίζετε τον χρήστη, το αποθετήριο ή την οργάνωση που θέλετε να στοχεύσετε, μπορείτε να χρησιμοποιήσετε github dorks για να βρείτε ευαίσθητες πληροφορίες ή να αναζητήσετε ευαίσθητες πληροφορίες διαρροών σε κάθε αποθετήριο.
Το Github επιτρέπει να αναζητάτε κάτι καθορίζοντας ως πεδίο έναν χρήστη, ένα αποθετήριο ή μια οργάνωση. Επομένως, με μια λίστα από συμβολοσειρές που θα εμφανίζονται κοντά σε ευαίσθητες πληροφορίες μπορείτε εύκολα να αναζητήσετε πιθανές ευαίσθητες πληροφορίες στον στόχο σας.
Tools (κάθε εργαλείο περιέχει τη λίστα του με dorks):
Παρακαλώ σημειώστε ότι οι github dorks προορίζονται επίσης για αναζήτηση διαρροών χρησιμοποιώντας τις επιλογές αναζήτησης του github. Αυτή η ενότητα είναι αφιερωμένη σε εκείνα τα εργαλεία που θα κατεβάσουν κάθε αποθετήριο και θα αναζητήσουν ευαίσθητες πληροφορίες σε αυτά (ακόμη και ελέγχοντας ορισμένο βάθος commits).
Tools (κάθε εργαλείο περιέχει τη λίστα του με regexes):
Όταν αναζητάτε διαρροές σε ένα αποθετήριο και εκτελείτε κάτι όπως git log -p
μην ξεχάσετε ότι μπορεί να υπάρχουν άλλες branches με άλλα commits που περιέχουν μυστικά!
Είναι δυνατόν να συμβιβαστούν αποθετήρια εκμεταλλευόμενοι pull requests. Για να γνωρίζετε αν ένα αποθετήριο είναι ευάλωτο, πρέπει κυρίως να διαβάσετε τις ρυθμίσεις yaml των Github Actions. Περισσότερες πληροφορίες παρακάτω.
Ακόμη και αν είναι διαγραμμένα ή εσωτερικά, μπορεί να είναι δυνατό να αποκτήσετε ευαίσθητα δεδομένα από forks αποθετηρίων του github. Ελέγξτε το εδώ:
Accessible Deleted Data in GithubΥπάρχουν ορισμένα προεπιλεγμένα προνόμια που μπορούν να ανατεθούν σε μέλη της οργάνωσης. Αυτά μπορούν να ελεγχθούν από τη σελίδα https://github.com/organizations/<org_name>/settings/member_privileges
ή από το Organizations API.
Βασικές άδειες: Τα μέλη θα έχουν την άδεια None/Read/write/Admin πάνω στα αποθετήρια της οργάνωσης. Συνιστάται το None ή το Read.
Forking αποθετηρίων: Αν δεν είναι απαραίτητο, είναι καλύτερα να μην επιτρέπεται στα μέλη να fork-άρουν τα αποθετήρια της οργάνωσης.
Δημιουργία σελίδων: Αν δεν είναι απαραίτητο, είναι καλύτερα να μην επιτρέπεται στα μέλη να δημοσιεύουν σελίδες από τα αποθετήρια της οργάνωσης. Αν είναι απαραίτητο, μπορείτε να επιτρέψετε τη δημιουργία δημόσιων ή ιδιωτικών σελίδων.
Αιτήματα πρόσβασης για ενσωματώσεις: Με αυτό ενεργοποιημένο, οι εξωτερικοί συνεργάτες θα μπορούν να ζητούν πρόσβαση για εφαρμογές GitHub ή OAuth για να αποκτήσουν πρόσβαση σε αυτή την οργάνωση και τους πόρους της. Συνήθως είναι απαραίτητο, αλλά αν όχι, είναι καλύτερα να το απενεργοποιήσετε.
Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
Αλλαγή ορατότητας αποθετηρίου: Αν είναι ενεργοποιημένο, τα μέλη με δικαιώματα διαχειριστή για το αποθετήριο θα μπορούν να αλλάξουν την ορατότητά του. Αν είναι απενεργοποιημένο, μόνο οι ιδιοκτήτες της οργάνωσης μπορούν να αλλάξουν τις ορατότητες των αποθετηρίων. Αν δεν θέλετε οι άνθρωποι να κάνουν τα πράγματα δημόσια, βεβαιωθείτε ότι αυτό είναι απενεργοποιημένο.
Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
Διαγραφή και μεταφορά αποθετηρίων: Αν είναι ενεργοποιημένο, τα μέλη με δικαιώματα διαχειριστή για το αποθετήριο θα μπορούν να διαγράψουν ή να μεταφέρουν δημόσια και ιδιωτικά αποθετήρια.
Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
Επιτρέψτε στα μέλη να δημιουργούν ομάδες: Αν είναι ενεργοποιημένο, οποιοδήποτε μέλος της οργάνωσης θα μπορεί να δημιουργήσει νέες ομάδες. Αν είναι απενεργοποιημένο, μόνο οι ιδιοκτήτες της οργάνωσης μπορούν να δημιουργήσουν νέες ομάδες. Είναι καλύτερα να έχετε αυτό απενεργοποιημένο.
Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
Περισσότερα πράγματα μπορούν να ρυθμιστούν σε αυτή τη σελίδα, αλλά τα προηγούμενα είναι τα πιο σχετιζόμενα με την ασφάλεια.
Διάφορες ρυθμίσεις σχετικές με την ασφάλεια μπορούν να ρυθμιστούν για τις ενέργειες από τη σελίδα https://github.com/organizations/<org_name>/settings/actions
.
Σημειώστε ότι όλες αυτές οι ρυθμίσεις μπορούν επίσης να ρυθμιστούν σε κάθε αποθετήριο ανεξάρτητα
Πολιτικές ενεργειών Github: Σας επιτρέπει να υποδείξετε ποια αποθετήρια μπορούν να εκτελούν workflows και ποια workflows θα πρέπει να επιτρέπονται. Συνιστάται να καθορίσετε ποια αποθετήρια θα πρέπει να επιτρέπονται και να μην επιτρέπετε σε όλες τις ενέργειες να εκτελούνται.
Fork pull request workflows από εξωτερικούς συνεργάτες: Συνιστάται να απαιτείται έγκριση για όλους τους εξωτερικούς συνεργάτες.
Δεν μπόρεσα να βρω ένα API με αυτές τις πληροφορίες, μοιραστείτε αν το κάνετε
Εκτέλεση workflows από fork pull requests: Είναι πολύ ανεπιθύμητο να εκτελούνται workflows από pull requests καθώς οι διαχειριστές της προέλευσης του fork θα αποκτούν τη δυνατότητα να χρησιμοποιούν tokens με δικαιώματα ανάγνωσης στο αποθετήριο προέλευσης.
Δεν μπόρεσα να βρω ένα API με αυτές τις πληροφορίες, μοιραστείτε αν το κάνετε
Δικαιώματα workflows: Συνιστάται να δίνονται μόνο δικαιώματα ανάγνωσης αποθετηρίου. Είναι ανεπιθύμητο να δίνονται δικαιώματα εγγραφής και δημιουργίας/έγκρισης pull requests για να αποφευχθεί η κακή χρήση του GITHUB_TOKEN που δίνεται για την εκτέλεση workflows.
Ενημερώστε με αν γνωρίζετε το API endpoint για να αποκτήσετε αυτές τις πληροφορίες!
Πολιτική πρόσβασης τρίτων εφαρμογών: Συνιστάται να περιορίζετε την πρόσβαση σε κάθε εφαρμογή και να επιτρέπετε μόνο τις απαραίτητες (μετά από ανασκόπηση τους).
Εγκατεστημένες εφαρμογές GitHub: Συνιστάται να επιτρέπετε μόνο τις απαραίτητες (μετά από ανασκόπηση τους).
Για αυτό το σενάριο θα υποθέσουμε ότι έχετε αποκτήσει κάποια πρόσβαση σε έναν λογαριασμό github.
Αν έχετε με κάποιο τρόπο ήδη διαπιστευτήρια για έναν χρήστη μέσα σε μια οργάνωση, μπορείτε απλά να συνδεθείτε και να ελέγξετε ποιους ρόλους επιχείρησης και οργάνωσης έχετε, αν είστε απλός μέλος, ελέγξτε ποια δικαιώματα έχουν τα απλά μέλη, σε ποιες ομάδες είστε, ποια δικαιώματα έχετε πάνω σε ποια αποθετήρια, και πώς είναι προστατευμένα τα αποθετήρια.
Σημειώστε ότι η 2FA μπορεί να χρησιμοποιείται οπότε θα μπορείτε να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες μόνο αν μπορείτε επίσης να περάσετε αυτόν τον έλεγχο.
Σημειώστε ότι αν καταφέρετε να κλέψετε το cookie user_session
(προς το παρόν ρυθμισμένο με SameSite: Lax) μπορείτε να παριστάνετε πλήρως τον χρήστη χωρίς να χρειάζεστε διαπιστευτήρια ή 2FA.
Ελέγξτε την παρακάτω ενότητα σχετικά με παρακάμψεις προστασίας branch σε περίπτωση που είναι χρήσιμη.
Το Github επιτρέπει στους χρήστες να ρυθμίζουν SSH keys που θα χρησιμοποιούνται ως μέθοδος αυθεντικοποίησης για την ανάπτυξη κώδικα εκ μέρους τους (δεν εφαρμόζεται 2FA).
Με αυτό το κλειδί μπορείτε να κάνετε αλλαγές σε αποθετήρια όπου ο χρήστης έχει κάποια προνόμια, ωστόσο δεν μπορείτε να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στο github api για να καταγράψετε το περιβάλλον. Ωστόσο, μπορείτε να καταγράψετε τις τοπικές ρυθμίσεις για να αποκτήσετε πληροφορίες σχετικά με τα αποθετήρια και τον χρήστη που έχετε πρόσβαση σε:
Αν ο χρήστης έχει ρυθμίσει το όνομα χρήστη του ως το όνομα χρήστη του github, μπορείτε να αποκτήσετε πρόσβαση στα δημόσια κλειδιά που έχει ρυθμίσει στον λογαριασμό του στο https://github.com/<github_username>.keys, μπορείτε να το ελέγξετε αυτό για να επιβεβαιώσετε ότι το ιδιωτικό κλειδί που βρήκατε μπορεί να χρησιμοποιηθεί.
SSH κλειδιά μπορούν επίσης να ρυθμιστούν σε αποθετήρια ως κλειδιά ανάπτυξης. Οποιοσδήποτε έχει πρόσβαση σε αυτό το κλειδί θα μπορεί να εκκινήσει έργα από ένα αποθετήριο. Συνήθως σε έναν διακομιστή με διαφορετικά κλειδιά ανάπτυξης, το τοπικό αρχείο ~/.ssh/config
θα σας δώσει πληροφορίες σχετικά με το ποιο κλειδί σχετίζεται.
Όπως εξηγείται εδώ, μερικές φορές είναι απαραίτητο να υπογράψετε τις δεσμεύσεις ή μπορεί να σας ανακαλύψουν.
Ελέγξτε τοπικά αν ο τρέχων χρήστης έχει κάποιο κλειδί με:
Για μια εισαγωγή σχετικά με Tokens Χρήστη δείτε τις βασικές πληροφορίες.
Ένα token χρήστη μπορεί να χρησιμοποιηθεί αντί για έναν κωδικό πρόσβασης για το Git μέσω HTTPS, ή μπορεί να χρησιμοποιηθεί για αυθεντικοποίηση στην API μέσω Βασικής Αυθεντικοποίησης. Ανάλογα με τα δικαιώματα που συνδέονται με αυτό, μπορεί να είστε σε θέση να εκτελέσετε διάφορες ενέργειες.
Ένα token χρήστη φαίνεται έτσι: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
Για μια εισαγωγή σχετικά με Εφαρμογές Oauth του Github δείτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη Εφαρμογή Oauth για να αποκτήσει πρόσβαση σε προνομιακά δεδομένα/ενέργειες των χρηστών που τις αποδέχονται πιθανώς ως μέρος μιας εκστρατείας phishing.
Αυτές είναι οι σκοποί που μπορεί να ζητήσει μια εφαρμογή Oauth. Πρέπει πάντα να ελέγχετε τους σκοπούς που ζητούνται πριν τους αποδεχθείτε.
Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να δώσουν/αρνηθούν πρόσβαση σε τρίτες εφαρμογές σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.
Για μια εισαγωγή σχετικά με Εφαρμογές Github δείτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη Εφαρμογή Github για να αποκτήσει πρόσβαση σε προνομιακά δεδομένα/ενέργειες των χρηστών που τις αποδέχονται πιθανώς ως μέρος μιας εκστρατείας phishing.
Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να δώσουν/αρνηθούν πρόσβαση σε τρίτες εφαρμογές σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.
Υπάρχουν πολλές τεχνικές για να συμβιβάσετε και να καταχραστείτε μια Github Action, ελέγξτε τις εδώ:
Abusing Github ActionsΑπαιτείται αριθμός εγκρίσεων: Αν έχετε συμβιβάσει αρκετούς λογαριασμούς, μπορείτε απλώς να αποδεχθείτε τα PR σας από άλλους λογαριασμούς. Αν έχετε μόνο τον λογαριασμό από τον οποίο δημιουργήσατε το PR, δεν μπορείτε να αποδεχθείτε το δικό σας PR. Ωστόσο, αν έχετε πρόσβαση σε ένα Github Action περιβάλλον μέσα στο αποθετήριο, χρησιμοποιώντας το GITHUB_TOKEN μπορεί να είστε σε θέση να εγκρίνετε το PR σας και να αποκτήσετε 1 έγκριση με αυτόν τον τρόπο.
Σημείωση για αυτό και για τον περιορισμό των Ιδιοκτητών Κώδικα ότι συνήθως ένας χρήστης δεν θα μπορεί να εγκρίνει τα δικά του PR, αλλά αν μπορείτε, μπορείτε να το καταχραστείτε για να αποδεχθείτε τα PR σας.
Αναίρεση εγκρίσεων όταν γίνονται νέες υποβολές: Αν αυτό δεν έχει ρυθμιστεί, μπορείτε να υποβάλετε νόμιμο κώδικα, να περιμένετε μέχρι να το εγκρίνει κάποιος και να προσθέσετε κακόβουλο κώδικα και να το συγχωνεύσετε στο προστατευμένο κλάδο.
Απαιτείται ανασκόπηση από Ιδιοκτήτες Κώδικα: Αν αυτό είναι ενεργοποιημένο και είστε Ιδιοκτήτης Κώδικα, μπορείτε να κάνετε μια Github Action να δημιουργήσει το PR σας και στη συνέχεια να το εγκρίνετε εσείς οι ίδιοι.
Όταν ένα αρχείο CODEOWNER είναι λανθασμένα ρυθμισμένο, το Github δεν παραπονιέται αλλά δεν το χρησιμοποιεί. Επομένως, αν είναι λανθασμένα ρυθμισμένο, η προστασία Ιδιοκτητών Κώδικα δεν εφαρμόζεται.
Επιτρέψτε σε καθορισμένους ηθοποιούς να παρακάμψουν τις απαιτήσεις αιτήσεων έλξης: Αν είστε ένας από αυτούς τους ηθοποιούς, μπορείτε να παρακάμψετε τις προστασίες αιτήσεων έλξης.
Συμπεριλάβετε διαχειριστές: Αν αυτό δεν έχει ρυθμιστεί και είστε διαχειριστής του αποθετηρίου, μπορείτε να παρακάμψετε αυτές τις προστασίες κλάδου.
Απαγωγή PR: Μπορείτε να είστε σε θέση να τροποποιήσετε το PR κάποιου άλλου προσθέτοντας κακόβουλο κώδικα, εγκρίνοντας το προκύπτον PR εσείς οι ίδιοι και συγχωνεύοντας τα πάντα.
Αφαίρεση Προστασιών Κλάδου: Αν είστε διαχειριστής του αποθετηρίου μπορείτε να απενεργοποιήσετε τις προστασίες, να συγχωνεύσετε το PR σας και να επαναφέρετε τις προστασίες.
Παράκαμψη προστασιών υποβολής: Αν ένα αποθετήριο επιτρέπει μόνο σε ορισμένους χρήστες να στέλνουν υποβολές (συγχώνευση κώδικα) σε κλάδους (η προστασία κλάδου μπορεί να προστατεύει όλους τους κλάδους καθορίζοντας το wildcard *
).
Αν έχετε δικαιώματα εγγραφής στο αποθετήριο αλλά δεν επιτρέπεται να στείλετε κώδικα λόγω της προστασίας κλάδου, μπορείτε ακόμα να δημιουργήσετε μια νέα κλάδο και μέσα σε αυτήν να δημιουργήσετε μια github action που ενεργοποιείται όταν στέλνεται κώδικας. Καθώς η προστασία κλάδου δεν θα προστατεύει την κλάδο μέχρι να δημιουργηθεί, αυτή η πρώτη υποβολή κώδικα στην κλάδο θα εκτελέσει την github action.
Για μια εισαγωγή σχετικά με Περιβάλλον Github δείτε τις βασικές πληροφορίες.
Σε περίπτωση που ένα περιβάλλον μπορεί να προσεγγιστεί από όλους τους κλάδους, δεν είναι προστατευμένο και μπορείτε εύκολα να αποκτήσετε πρόσβαση στα μυστικά μέσα στο περιβάλλον. Σημειώστε ότι μπορεί να βρείτε αποθετήρια όπου όλοι οι κλάδοι είναι προστατευμένοι (καθορίζοντας τα ονόματά τους ή χρησιμοποιώντας *
) σε αυτή την περίπτωση, βρείτε μια κλάδο όπου μπορείτε να στείλετε κώδικα και μπορείτε να εξάγετε τα μυστικά δημιουργώντας μια νέα github action (ή τροποποιώντας μία).
Σημειώστε ότι μπορεί να βρείτε την ακραία περίπτωση όπου όλοι οι κλάδοι είναι προστατευμένοι (μέσω wildcard *
) και καθορίζεται ποιος μπορεί να στείλει κώδικα στους κλάδους (μπορείτε να το καθορίσετε στην προστασία κλάδου) και ο χρήστης σας δεν επιτρέπεται. Μπορείτε ακόμα να εκτελέσετε μια προσαρμοσμένη github action γιατί μπορείτε να δημιουργήσετε μια κλάδο και να χρησιμοποιήσετε το trigger υποβολής πάνω της. Η προστασία κλάδου επιτρέπει την υποβολή σε μια νέα κλάδο, οπότε η github action θα ενεργοποιηθεί.
Σημειώστε ότι μετά τη δημιουργία του κλάδου, η προστασία του κλάδου θα ισχύει για τον νέο κλάδο και δεν θα μπορείτε να τον τροποποιήσετε, αλλά μέχρι τότε θα έχετε ήδη εξάγει τα μυστικά.
Δημιουργία token χρήστη
Κλοπή github tokens από μυστικά
Διαγραφή των αποτελεσμάτων ροής εργασίας και κλάδων
Δώστε περισσότερες άδειες σε όλη την οργάνωση
Δημιουργία webhooks για εξαγωγή πληροφοριών
Πρόσκληση εξωτερικών συνεργατών
Αφαίρεση webhooks που χρησιμοποιούνται από το SIEM
Δημιουργία/τροποποίηση Github Action με πίσω πόρτα
Βρείτε ευάλωτο Github Action για εκτέλεση εντολών μέσω τροποποίησης της τιμής του μυστικού
Στο Github είναι δυνατό να δημιουργήσετε ένα PR σε ένα αποθετήριο από ένα fork. Ακόμα και αν το PR δεν γίνει αποδεκτό, μια δέσμευση id μέσα στο αρχικό αποθετήριο θα δημιουργηθεί για την έκδοση fork του κώδικα. Επομένως, ένας επιτιθέμενος θα μπορούσε να επιμείνει να χρησιμοποιήσει μια συγκεκριμένη δέσμευση από ένα φαινομενικά νόμιμο αποθετήριο που δεν δημιουργήθηκε από τον ιδιοκτήτη του αποθετηρίου.
Όπως αυτό:
Για περισσότερες πληροφορίες, ελέγξτε https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)