Github Security

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

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

Τι είναι το Github

(Από εδώ) Σε υψηλό επίπεδο, το GitHub είναι ένας ιστότοπος και μια υπηρεσία βασισμένη στο cloud που βοηθά τους προγραμματιστές να αποθηκεύουν και να διαχειρίζονται τον κώδικά τους, καθώς και να παρακολουθούν και να ελέγχουν τις αλλαγές στον κώδικά τους.

Βασικές Πληροφορίες

Εξωτερική Ανακάλυψη

Οι αποθετήρια του Github μπορούν να ρυθμιστούν ως δημόσια, ιδιωτικά και εσωτερικά.

  • Ιδιωτικό σημαίνει ότι μόνο οι άνθρωποι του οργανισμού θα μπορούν να τα προσπελάσουν

  • Εσωτερικό σημαίνει ότι μόνο οι άνθρωποι της επιχείρησης (μια επιχείρηση μπορεί να έχει πολλούς οργανισμούς) θα μπορούν να το προσπελάσουν

  • Δημόσιο σημαίνει ότι όλο το διαδίκτυο θα μπορεί να το προσπελάσει.

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

Github Dorks

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

Εργαλεία (κάθε εργαλείο περιέχει τη λίστα των dorks του):

Διαρροές στο Github

Παρακαλώ, σημειώστε ότ

Ενσωματώσεις

Πείτε μου αν γνωρίζετε το API endpoint για να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες!

  • Πολιτική πρόσβασης τρίτων εφαρμογών: Συνιστάται να περιορίσετε την πρόσβαση σε κάθε εφαρμογή και να επιτρέψετε μόνο τις απαραίτητες (μετά από αξιολόγησή τους).

  • Εγκατεστημένες εφαρμογές GitHub: Συνιστάται να επιτρέπετε μόνο τις απαραίτητες (μετά από αξιολόγησή τους).

Αναγνώριση και επιθέσεις κατά των διαπιστευτηρίων

Για αυτό το σενάριο θα υποθέσουμε ότι έχετε αποκτήσει πρόσβαση σε ένα λογαριασμό github.

Με τα διαπιστευτήρια του χρήστη

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

Σημειώστε ότι μπορεί να χρησιμοποιείται 2FA, οπότε θα μπορείτε να έχετε πρόσβαση σε αυτές τις πληροφορίες μόνο εάν μπορείτε επίσης να περάσετε αυτόν τον έλεγχο.

Σημειώστε ότι εάν καταφέρετε να κλέψετε το user_session cookie (που είναι ρυθμισμένο αυτή τη στιγμή με SameSite: Lax), μπορείτε να προσωποποιήσετε πλήρως τον χρήστη χωρίς να χρειάζεστε διαπιστευτήρια ή 2FA.

Ελέγξτε την παρακάτω ενότητα για τις παρακάμψεις προστασίας κλαδιού αν είναι χρήσιμη.

Με το κλειδί SSH του χρήστη

Το Github επιτρέπει στους χρήστες να ορίζουν κλειδιά SSH που θα χρησιμοποιηθούν ως μέθοδος πιστοποίησης για την ανάπτυξη κώδικα εκ μέρους τους (δεν εφαρμόζεται 2FA).

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

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Εάν ο χρήστης έχει ρυθμίσει το όνομα χρήστη του ως το όνομα χρήστη του GitHub, μπορείτε να έχετε πρόσβαση στα δημόσια κλειδιά που έχει ορίσει στον λογαριασμό του στο https://github.com/<github_username>.keys, μπορείτε να ελέγξετε αυτό για να επιβεβαιώσετε ότι το ιδιωτικό κλειδί που βρήκατε μπορεί να χρησιμοποιηθεί.

Τα κλειδιά SSH μπορούν επίσης να οριστούν σε αποθετήρια ως κλειδιά αναπτύξεων. Οποιοσδήποτε έχει πρόσβαση σε αυτό το κλειδί θα μπορεί να εκκινήσει έργα από ένα αποθετήριο. Συνήθως, σε έναν διακομιστή με διάφορα κλειδιά αναπτύξεων, το τοπικό αρχείο ~/.ssh/config θα σας δώσει πληροφορίες σχετικά με το ποιο κλειδί σχετίζεται.

Κλειδιά GPG

Όπως εξηγείται εδώ, μερικές φορές είναι απαραίτητο να υπογράψετε τις δεσμεύσεις ή μπορεί να αποκαλυφθείτε.

Ελέγξτε τοπικά εάν ο τρέχων χρήστης έχει κάποιο κλειδί με:

gpg --list-secret-keys --keyid-format=long

Με το User Token

Για μια εισαγωγή σχετικά με τα User Tokens ελέγξτε τις βασικές πληροφορίες.

Ένα User token μπορεί να χρησιμοποιηθεί αντί για κωδικό πρόσβασης για το Git μέσω HTTPS, ή μπορεί να χρησιμοποιηθεί για πιστοποίηση στο API μέσω βασικής πιστοποίησης. Ανάλογα με τα προνόμια που του έχουν ανατεθεί, μπορείτε να εκτελέσετε διάφορες ενέργειες.

Ένα User token φαίνεται έτσι: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123

Με την εφαρμογή Oauth

Για μια εισαγωγή σχετικά με τις εφαρμογές Github Oauth ελέγξτε τις βασικές πληροφορίες.

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

Αυτά είναι τα scopes που μια εφαρμογή Oauth μπορεί να ζητήσει. Πρέπει πάντα να ελέγχετε τα ζητούμενα scopes πριν τα αποδεχτείτε.

Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να παρέχουν/απαγορεύουν πρόσβαση σε εφαρμογές τρίτων σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.

Με την εφαρμογή Github

Για μια εισαγωγή σχετικά με τις εφαρμογές Github ελέγξτε τις βασικές πληροφορίες.

Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη εφαρμογή Github για να έχει πρόσβαση σε προνομιούχα δεδομένα/ενέργειες των χρηστών που τους αποδέχονται πιθανότατα ως μέρος μιας επίθεσης phishing.

Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να παρέχουν/απαγορεύουν πρόσβαση σε εφαρμογές τρίτων σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.

Παραβίαση και κατάχρηση της Github Action

Υπάρχουν αρκετές τεχνικές για να παραβιάσετε και να καταχρηστείτε μια Github Action, ελέγξτε τις εδώ:

Παράκαμψη προστασίας κλαδιού

  • Απαιτήστε έναν αριθμό εγκρίσεων: Αν παραβιάσετε αρκετούς λογαριασμούς, μπορείτε απλά να αποδεχθείτε τα PRs σας από άλλους λογαριασμούς. Αν έχετε μόνο τον λογαριασμό από τον οποίο δημιουργήσατε το PR, δεν μπορείτε να αποδεχθείτε το δικό σας PR. Ωστόσο, αν έχετε πρόσβαση σε ένα περιβάλλον Github Action μέσα στο αποθετήριο, χρησιμοποιώντας το GITHUB_TOKEN μπορείτε να εγκρίνετε το δικό σας PR και να λάβετε 1 έγκριση με αυτόν τον τρόπο.

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

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

  • Απαιτήστε αξιολογήσεις από τους ιδιοκτήτες του κώδικα: Αν αυτό είναι ενεργοποιημένο και είστε ιδιοκτήτης του κώδικα, μπορείτε να κάνετε μια Github Action να δημιουργήσει το δικό σας PR και να το εγκρίνετε μόνοι σας.

  • Όταν ένα αρχείο CODEOWNER δεν έχει διαμορφωθεί σωστά, η Github δεν διαμαρτύρεται, αλλά δεν το χρησιμοποιεί. Επομένως, αν είναι διαμορφωμένο εσφαλμένα, η προστασία των ιδιοκτητών κώδικα δεν εφαρμόζεται.

  • Επιτρέψτε σε συγκεκριμένους χρήστες να παρακάμψουν τις απαιτήσεις των αιτημάτων ενσωμάτωσης (pull request): Αν είστε ένας από αυτούς τους χρήστες, μπορείτε να παρακάμψετε τις προστασίες των αιτημάτων ενσ

push: # Run it when a push is made to a branch
branches:
- current_branch_name #Use '**' to run when a push is made to any branch

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

Μόνιμη παρουσία

  • Δημιουργία διακριτικού χρήστη

  • Κλοπή διακριτικών github από μυστικά

  • Διαγραφή αποτελεσμάτων ροής εργασίας και κλαδιών

  • Παροχή περισσότερων δικαιωμάτων σε όλο τον οργανισμό

  • Δημιουργία webhooks για εξαγωγή πληροφοριών

  • Πρόσκληση εξωτερικών συνεργατών

  • Αφαίρεση webhooks που χρησιμοποιούνται από το SIEM

  • Δημιουργία/τροποποίηση Github Action με πίσω πόρτα

  • Εύρεση ευπαθούς Github Action για εντολή εισαγωγής μέσω τροποποίησης της τιμής του μυστικού

Παραπλανητικές δεσμεύσεις - Πίσω πόρτα μέσω δεσμεύσεων αποθετηρίου

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

Όπως εδώ:

name: example
on: [push]
jobs:
commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e
- shell: bash
run: |
echo 'hello world!'

Για περισσότερες πληροφορίες, ελέγξτε https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd

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

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

Last updated