Github Security
{{#include ../../banners/hacktricks-training.md}}
Τι είναι το Github
(Από εδώ) Σε υψηλό επίπεδο, το GitHub είναι μια ιστοσελίδα και μια υπηρεσία βασισμένη στο cloud που βοηθά τους προγραμματιστές να αποθηκεύουν και να διαχειρίζονται τον κώδικά τους, καθώς και να παρακολουθούν και να ελέγχουν τις αλλαγές στον κώδικά τους.
Βασικές Πληροφορίες
{{#ref}} basic-github-information.md {{#endref}}
Εξωτερική Αναγνώριση
Οι αποθήκες του Github μπορούν να ρυθμιστούν ως δημόσιες, ιδιωτικές και εσωτερικές.
- Ιδιωτική σημαίνει ότι μόνο οι άνθρωποι της οργάνωσης θα μπορούν να έχουν πρόσβαση σε αυτές
- Εσωτερική σημαίνει ότι μόνο οι άνθρωποι της επιχείρησης (μια επιχείρηση μπορεί να έχει πολλές οργανώσεις) θα μπορούν να έχουν πρόσβαση σε αυτή
- Δημόσια σημαίνει ότι όλο το διαδίκτυο θα μπορεί να έχει πρόσβαση σε αυτή.
Σε περίπτωση που γνωρίζετε τον χρήστη, την αποθήκη ή την οργάνωση που θέλετε να στοχεύσετε, μπορείτε να χρησιμοποιήσετε github dorks για να βρείτε ευαίσθητες πληροφορίες ή να αναζητήσετε ευαίσθητες διαρροές πληροφοριών σε κάθε αποθήκη.
Github Dorks
Το Github επιτρέπει να αναζητάτε κάτι καθορίζοντας ως πεδίο έναν χρήστη, μια αποθήκη ή μια οργάνωση. Επομένως, με μια λίστα από συμβολοσειρές που θα εμφανίζονται κοντά σε ευαίσθητες πληροφορίες μπορείτε εύκολα να αναζητήσετε πιθανές ευαίσθητες πληροφορίες στον στόχο σας.
Εργαλεία (κάθε εργαλείο περιέχει τη λίστα του με dorks):
- https://github.com/obheda12/GitDorker (Λίστα Dorks)
- https://github.com/techgaun/github-dorks (Λίστα Dorks)
- https://github.com/hisxo/gitGraber (Λίστα Dorks)
Github Leaks
Παρακαλώ σημειώστε ότι οι github dorks προορίζονται επίσης για αναζήτηση διαρροών χρησιμοποιώντας τις επιλογές αναζήτησης του github. Αυτή η ενότητα είναι αφιερωμένη σε αυτά τα εργαλεία που θα κατεβάσουν κάθε αποθήκη και θα αναζητήσουν ευαίσθητες πληροφορίες σε αυτές (ακόμη και ελέγχοντας ορισμένο βάθος commits).
Εργαλεία (κάθε εργαλείο περιέχει τη λίστα του με regex):
- https://github.com/zricethezav/gitleaks
- https://github.com/trufflesecurity/truffleHog
- https://github.com/eth0izzle/shhgit
- https://github.com/michenriksen/gitrob
- https://github.com/anshumanbh/git-all-secrets
- https://github.com/kootenpv/gittyleaks
- https://github.com/awslabs/git-secrets
Warning
Όταν αναζητάτε διαρροές σε μια αποθήκη και εκτελείτε κάτι όπως
git log -pμην ξεχάσετε ότι μπορεί να υπάρχουν άλλες branches με άλλα commits που περιέχουν μυστικά!
Εξωτερικά Forks
Είναι δυνατόν να συμβιβαστούν αποθήκες εκμεταλλευόμενοι pull requests. Για να γνωρίζετε αν μια αποθήκη είναι ευάλωτη, πρέπει κυρίως να διαβάσετε τις ρυθμίσεις yaml των Github Actions. Περισσότερες πληροφορίες παρακάτω.
Github Leaks σε διαγραμμένα/εσωτερικά forks
Ακόμη και αν είναι διαγραμμένα ή εσωτερικά, μπορεί να είναι δυνατό να αποκτήσετε ευαίσθητα δεδομένα από forks αποθηκών του github. Ελέγξτε το εδώ:
{{#ref}} accessible-deleted-data-in-github.md {{#endref}}
Σκληροποίηση Οργάνωσης
Προ privileges Μελών
Υπάρχουν ορισμένα προεπιλεγμένα προνόμια που μπορούν να ανατεθούν σε μέλη της οργάνωσης. Αυτά μπορούν να ελεγχθούν από τη σελίδα https://github.com/organizations/<org_name>/settings/member_privileges ή από το Organizations API.
- Βασικές άδειες: Τα μέλη θα έχουν την άδεια Καμία/Ανάγνωση/Γράψιμο/Διαχείριση πάνω στις αποθήκες της οργάνωσης. Συνιστάται να είναι Καμία ή Ανάγνωση.
- Forking αποθήκης: Αν δεν είναι απαραίτητο, είναι καλύτερα να μην επιτρέπεται στα μέλη να fork-άρουν τις αποθήκες της οργάνωσης.
- Δημιουργία σελίδων: Αν δεν είναι απαραίτητο, είναι καλύτερα να μην επιτρέπεται στα μέλη να δημοσιεύουν σελίδες από τις αποθήκες της οργάνωσης. Αν είναι απαραίτητο, μπορείτε να επιτρέψετε τη δημιουργία δημόσιων ή ιδιωτικών σελίδων.
- Αιτήματα πρόσβασης για ενσωμάτωσεις: Με αυτό ενεργοποιημένο, οι εξωτερικοί συνεργάτες θα μπορούν να ζητούν πρόσβαση για εφαρμογές GitHub ή OAuth να έχουν πρόσβαση σε αυτή την οργάνωση και τους πόρους της. Συνήθως είναι απαραίτητο, αλλά αν όχι, είναι καλύτερα να το απενεργοποιήσετε.
- Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
- Αλλαγή ορατότητας αποθήκης: Αν είναι ενεργοποιημένο, τα μέλη με δικαιώματα διαχείρισης για την αποθήκη θα μπορούν να αλλάξουν την ορατότητά της. Αν είναι απενεργοποιημένο, μόνο οι ιδιοκτήτες της οργάνωσης μπορούν να αλλάξουν τις ορατότητες των αποθηκών. Αν δεν θέλετε οι άνθρωποι να κάνουν πράγματα δημόσια, βεβαιωθείτε ότι αυτό είναι απενεργοποιημένο.
- Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
- Διαγραφή και μεταφορά αποθήκης: Αν είναι ενεργοποιημένο, τα μέλη με δικαιώματα διαχείρισης για την αποθήκη θα μπορούν να διαγράψουν ή να μεταφέρουν δημόσιες και ιδιωτικές αποθήκες.
- Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
- Επιτρέψτε στα μέλη να δημιουργούν ομάδες: Αν είναι ενεργοποιημένο, οποιοδήποτε μέλος της οργάνωσης θα μπορεί να δημιουργήσει νέες ομάδες. Αν είναι απενεργοποιημένο, μόνο οι ιδιοκτήτες της οργάνωσης μπορούν να δημιουργήσουν νέες ομάδες. Είναι καλύτερα να είναι αυτό απενεργοποιημένο.
- Δεν μπόρεσα να βρω αυτές τις πληροφορίες στην απάντηση των APIs, μοιραστείτε αν το κάνετε
- Περισσότερα πράγματα μπορούν να ρυθμιστούν σε αυτή τη σελίδα αλλά τα προηγούμενα είναι τα πιο σχετιζόμενα με την ασφάλεια.
Ρυθμίσεις Δράσεων
Διάφορες ρυθμίσεις σχετικές με την ασφάλεια μπορούν να ρυθμιστούν για τις δράσεις από τη σελίδα https://github.com/organizations/<org_name>/settings/actions.
Note
Σημειώστε ότι όλες αυτές οι ρυθμίσεις μπορούν επίσης να ρυθμιστούν σε κάθε αποθήκη ανεξάρτητα
- Πολιτικές δράσεων Github: Σας επιτρέπει να υποδείξετε ποιες αποθήκες μπορούν να εκτελούν workflows και ποιες workflows θα πρέπει να επιτρέπονται. Συνιστάται να καθορίσετε ποιες αποθήκες θα πρέπει να επιτρέπονται και να μην επιτρέπετε σε όλες τις δράσεις να εκτελούνται.
- API-1, API-2
- Fork pull request workflows από εξωτερικούς συνεργάτες: Συνιστάται να απαιτείται έγκριση για όλους τους εξωτερικούς συνεργάτες.
- Δεν μπόρεσα να βρω ένα API με αυτές τις πληροφορίες, μοιραστείτε αν το κάνετε
- Εκτέλεση workflows από fork pull requests: Είναι πολύ ανεπιθύμητο να εκτελούνται workflows από pull requests καθώς οι διαχειριστές της προέλευσης fork θα αποκτούν τη δυνατότητα να χρησιμοποιούν tokens με δικαιώματα ανάγνωσης στην αποθήκη προέλευσης.
- Δεν μπόρεσα να βρω ένα API με αυτές τις πληροφορίες, μοιραστείτε αν το κάνετε
- Δικαιώματα workflows: Συνιστάται να δίνονται μόνο δικαιώματα ανάγνωσης αποθήκης. Είναι ανεπιθύμητο να δίνονται δικαιώματα γραφής και δημιουργίας/έγκρισης pull requests για να αποφευχθεί η κακή χρήση του GITHUB_TOKEN που δίνεται για την εκτέλεση workflows.
- API
Ενσωματώσεις
Ενημερώστε με αν γνωρίζετε το API endpoint για να αποκτήσετε αυτές τις πληροφορίες!
- Πολιτική πρόσβασης εφαρμογών τρίτων: Συνιστάται να περιορίζετε την πρόσβαση σε κάθε εφαρμογή και να επιτρέπετε μόνο τις απαραίτητες (μετά από ανασκόπηση τους).
- Εγκατεστημένες εφαρμογές GitHub: Συνιστάται να επιτρέπονται μόνο οι απαραίτητες (μετά από ανασκόπηση τους).
Αναγνώριση & Επιθέσεις εκμεταλλευόμενοι διαπιστευτήρια
Για αυτό το σενάριο θα υποθέσουμε ότι έχετε αποκτήσει κάποια πρόσβαση σε έναν λογαριασμό github.
Με Διαπιστευτήρια Χρήστη
Αν έχετε κάπως ήδη διαπιστευτήρια για έναν χρήστη μέσα σε μια οργάνωση μπορείτε απλά να συνδεθείτε και να ελέγξετε ποιους ρόλους επιχείρησης και οργάνωσης έχετε, αν είστε απλός μέλος, ελέγξτε ποια δικαιώματα έχουν τα απλά μέλη, σε ποιες ομάδες είστε, ποια δικαιώματα έχετε πάνω σε ποιες αποθήκες, και πώς είναι προστατευμένες οι αποθήκες.
Σημειώστε ότι η 2FA μπορεί να χρησιμοποιείται οπότε θα μπορείτε να έχετε πρόσβαση σε αυτές τις πληροφορίες μόνο αν μπορείτε επίσης να περάσετε αυτόν τον έλεγχο.
Note
Σημειώστε ότι αν καταφέρετε να κλέψετε το cookie
user_session(προς το παρόν ρυθμισμένο με SameSite: Lax) μπορείτε να παριστάνετε πλήρως τον χρήστη χωρίς να χρειάζεστε διαπιστευτήρια ή 2FA.
Ελέγξτε την παρακάτω ενότητα σχετικά με παρακάμψεις προστασίας branch σε περίπτωση που είναι χρήσιμη.
Με Κλειδί 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
Με Token Χρήστη
Για μια εισαγωγή σχετικά με Tokens Χρήστη ελέγξτε τις βασικές πληροφορίες.
Ένα token χρήστη μπορεί να χρησιμοποιηθεί αντί για έναν κωδικό πρόσβασης για το Git μέσω HTTPS, ή μπορεί να χρησιμοποιηθεί για αυθεντικοποίηση στην API μέσω Βασικής Αυθεντικοποίησης. Ανάλογα με τα δικαιώματα που συνδέονται με αυτό, μπορεί να είστε σε θέση να εκτελέσετε διάφορες ενέργειες.
Ένα token χρήστη φαίνεται έτσι: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
Με Εφαρμογή Oauth
Για μια εισαγωγή σχετικά με Εφαρμογές Oauth του Github ελέγξτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη Εφαρμογή Oauth για να αποκτήσει πρόσβαση σε προνομιακά δεδομένα/ενέργειες των χρηστών που τις αποδέχονται πιθανώς ως μέρος μιας εκστρατείας phishing.
Αυτές είναι οι σκοποί που μπορεί να ζητήσει μια εφαρμογή Oauth. Ένας χρήστης θα πρέπει πάντα να ελέγχει τους σκοπούς που ζητούνται πριν τους αποδεχτεί.
Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να δώσουν/αρνηθούν πρόσβαση σε εφαρμογές τρίτων σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.
Με Εφαρμογή Github
Για μια εισαγωγή σχετικά με Εφαρμογές Github ελέγξτε τις βασικές πληροφορίες.
Ένας επιτιθέμενος μπορεί να δημιουργήσει μια κακόβουλη Εφαρμογή Github για να αποκτήσει πρόσβαση σε προνομιακά δεδομένα/ενέργειες των χρηστών που τις αποδέχονται πιθανώς ως μέρος μιας εκστρατείας phishing.
Επιπλέον, όπως εξηγείται στις βασικές πληροφορίες, οι οργανισμοί μπορούν να δώσουν/αρνηθούν πρόσβαση σε εφαρμογές τρίτων σε πληροφορίες/αποθετήρια/ενέργειες που σχετίζονται με τον οργανισμό.
Συμβιβασμός & Κατάχρηση Github Action
Υπάρχουν αρκετές τεχνικές για να συμβιβάσετε και να καταχραστείτε μια Github Action, ελέγξτε τις εδώ:
{{#ref}} abusing-github-actions/ {{#endref}}
Παράκαμψη Προστασίας Κλάδου
- Απαιτείται αριθμός εγκρίσεων: Αν έχετε συμβιβάσει αρκετούς λογαριασμούς, μπορείτε απλά να αποδεχτείτε τα 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 θα ενεργοποιηθεί.
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
Σημειώστε ότι μετά τη δημιουργία του κλάδου, η προστασία του κλάδου θα ισχύει για τον νέο κλάδο και δεν θα μπορείτε να τον τροποποιήσετε, αλλά μέχρι τότε θα έχετε ήδη εξάγει τα μυστικά.
Επιμονή
- Δημιουργία token χρήστη
- Κλοπή github tokens από μυστικά
- Διαγραφή των αποτελεσμάτων ροής εργασίας και κλάδων
- Δώστε περισσότερες άδειες σε όλη την οργάνωση
- Δημιουργία webhooks για εξαγωγή πληροφοριών
- Πρόσκληση εξωτερικών συνεργατών
- Αφαίρεση webhooks που χρησιμοποιούνται από το SIEM
- Δημιουργία/τροποποίηση Github Action με πίσω πόρτα
- Βρείτε ευάλωτο Github Action για εκτέλεση εντολών μέσω τροποποίησης της τιμής του μυστικού
Ψεύτικες Δεσμεύσεις - Πίσω πόρτα μέσω δεσμεύσεων αποθετηρίου
Στο Github είναι δυνατό να δημιουργήσετε ένα PR σε ένα αποθετήριο από ένα fork. Ακόμα και αν το PR δεν γίνει αποδεκτό, μια δέσμευση id μέσα στο αρχικό αποθετήριο θα δημιουργηθεί για την έκδοση fork του κώδικα. Επομένως, ένας επιτιθέμενος θα μπορούσε να επιμείνει να χρησιμοποιήσει μια συγκεκριμένη δέσμευση από ένα φαινομενικά νόμιμο αποθετήριο που δεν δημιουργήθηκε από τον ιδιοκτήτη του αποθετηρίου.
Όπως αυτό:
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
{{#include ../../banners/hacktricks-training.md}}