CircleCI 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)
CircleCI είναι μια πλατφόρμα Συνεχούς Ενσωμάτωσης όπου μπορείτε να ορίσετε πρότυπα που υποδεικνύουν τι θέλετε να κάνει με κάποιον κώδικα και πότε να το κάνει. Με αυτόν τον τρόπο μπορείτε να αυτοματοποιήσετε τις δοκιμές ή τις αναπτύξεις απευθείας από το κύριο branch του repo σας για παράδειγμα.
CircleCI κληρονομεί τις άδειες από το github και το bitbucket που σχετίζονται με τον λογαριασμό που συνδέεται. Στις δοκιμές μου διαπίστωσα ότι όσο έχετε δικαιώματα εγγραφής πάνω στο repo στο github, θα μπορείτε να διαχειριστείτε τις ρυθμίσεις του έργου σας στο CircleCI (να ορίσετε νέα ssh keys, να αποκτήσετε κλειδιά api έργου, να δημιουργήσετε νέα branches με νέες ρυθμίσεις CircleCI...).
Ωστόσο, πρέπει να είστε διαχειριστής του repo για να μετατρέψετε το repo σε έργο CircleCI.
Σύμφωνα με τα έγγραφα υπάρχουν διάφοροι τρόποι για να φορτώσετε τιμές σε μεταβλητές περιβάλλοντος μέσα σε μια ροή εργασίας.
Κάθε κοντέινερ που εκτελείται από το CircleCI θα έχει πάντα συγκεκριμένες env vars που ορίζονται στην τεκμηρίωση όπως CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
ή CIRCLE_USERNAME
.
Μπορείτε να τις δηλώσετε σε καθαρό κείμενο μέσα σε μια εντολή:
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο run environment:
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο build-job environment:
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον ενός κοντέινερ:
Αυτά είναι μυστικά που θα είναι προσβάσιμα μόνο από το έργο (από οποιοδήποτε κλάδο). Μπορείτε να τα δείτε δηλωμένα στο https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
Η λειτουργία "Import Variables" επιτρέπει την εισαγωγή μεταβλητών από άλλα έργα σε αυτό.
Αυτά είναι μυστικά που είναι σε επίπεδο οργανισμού. Από προεπιλογή, οποιοδήποτε repo θα μπορεί να προσπελάσει οποιοδήποτε μυστικό αποθηκεύεται εδώ:
Ωστόσο, σημειώστε ότι μια διαφορετική ομάδα (αντί για Όλα τα μέλη) μπορεί να επιλεγεί για να δώσει πρόσβαση στα μυστικά μόνο σε συγκεκριμένα άτομα. Αυτό είναι αυτή τη στιγμή ένας από τους καλύτερους τρόπους για να αυξήσετε την ασφάλεια των μυστικών, ώστε να μην επιτρέπεται σε όλους να τα προσπελάσουν αλλά μόνο σε ορισμένα άτομα.
Αν έχετε πρόσβαση στο VCS (όπως το github) ελέγξτε το αρχείο .circleci/config.yml
κάθε repo σε κάθε κλάδο και αναζητήστε πιθανά μυστικά σε καθαρό κείμενο που είναι αποθηκευμένα εκεί.
Ελέγχοντας τον κώδικα μπορείτε να βρείτε όλα τα ονόματα των μυστικών που χρησιμοποιούνται σε κάθε αρχείο .circleci/config.yml
. Μπορείτε επίσης να αποκτήσετε τα ονόματα των συμφραζομένων από αυτά τα αρχεία ή να τα ελέγξετε στην διαδικτυακή κονσόλα: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Για να εξάγετε ΟΛΑ τα μυστικά του έργου και του συμφραζομένου απλά χρειάζεται να έχετε ΠΡΟΣΒΑΣΗ ΓΡΑΦΗΣ σε μόνο 1 repo σε ολόκληρο τον οργανισμό github (και ο λογαριασμός σας πρέπει να έχει πρόσβαση στα συμφραζόμενα αλλά από προεπιλογή όλοι μπορούν να έχουν πρόσβαση σε κάθε συμφραζόμενο).
Η λειτουργία "Import Variables" επιτρέπει την εισαγωγή μεταβλητών από άλλα έργα σε αυτό. Επομένως, ένας επιτιθέμενος θα μπορούσε να εισαγάγει όλες τις μεταβλητές του έργου από όλα τα repos και στη συνέχεια να εξάγει όλες μαζί.
Όλα τα μυστικά του έργου είναι πάντα ρυθμισμένα στο env των εργασιών, οπότε απλά καλώντας το env και αποκρύπτοντάς το σε base64 θα εξάγει τα μυστικά στην κονσόλα καταγραφής διαδικασιών:
Αν δεν έχετε πρόσβαση στην κονσόλα ιστού αλλά έχετε πρόσβαση στο repo και γνωρίζετε ότι χρησιμοποιείται το CircleCI, μπορείτε απλά να δημιουργήσετε μια ροή εργασίας που ενεργοποιείται κάθε λεπτό και που εξάγει τα μυστικά σε μια εξωτερική διεύθυνση:
Πρέπει να καθορίσετε το όνομα του πλαισίου (αυτό θα εξάγει επίσης τα μυστικά του έργου):
Αν δεν έχετε πρόσβαση στην κονσόλα ιστού αλλά έχετε πρόσβαση στο repo και γνωρίζετε ότι χρησιμοποιείται το CircleCI, μπορείτε απλά να τροποποιήσετε μια ροή εργασίας που ενεργοποιείται κάθε λεπτό και που εξάγει τα μυστικά σε μια εξωτερική διεύθυνση:
Απλά η δημιουργία ενός νέου .circleci/config.yml
σε ένα repo δεν είναι αρκετή για να ενεργοποιήσει μια κατασκευή circleci. Πρέπει να το ενεργοποιήσετε ως έργο στην κονσόλα circleci.
CircleCI σας δίνει την επιλογή να εκτελείτε τις κατασκευές σας στις μηχανές τους ή στις δικές σας. Από προεπιλογή, οι μηχανές τους βρίσκονται στο GCP, και αρχικά δεν θα μπορείτε να βρείτε τίποτα σχετικό. Ωστόσο, αν ένα θύμα εκτελεί τις εργασίες στις δικές του μηχανές (πιθανώς, σε ένα περιβάλλον cloud), μπορεί να βρείτε ένα endpoint μεταδεδομένων cloud με ενδιαφέροντες πληροφορίες πάνω του.
Σημειώστε ότι στα προηγούμενα παραδείγματα, όλα εκκινούνταν μέσα σε ένα κοντέινερ docker, αλλά μπορείτε επίσης να ζητήσετε να εκκινήσετε μια μηχανή VM (η οποία μπορεί να έχει διαφορετικές άδειες cloud):
Ή ακόμα και ένα docker container με πρόσβαση σε μια απομακρυσμένη υπηρεσία docker:
Είναι δυνατόν να δημιουργήσετε tokens χρηστών στο CircleCI για να έχετε πρόσβαση στα API endpoints με την πρόσβαση των χρηστών.
https://app.circleci.com/settings/user/tokens
Είναι δυνατόν να δημιουργήσετε tokens έργων για να έχετε πρόσβαση στο έργο με τις άδειες που δίνονται στο token.
https://app.circleci.com/settings/project/github/<org>/<repo>/api
Είναι δυνατόν να προσθέσετε SSH κλειδιά στα έργα.
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
Είναι δυνατόν να δημιουργήσετε μια cron job σε κρυφό branch σε ένα απροσδόκητο έργο που διαρρέει όλες τις μεταβλητές περιβάλλοντος καθημερινά.
Ή ακόμα και να δημιουργήσετε σε ένα branch / να τροποποιήσετε μια γνωστή εργασία που θα διαρρέει όλα τα context και τα μυστικά έργων καθημερινά.
Αν είστε ιδιοκτήτης του github μπορείτε να επιτρέψετε μη επαληθευμένα orbs και να ρυθμίσετε ένα σε μια εργασία ως backdoor.
Μπορείτε να βρείτε μια ευπάθεια εκτέλεσης εντολών σε κάποια εργασία και να εισάγετε εντολές μέσω ενός μυστικού τροποποιώντας την τιμή του.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)