Github Security
Last updated
Last updated
(Από εδώ) Σε υψηλό επίπεδο, το GitHub είναι ένας ιστότοπος και μια υπηρεσία βασισμένη στο cloud που βοηθά τους προγραμματιστές να αποθηκεύουν και να διαχειρίζονται τον κώδικά τους, καθώς και να παρακολουθούν και να ελέγχουν τις αλλαγές στον κώδικά τους.
Οι αποθετήρια του Github μπορούν να ρυθμιστούν ως δημόσια, ιδιωτικά και εσωτερικά.
Ιδιωτικό σημαίνει ότι μόνο οι άνθρωποι του οργανισμού θα μπορούν να τα προσπελάσουν
Εσωτερικό σημαίνει ότι μόνο οι άνθρωποι της επιχείρησης (μια επιχείρηση μπορεί να έχει πολλούς οργανισμούς) θα μπορούν να το προσπελάσουν
Δημόσιο σημαίνει ότι όλο το διαδίκτυο θα μπορεί να το προσπελάσει.
Στην περίπτωση που γνωρίζετε τον χρήστη, το αποθετήριο ή τον οργανισμό που θέλετε να επιτεθείτε, μπορείτε να χρησιμοποιήσετε github dorks για να βρείτε ευαίσθητες πληροφορίες ή να αναζητήσετε διαρροές ευαίσθητων πληροφοριών σε κάθε αποθετήριο.
Το Github επιτρέπει να αναζητήσετε κάτι καθορίζοντας ως πεδίο έναν χρήστη, ένα αποθετήριο ή έναν οργανισμό. Επομένως, με μια λίστα από συμβολοσειρές που θα εμφανιστούν κοντά σε ευαίσθητες πληροφορίες, μπορείτε εύκολα να αναζητήσετε πιθανές ευαίσθητες πληροφορίες στον στόχο σας.
Εργαλεία (κάθε εργαλείο περιέχει τη λίστα των dorks του):
Παρακαλώ, σημειώστε ότ
Πείτε μου αν γνωρίζετε το API endpoint για να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες!
Πολιτική πρόσβασης τρίτων εφαρμογών: Συνιστάται να περιορίσετε την πρόσβαση σε κάθε εφαρμογή και να επιτρέψετε μόνο τις απαραίτητες (μετά από αξιολόγησή τους).
Εγκατεστημένες εφαρμογές GitHub: Συνιστάται να επιτρέπετε μόνο τις απαραίτητες (μετά από αξιολόγησή τους).
Για αυτό το σενάριο θα υποθέσουμε ότι έχετε αποκτήσει πρόσβαση σε ένα λογαριασμό github.
Εάν έχετε ήδη διαπιστευτήρια για έναν χρήστη μέσα σε μια οργάνωση, μπορείτε απλά να συνδεθείτε και να ελέγξετε ποιον ρόλο έχετε στην επιχείρηση και την οργάνωση, εάν είστε απλό μέλος, να ελέγξετε ποιες άδειες έχουν τα απλά μέλη, σε ποιες ομάδες ανήκετε, ποιες άδειες έχετε για τα αποθετήρια και πώς προστατεύονται τα αποθετήρια.
Σημειώστε ότι μπορεί να χρησιμοποιείται 2FA, οπότε θα μπορείτε να έχετε πρόσβαση σε αυτές τις πληροφορίες μόνο εάν μπορείτε επίσης να περάσετε αυτόν τον έλεγχο.
Σημειώστε ότι εάν καταφέρετε να κλέψετε το user_session
cookie (που είναι ρυθμισμένο αυτή τη στιγμή με SameSite: Lax), μπορείτε να προσωποποιήσετε πλήρως τον χρήστη χωρίς να χρειάζεστε διαπιστευτήρια ή 2FA.
Ελέγξτε την παρακάτω ενότητα για τις παρακάμψεις προστασίας κλαδιού αν είναι χρήσιμη.
Το Github επιτρέπει στους χρήστες να ορίζουν κλειδιά SSH που θα χρησιμοποιηθούν ως μέθοδος πιστοποίησης για την ανάπτυξη κώδικα εκ μέρους τους (δεν εφαρμόζεται 2FA).
Με αυτό το κλειδί μπορείτε να πραγματοποιήσετε αλλαγές σε αποθετήρια όπου ο χρήστης έχει κάποια προνόμια, ωστόσο δεν μπορείτε να το χρησιμοποιήσετε για να έχετε πρόσβαση στο API του github για να απαριθμήσετε το περιβάλλον. Ωστόσο, μπορείτε να απαριθμήσετε τις τοπικές ρυθμίσεις για να λάβετε πληροφορίες σχετικά με τα αποθετήρια και τον χρήστη στον οποίο έχετε πρόσβαση:
Εάν ο χρήστης έχει ρυθμίσει το όνομα χρήστη του ως το όνομα χρήστη του GitHub, μπορείτε να έχετε πρόσβαση στα δημόσια κλειδιά που έχει ορίσει στον λογαριασμό του στο https://github.com/<github_username>.keys, μπορείτε να ελέγξετε αυτό για να επιβεβαιώσετε ότι το ιδιωτικό κλειδί που βρήκατε μπορεί να χρησιμοποιηθεί.
Τα κλειδιά SSH μπορούν επίσης να οριστούν σε αποθετήρια ως κλειδιά αναπτύξεων. Οποιοσδήποτε έχει πρόσβαση σε αυτό το κλειδί θα μπορεί να εκκινήσει έργα από ένα αποθετήριο. Συνήθως, σε έναν διακομιστή με διάφορα κλειδιά αναπτύξεων, το τοπικό αρχείο ~/.ssh/config
θα σας δώσει πληροφορίες σχετικά με το ποιο κλειδί σχετίζεται.
Όπως εξηγείται εδώ, μερικές φορές είναι απαραίτητο να υπογράψετε τις δεσμεύσεις ή μπορεί να αποκαλυφθείτε.
Ελέγξτε τοπικά εάν ο τρέχων χρήστης έχει κάποιο κλειδί με:
Για μια εισαγωγή σχετικά με τα User Tokens ελέγξτε τις βασικές πληροφορίες.
Ένα User token μπορεί να χρησιμοποιηθεί αντί για κωδικό πρόσβασης για το Git μέσω HTTPS, ή μπορεί να χρησιμοποιηθεί για πιστοποίηση στο API μέσω βασικής πιστοποίησης. Ανάλογα με τα προνόμια που του έχουν ανατεθεί, μπορείτε να εκτελέσετε διάφορες ενέργειες.
Ένα User token φαίνεται έτσι: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
Για μια εισαγωγή σχετικά με τις εφαρμογές Github Oauth ελέγξτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη εφαρμογή Oauth για να έχει πρόσβαση σε προνομιούχα δεδομένα/ενέργειες των χρηστών που τους αποδέχονται πιθανότατα ως μέρος μιας επίθεσης phishing.
Αυτά είναι τα scopes που μια εφαρμογή Oauth μπορεί να ζητήσει. Πρέπει πάντα να ελέγχετε τα ζητούμενα scopes πριν τα αποδεχτείτε.
Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να παρέχουν/απαγορεύουν πρόσβαση σε εφαρμογές τρίτων σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.
Για μια εισαγωγή σχετικά με τις εφαρμογές Github ελέγξτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη εφαρμογή Github για να έχει πρόσβαση σε προνομιούχα δεδομένα/ενέργειες των χρηστών που τους αποδέχονται πιθανότατα ως μέρος μιας επίθεσης phishing.
Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να παρέχουν/απαγορεύουν πρόσβαση σε εφαρμογές τρίτων σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.
Υπάρχουν αρκετές τεχνικές για να παραβιάσετε και να καταχρηστείτε μια Github Action, ελέγξτε τις εδώ:
Απαιτήστε έναν αριθμό εγκρίσεων: Αν παραβιάσετε αρκετούς λογαριασμούς, μπορείτε απλά να αποδεχθείτε τα PRs σας από άλλους λογαριασμούς. Αν έχετε μόνο τον λογαριασμό από τον οποίο δημιουργήσατε το PR, δεν μπορείτε να αποδεχθείτε το δικό σας PR. Ωστόσο, αν έχετε πρόσβαση σε ένα περιβάλλον Github Action μέσα στο αποθετήριο, χρησιμοποιώντας το GITHUB_TOKEN μπορείτε να εγκρίνετε το δικό σας PR και να λάβετε 1 έγκριση με αυτόν τον τρόπο.
Σημείωση για αυτό και για τον περιορισμό των ιδιοκτητών κώδικα ότι συνήθως ένας χρήστης δεν θα μπορεί να εγκρίνει τα δικά του PRs, αλλά αν είστε, μπορείτε να το καταχραστείτε για να αποδεχθείτε τα δικά σας PRs.
Απόρριψη εγκρίσεων όταν ανεβάζονται νέες αλλαγές: Αν αυτό δεν έχει οριστεί, μπορείτε να υποβάλετε νόμιμο κώδικα, να περιμένετε μέχρι κάποιος να το εγκρίνει και να τοποθετήσετε κακόβουλο κώδικα και να τον συγχωνεύσετε στο προστατευμένο κλαδί.
Απαιτήστε αξιολογήσεις από τους ιδιοκτήτες του κώδικα: Αν αυτό είναι ενεργοποιημένο και είστε ιδιοκτήτης του κώδικα, μπορείτε να κάνετε μια Github Action να δημιουργήσει το δικό σας PR και να το εγκρίνετε μόνοι σας.
Όταν ένα αρχείο CODEOWNER δεν έχει διαμορφωθεί σωστά, η Github δεν διαμαρτύρεται, αλλά δεν το χρησιμοποιεί. Επομένως, αν είναι διαμορφωμένο εσφαλμένα, η προστασία των ιδιοκτητών κώδικα δεν εφαρμόζεται.
Επιτρέψτε σε συγκεκριμένους χρήστες να παρακάμψουν τις απαιτήσεις των αιτημάτων ενσωμάτωσης (pull request): Αν είστε ένας από αυτούς τους χρήστες, μπορείτε να παρακάμψετε τις προστασίες των αιτημάτων ενσ
Σημείωση ότι μετά τη δημιουργία του κλαδιού, η προστασία του κλαδιού θα ισχύει για το νέο κλαδί και δεν θα μπορείτε να το τροποποιήσετε, αλλά εν τω μεταξύ θα έχετε ήδη διαρρεύσει τα μυστικά.
Δημιουργία διακριτικού χρήστη
Κλοπή διακριτικών github από μυστικά
Διαγραφή αποτελεσμάτων ροής εργασίας και κλαδιών
Παροχή περισσότερων δικαιωμάτων σε όλο τον οργανισμό
Δημιουργία webhooks για εξαγωγή πληροφοριών
Πρόσκληση εξωτερικών συνεργατών
Αφαίρεση webhooks που χρησιμοποιούνται από το SIEM
Δημιουργία/τροποποίηση Github Action με πίσω πόρτα
Εύρεση ευπαθούς Github Action για εντολή εισαγωγής μέσω τροποποίησης της τιμής του μυστικού
Στο Github είναι δυνατόν να δημιουργηθεί ένα PR σε ένα αποθετήριο από ένα fork. Ακόμα κι αν το PR δεν γίνει αποδεκτό, θα δημιουργηθεί ένα αναγνωριστικό commit στο αρχικό αποθετήριο για την έκδοση του κώδικα του fork. Επομένως, ένας επιτιθέμενος μπορεί να αναφερθεί σε ένα συγκεκριμένο commit από ένα φαινομενικά νόμιμο αποθετήριο που δεν δημιουργήθηκε από τον ιδιοκτήτη του αποθετηρίου.
Όπως εδώ:
Για περισσότερες πληροφορίες, ελέγξτε https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd