Basic Github Information

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Βασική Δομή

Η βασική δομή του περιβάλλοντος του Github για μια μεγάλη εταιρεία είναι να έχει ένα επιχείρηση που έχει πολλαπλές οργανώσεις και κάθε μία από αυτές μπορεί να περιέχει πολλαπλά αποθετήρια και πολλαπλές ομάδες. Οι μικρότερες εταιρείες μπορεί να έχουν μόνο μία οργάνωση και καμία επιχείρηση.

Από την πλευρά του χρήστη, ένας χρήστης μπορεί να είναι μέλος διαφορετικών επιχειρήσεων και οργανώσεων. Μέσα σε αυτές, ο χρήστης μπορεί να έχει διάφορους ρόλους επιχείρησης, οργάνωσης και αποθετηρίου.

Επιπλέον, ένας χρήστης μπορεί να είναι μέλος διαφορετικών ομάδων με διάφορους ρόλους επιχείρησης, οργάνωσης ή αποθετηρίου.

Και τέλος, τα αποθετήρια μπορεί να έχουν ειδικούς μηχανισμούς προστασίας.

Προνόμια

Ρόλοι Επιχείρησης

  • Ιδιοκτήτης επιχείρησης: Οι άνθρωποι με αυτόν τον ρόλο μπορούν να διαχειρίζονται διαχειριστές, να διαχειρίζονται οργανώσεις εντός της επιχείρησης, να διαχειρίζονται τις ρυθμίσεις της επιχείρησης, να επιβάλλουν πολιτική σε όλες τις οργανώσεις. Ωστόσο, δεν μπορούν να έχουν πρόσβαση στις ρυθμίσεις ή το περιεχόμενο της οργάνωσης εκτός αν γίνουν ιδιοκτήτες της οργάνωσης ή του δοθεί άμεση πρόσβαση σε ένα αποθετήριο που ανήκει στην οργάνωση.

  • Μέλη επιχείρησης: Τα μέλη των οργανώσεων που ανήκουν στην επιχείρησή σας είναι επίσης αυτόματα μέλη της επιχείρησης.

Ρόλοι Οργάνωσης

Σε μια οργάνωση, οι χρήστες μπορούν να έχουν διάφορους ρόλους:

  • Ιδιοκτήτες οργάνωσης: Οι ιδιοκτήτες της οργάνωσης έχουν πλήρη διαχειριστική πρόσβαση στην οργάνωσή σας. Αυτός ο ρόλος πρέπει να περιορίζεται, αλλά όχι λιγότερο από δύο άτομα, στην οργάνωσή σας.

  • Μέλη οργάνωσης: Ο προεπιλεγμένος, μη διαχειριστικός ρόλος για άτομα σε μια οργάνωση είναι το μέλος της οργάνωσης. Από προεπιλογή, τα μέλη της οργάνωσης έχουν ορισμένες άδειες.

  • Διαχειριστές χρέωσης: Οι διαχειριστές χρέωσης είναι χρήστες που μπορούν να **δια

Εφαρμογές Oauth

Οι εφαρμογές Oauth μπορεί να σας ζητήσουν άδειες για να έχουν πρόσβαση σε μέρος των πληροφοριών σας στο github ή για να σας προσομοιώσουν και να εκτελέσουν ορισμένες ενέργειες. Ένα κοινό παράδειγμα αυτής της λειτουργίας είναι το κουμπί σύνδεσης με το github που μπορείτε να βρείτε σε ορισμένες πλατφόρμες.

Ορισμένες συστάσεις ασφαλείας:

  • Μια εφαρμογή OAuth πρέπει πάντα να ενεργεί ως ελεγχόμενος χρήστης του GitHub σε όλο το GitHub (για παράδειγμα, κατά την παροχή ειδοποιήσεων χρήστη) και με πρόσβαση μόνο στις καθορισμένες εξουσίες.

  • Μια εφαρμογή OAuth μπορεί να χρησιμοποιηθεί ως πάροχος ταυτότητας ενεργοποιώντας την επιλογή "Σύνδεση με το GitHub" για τον ελεγχόμενο χρήστη.

  • Μην δημιουργείτε μια εφαρμογή OAuth αν θέλετε η εφαρμογή σας να λειτουργεί σε ένα μόνο αποθετήριο. Με την εξουσία repo των εφαρμογών OAuth, μπορούν να εκτελούν ενέργειες σε όλα τα αποθετήρια του ελεγχόμενου χρήστη.

  • Μην δημιουργείτε μια εφαρμογή OAuth για να λειτουργεί ως εφαρμογή για την ομάδα ή την εταιρεία σας. Οι εφαρμογές OAuth ελέγχονται ως ένας μόνο χρήστης, οπότε αν κάποιος δημιουργήσει μια εφαρμογή OAuth για τη χρήση μιας εταιρείας και στη συνέχεια αποχωρήσει από την εταιρεία, κανείς άλλος δεν θα έχει πρόσβαση σε αυτήν.

  • Περισσότερα εδώ (https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).

Εφαρμογές Github

Οι εφαρμογές Github μπορούν να ζητήσουν άδειες για να έχουν πρόσβαση στις πληροφορίες σας στο github ή να σας προσομοιώσουν για να εκτελέσουν συγκεκριμένες ενέργειες σε συγκεκριμένους πόρους. Στις εφαρμογές Github πρέπει να καθορίσετε τα αποθετήρια στα οποία θα έχει πρόσβαση η εφαρμογή.

  • Για να εγκαταστήσετε μια εφαρμογή GitHub, πρέπει να είστε ιδιοκτήτης μιας οργάνωσης ή να έχετε δικαιώματα διαχειριστή σε ένα αποθετήριο.

  • Η εφαρμογή Github πρέπει να συνδεθεί με ένα προσωπικό λογαριασμό ή μια οργάνωση.

  • Μπορείτε να δημιουργήσετε τη δική σας εφαρμογή Github στο https://github.com/settings/apps

  • Μπορείτε να δείτε όλες τις εφαρμογές Github που έχουν πρόσβαση στον λογαριασμό σας στο https://github.com/settings/apps/authorizations

  • Αυτά είναι τα API Endpoints για τις εφαρμογές Github https://docs.github.com/en/rest/overview/endpoints-available-for-github-app. Ανάλογα με τις εξουσίες της εφαρμογής, θα έχει πρόσβαση σε ορισμένα από αυτά.

  • Μπορείτε να δείτε τις εγκατεστημένες εφαρμογές σε μια οργάνωση στο https://github.com/organizations/<org_name>/settings/installations

Ορισμένες συστάσεις ασφαλείας:

  • Μια εφαρμογή Github πρέπει να πραγματοποιεί ενέργειες ανεξάρτητα από έναν χρήστη (εκτός αν η εφαρμογή χρησιμοποιεί ένα διακριτικό από χρήστη προς διακομιστή). Για να διατηρήσετε τα διακριτικά πρόσβασης από χρήστη προς διακομιστή πιο ασφαλή, μπορείτε να χρησιμοποιήσετε διακριτικά πρόσβασ

steps:
- name: Hello world action
with: # Set the secret as an input
super_secret: ${{ secrets.SuperSecret }}
env: # Or as an environment variable
super_secret: ${{ secrets.SuperSecret }}

Παράδειγμα χρησιμοποιώντας το Bash

steps:
- shell: bash
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$SUPER_SECRET"

Τα μυστικά μπορούν να προσπελαστούν μόνο από τις Github Actions που τα έχουν δηλωμένα.

Μόλις ρυθμιστούν στο αποθετήριο ή στους οργανισμούς, οι χρήστες του github δεν θα μπορούν να τα προσπελάσουν ξανά, απλά θα μπορούν να τα αλλάξουν.

Επομένως, ο μοναδικός τρόπος να κλέψετε μυστικά του github είναι να έχετε πρόσβαση στη μηχανή που εκτελεί τη Github Action (σε αυτό το σενάριο θα μπορείτε να έχετε πρόσβαση μόνο στα μυστικά που έχουν δηλωθεί για την Action).

Περιβάλλοντα Git

Το Github επιτρέπει τη δημιουργία περιβαλλόντων όπου μπορείτε να αποθηκεύσετε μυστικά. Στη συνέχεια, μπορείτε να δώσετε πρόσβαση στη Github Action στα μυστικά μέσα στο περιβάλλον με κάτι σαν:

jobs:
deployment:
runs-on: ubuntu-latest
environment: env_name

Μπορείτε να ρυθμίσετε ένα περιβάλλον ώστε να έχουν πρόσβαση όλα τα branches (προεπιλογή), μόνο τα προστατευμένα branches ή να καθορίσετε ποια branches μπορούν να έχουν πρόσβαση. Μπορεί επίσης να ορίσει έναν αριθμό απαιτούμενων αξιολογήσεων πριν από την εκτέλεση μιας ενέργειας χρησιμοποιώντας ένα περιβάλλον ή να περιμένει κάποιο χρονικό διάστημα πριν επιτρέψει τις αναπτύξεις να συνεχιστούν.

Git Action Runner

Μια Github Action μπορεί να εκτελεστεί εντός του περιβάλλοντος του github ή μπορεί να εκτελεστεί σε μια υποδομή τρίτου μέρους που έχει ρυθμιστεί από τον χρήστη.

Πολλοί οργανισμοί θα επιτρέψουν την εκτέλεση των Github Actions σε μια υποδομή τρίτου μέρους καθώς είναι φθηνότερο.

Μπορείτε να καταγράψετε τους self-hosted runners ενός οργανισμού στο https://github.com/organizations/<org_name>/settings/actions/runners

Ο τρόπος για να βρείτε ποιες Github Actions εκτελούνται σε μη-github υποδομή είναι να αναζητήσετε το runs-on: self-hosted στο αρχείο ρυθμίσεων yaml της Github Action.

Δεν είναι δυνατή η εκτέλεση μιας Github Action ενός οργανισμού μέσα σε ένα self-hosted box ενός διαφορετικού οργανισμού επειδή ένα μοναδικό τοκέν δημιουργείται για το Runner κατά την ρύθμισή του για να γνωρίζει σε ποιον Runner ανήκει.

Αν ο προσαρμοσμένος Github Runner έχει ρυθμιστεί σε μια μηχανή μέσα στο AWS ή το GCP για παράδειγμα, η Action μπορεί να έχει πρόσβαση στο metadata endpoint και να κλέψει το τοκέν του λογαριασμού υπηρεσίας με τον οποίο η μηχανή λειτουργεί.

Παραβίαση Git Action

Εάν επιτραπεί η εκτέλεση όλων των ενεργειών (ή μιας κακόβουλης ενέργειας), ένας χρήστης μπορεί να χρησιμοποιήσει μια κακόβουλη Github Action που θα παραβιάσει το container όπου εκτελείται.

Μια κακόβουλη Github Action μπορεί να καταχραστείται από τον επιτιθέμενο για:

  • Κλοπή όλων των μυστικών στα οποία έχει πρόσβαση η Action

  • Μετακίνηση πλευρικά εάν η Action εκτελείται σε μια υποδομή τρίτου μέρους όπου το SA token που χρησιμοποιείται για τη λειτουργία της μηχανής μπορεί να προσπελαστεί (πιθανώς μέσω της υπηρεσίας μεταδεδομένων)

  • Κατάχρηση του τοκέν που χρησιμοποιείται από τη ροή εργασίας για να κλέψει τον κώδικα του αποθετηρίου όπου εκτελείται η Action ή ακόμα και να τον τροποποιήσει.

Προστασίες Κλαδιών

Οι προστασίες κλαδιών έχουν σχεδιαστεί έτσι ώστε να μην δίνουν πλήρη έλεγχο του αποθετηρίου στους χρήστες. Ο στόχος είναι να τεθούν αρκετές μεθόδοι προστασίας πριν από τη δυνατότητα εγγραφής κώδικα σε ορισμένο κλαδί.

Οι προστασίες κλαδιών ενός αποθετηρίου μπορούν να βρεθούν στο https://github.com/<orgname>/<reponame>/settings/branches

Δεν είναι δυνατή η ορισμός προστασίας κλαδιού σε επίπεδο οργανισμού. Έτσι, όλες οι προστασίες πρέπει να δηλωθούν σε κάθε αποθετήριο.

Διάφορες προστασίες μπορούν να εφαρμοστούν σε ένα κλαδί (όπως στο master):

  • Μπορείτε να απαιτήσετε ένα PR πριν από τη συγχώνευση (ώστε να μην μπορείτε να συγχωνεύσετε κώδικα απευθείας στο κλαδί). Εάν επιλεγεί αυτό, μπορούν να εφαρμοστούν διάφορες άλλες προσ

Last updated