Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-01-18 12:02:38 +00:00
parent 0d3795d78d
commit b763dd655a
@@ -12,9 +12,9 @@
### Microsoft.Web/staticSites/snippets/write
Είναι δυνατή η φόρτωση αυθαίρετου HTML κώδικα σε μια στατική σελίδα δημιουργώντας ένα snippet. Αυτό μπορεί να επιτρέψει σε έναν attacker να εισάγει JS κώδικα μέσα στην web app και να κλέψει ευαίσθητες πληροφορίες όπως credentials ή mnemonic keys (σε web3 wallets).
Είναι δυνατό να κάνετε μια static web page να φορτώνει αυθαίρετο HTML code δημιουργώντας ένα snippet. Αυτό μπορεί να επιτρέψει σε έναν attacker να εισάγει JS code μέσα στην web app και να κλέψει ευαίσθητες πληροφορίες όπως credentials ή mnemonic keys (σε web3 wallets).
Η παρακάτω εντολή δημιουργεί ένα snippet που θα φορτώνεται πάντα από την web app::
Η παρακάτω command δημιουργεί ένα snippet που θα φορτώνεται πάντα από την web app::
```bash
az rest \
--method PUT \
@@ -31,15 +31,15 @@ az rest \
}
}'
```
### Ανάγνωση ρυθμισμένων διαπιστευτηρίων τρίτων
### Ανάγνωση Ρυθμισμένων credentials τρίτων
Όπως εξηγήθηκε στην ενότητα App Service:
Όπως εξηγείται στην ενότητα App Service:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Εκτελώντας την παρακάτω εντολή είναι δυνατό να **διαβάσετε τα διαπιστευτήρια τρίτων** που έχουν ρυθμιστεί στον τρέχοντα λογαριασμό. Σημειώστε ότι, για παράδειγμα, αν κάποια Github διαπιστευτήρια έχουν ρυθμιστεί σε διαφορετικό χρήστη, δεν θα μπορείτε να αποκτήσετε πρόσβαση στο token από διαφορετικό χρήστη.
Εκτελώντας την παρακάτω εντολή είναι δυνατό να **διαβάσετε τα credentials τρίτων** που έχουν ρυθμιστεί στον τρέχοντα λογαριασμό. Σημειώστε ότι, για παράδειγμα, εάν κάποια Github credentials έχουν ρυθμιστεί σε διαφορετικό χρήστη, δεν θα μπορείτε να αποκτήσετε πρόσβαση στο token από έναν άλλο χρήστη.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
@@ -69,14 +69,14 @@ curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Επανεγγραφή αρχείου - Επανεγγραφή routes, HTML, JS...
### Αντικατάσταση αρχείου - Αντικατάσταση routes, HTML, JS...
Είναι δυνατόν να **επανεγγραφή αρχείου μέσα στο Github repo** που περιέχει την εφαρμογή μέσω του Azure, έχοντας το **Github token**, στέλνοντας ένα αίτημα όπως το ακόλουθο που θα υποδεικνύει τη διαδρομή του αρχείου για επανεγγραφή, το περιεχόμενο του αρχείου και το commit message.
Είναι δυνατόν να **αντικαταστήσετε ένα αρχείο μέσα στο Github repo** που περιέχει την εφαρμογή μέσω του Azure έχοντας το **Github token** στέλνοντας ένα αίτημα όπως το ακόλουθο που θα υποδεικνύει τη διαδρομή του αρχείου που θα αντικατασταθεί, το περιεχόμενο του αρχείου και το μήνυμα commit.
Αυτό μπορεί να καταχραστεί από επιτιθέμενους για να **αλλάξουν το περιεχόμενο της web app** ώστε να σερβίρουν κακόβουλο περιεχόμενο (υποκλοπή διαπιστευτηρίων, mnemonic keys...) ή απλώς να **αναδρομολογήσουν ορισμένες διαδρομές** στους δικούς τους servers αντικαθιστώντας το `staticwebapp.config.json` αρχείο.
This can be abused by attackers to basically **change the content of the web app** to serve malicious content (steal credentials, mnemonic keys...) or just to **re-route certain paths** to their own servers by overwriting the `staticwebapp.config.json` file.
> [!WARNING]
> Σημειώστε ότι αν ένας επιτιθέμενος καταφέρει να παραβιάσει το Github repo με οποιονδήποτε τρόπο, μπορεί επίσης να επανεγγράψει το αρχείο απευθείας από το Github.
> Σημειώστε ότι εάν ένας επιτιθέμενος καταφέρει να παραβιάσει το Github repo με οποιονδήποτε τρόπο, μπορεί επίσης να αντικαταστήσει το αρχείο απευθείας από το Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
@@ -97,9 +97,9 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
```
### Microsoft.Web/staticSites/config/write
### Microsoft.Web/staticSites/config/write
Με αυτήν την άδεια, είναι δυνατόν να **τροποποιήσετε τον κωδικό πρόσβασης** που προστατεύει μια static web app ή ακόμη και να αφαιρέσετε την προστασία από κάθε περιβάλλον στέλνοντας ένα αίτημα όπως το ακόλουθο:
Με αυτήν την άδεια, είναι δυνατό να **τροποποιήσετε τον κωδικό πρόσβασης** που προστατεύει μια static web app ή ακόμη και να αφαιρέσετε την προστασία από κάθε περιβάλλον στέλνοντας ένα αίτημα όπως το ακόλουθο:
```bash
# Change password
az rest --method put \
@@ -133,38 +133,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Αυτή η άδεια επιτρέπει την απόκτηση του **token ανάπτυξης κλειδιού API** για τη στατική εφαρμογή.
Αυτό το δικαίωμα επιτρέπει τη λήψη του **API key deployment token** για την static app.
Χρησιμοποιώντας az rest:
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
```
Χρησιμοποιώντας AzCLI:
Χρήση AzCLI:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Τότε, για να **ενημερώσετε μια εφαρμογή χρησιμοποιώντας το token** μπορείτε να εκτελέσετε την παρακάτω εντολή. Σημειώστε ότι αυτή η εντολή εξήχθη εξετάζοντας **πώς λειτουργεί το Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, καθώς είναι αυτό που η Azure έχει ορίσει ως προεπιλογή για χρήση. Έτσι, η εικόνα και οι παράμετροι μπορεί να αλλάξουν στο μέλλον.
Then, in order to **ενημερώσετε μια app χρησιμοποιώντας το token** you could run the following command. Note that this command was extracted checking **how to Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) works**, as it's the one Azure set by default to use. So the image and παράμετροι could change in the future.
> [!TIP]
> Για να αναπτύξετε την εφαρμογή μπορείτε να χρησιμοποιήσετε το **`swa`** tool από [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) ή να ακολουθήσετε τα παρακάτω βήματα:
> Για να κάνετε deploy την εφαρμογή μπορείτε να χρησιμοποιήσετε το εργαλείο **`swa`** από [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) ή να ακολουθήσετε τα παρακάτω απλά βήματα:
1. Κατεβάστε το αποθετήριο [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ή οποιοδήποτε άλλο repo θέλετε να αναπτύξετε) και τρέξτε `cd react-basic`.
2. Αλλάξτε τον κώδικα που θέλετε να αναπτύξετε
3. Αναπτύξτε το εκτελώντας (Θυμηθείτε να αλλάξετε το `<api-token>`):
1. Κατεβάστε το repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (or any other repo you want to deploy) and run `cd react-basic`.
2. Αλλάξτε τον κώδικα που θέλετε να deploy
3. Κάντε deploy τρέχοντας (Remember to change the `<api-token>`):
```bash
docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
```
> [!WARNING]
> Ακόμα και αν έχετε το token δεν θα μπορείτε να κάνετε deploy την εφαρμογή εάν η **Πολιτική Εξουσιοδότησης Ανάπτυξης** έχει οριστεί σε **Github**. Για να χρησιμοποιήσετε το token θα χρειαστείτε την άδεια `Microsoft.Web/staticSites/write` για να αλλάξετε τη μέθοδο ανάπτυξης ώστε να χρησιμοποιεί το APi token.
> Ακόμα και αν έχετε το token δεν θα μπορείτε να κάνετε deploy την εφαρμογή αν η **Deployment Authorization Policy** είναι ορισμένη σε **Github**. Για να χρησιμοποιήσετε το token θα χρειαστείτε την άδεια `Microsoft.Web/staticSites/write` για να αλλάξετε τη μέθοδο ανάπτυξης ώστε να χρησιμοποιεί το APi token.
### Microsoft.Web/staticSites/write
Με αυτήν την άδεια είναι δυνατό να **αλλάξετε την πηγή του static web app σε διαφορετικό Github repository**, ωστόσο δεν θα γίνει αυτόματα provisioning καθώς αυτό πρέπει να γίνει από ένα Github Action.
Με αυτή την άδεια είναι δυνατό να **αλλάξετε την πηγή του static web app σε διαφορετικό Github repository**, ωστόσο δεν θα γίνει αυτόματα provisioning καθώς αυτό πρέπει να γίνει από ένα Github Action.
Ωστόσο, εάν η **Πολιτική Εξουσιοδότησης Ανάπτυξης** έχει οριστεί σε **Github**, είναι δυνατό να **ενημερώσετε την εφαρμογή από το νέο source repository!**.
Ωστόσο, αν η **Deployment Authorization Policy** είναι ορισμένη σε **Github**, είναι δυνατό να **ενημερώσετε την εφαρμογή από το νέο source repository!**.
Σε περίπτωση που η **Πολιτική Εξουσιοδότησης Ανάπτυξης** δεν είναι ορισμένη σε Github, μπορείτε να την αλλάξετε με την ίδια άδεια `Microsoft.Web/staticSites/write`.
Σε περίπτωση που η **Deployment Authorization Policy** δεν είναι ορισμένη σε Github, μπορείτε να την αλλάξετε με την ίδια άδεια `Microsoft.Web/staticSites/write`.
```bash
# Change the source to a different Github repository
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
@@ -250,14 +250,14 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Με αυτήν την άδεια είναι δυνατόν να **επαναφέρετε το API key της static web app**, πιθανώς προκαλώντας DoSing στις ροές εργασίας που αναπτύσσουν αυτόματα την εφαρμογή.
Με αυτήν την άδεια είναι δυνατό να **reset the API key of the static web app**, ενδεχομένως προκαλώντας DoSing στα workflows που αναπτύσσουν αυτόματα την εφαρμογή.
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
```
### Microsoft.Web/staticSites/createUserInvitation/action
Αυτή η άδεια επιτρέπει να **δημιουργηθεί πρόσκληση προς έναν χρήστη** για πρόσβαση σε προστατευμένες διαδρομές μέσα σε μια static web app με συγκεκριμένο ρόλο.
Αυτή η άδεια επιτρέπει τη **δημιουργία πρόσκλησης προς έναν χρήστη** για πρόσβαση σε προστατευμένες διαδρομές μέσα σε ένα static web app με συγκεκριμένο ρόλο.
Το login βρίσκεται σε μια διαδρομή όπως `/.auth/login/github` για github ή `/.auth/login/aad` για Entra ID και ένας χρήστης μπορεί να προσκληθεί με την ακόλουθη εντολή:
```bash
@@ -272,12 +272,12 @@ az staticwebapp users invite \
```
### Pull Requests
Εξ ορισμού, Pull Requests από ένα branch στο ίδιο repo θα μεταγλωττίζονται και θα δημιουργούνται αυτόματα σε ένα staging περιβάλλον. Αυτό μπορεί να εκμεταλλευτεί ένας επιτιθέμενος με δικαίωμα εγγραφής στο repo αλλά χωρίς την ικανότητα να παρακάμψει τα branch protections του production branch (συνήθως `main`) για να **αναπτύξει μια κακόβουλη έκδοση της εφαρμογής** στο staging URL.
Προεπιλεγμένα, τα Pull Requests από ένα branch στο ίδιο repo θα μεταγλωττιστούν και θα γίνει build αυτόματα σε ένα περιβάλλον staging. Αυτό θα μπορούσε να καταχραστεί ένας επιτιθέμενος με δικαίωμα εγγραφής στο repo αλλά χωρίς δυνατότητα να παρακάμψει τους περιορισμούς του production branch (συνήθως `main`) για να **αναπτύξει μια κακόβουλη έκδοση της εφαρμογής** στο staging URL.
The staging URL has this format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` like: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
Το staging URL έχει τη μορφή: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` όπως: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
> [!TIP]
> Σημειώστε ότι εξ ορισμού εξωτερικά PRs δεν θα εκτελέσουν workflows εκτός αν έχουν συγχωνεύσει τουλάχιστον 1 PR στο repository. Ένας επιτιθέμενος θα μπορούσε να στείλει ένα έγκυρο PR στο repo και **στη συνέχεια να στείλει ένα κακόβουλο PR** στο repo για να αναπτύξει την κακόβουλη εφαρμογή στο staging περιβάλλον. Ωστόσο, υπάρχει μια απροσδόκητη προστασία: το προεπιλεγμένο Github Action για ανάπτυξη στο static web app χρειάζεται πρόσβαση στο secret που περιέχει το deployment token (π.χ. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) ακόμη και αν η ανάπτυξη γίνεται με το IDToken. Αυτό σημαίνει ότι επειδή ένα εξωτερικό PR δεν θα έχει πρόσβαση σε αυτό το secret και ένα εξωτερικό PR δεν μπορεί να αλλάξει το Workflow για να τοποθετήσει εδώ ένα αυθαίρετο token χωρίς να γίνει δεκτό ένα PR, **αυτή η επίθεση στην πραγματικότητα δεν θα λειτουργήσει**.
> Σημειώστε ότι, από προεπιλογή, τα external PRs δεν θα τρέξουν workflows εκτός αν έχει συγχωνευτεί τουλάχιστον 1 PR στο repository. Ένας επιτιθέμενος θα μπορούσε να στείλει ένα έγκυρο PR στο repo και **μετά να στείλει ένα κακόβουλο PR** στο repo για να αναπτύξει την κακόβουλη εφαρμογή στο staging περιβάλλον. Ωστόσο, υπάρχει μια απρόσμενη προστασία: το προεπιλεγμένο Github Action για το deploy στην static web app χρειάζεται πρόσβαση στο secret που περιέχει το deployment token (π.χ. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) ακόμη και αν το deployment γίνεται με το IDToken. Αυτό σημαίνει ότι επειδή ένα external PR δεν θα έχει πρόσβαση σε αυτό το secret και ένα external PR δεν μπορεί να αλλάξει το Workflow για να τοποθετήσει εδώ ένα αυθαίρετο token χωρίς να γίνει αποδεκτό ένα PR, **αυτή η επίθεση στην ουσία δεν θα λειτουργήσει**.
{{#include ../../../banners/hacktricks-training.md}}