Az Static Web Apps

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Static Web Apps Basic Information

Azure Static Web Apps είναι μια υπηρεσία cloud για φιλοξενία στατικών web apps με αυτόματη CI/CD από αποθετήρια όπως το GitHub. Προσφέρει παγκόσμια παράδοση περιεχομένου, serverless backends και ενσωματωμένο HTTPS, καθιστώντας την ασφαλή και κλιμακούμενη. Ωστόσο, ακόμη και αν η υπηρεσία ονομάζεται “στατική”, δεν σημαίνει ότι είναι εντελώς ασφαλής. Οι κίνδυνοι περιλαμβάνουν κακή διαμόρφωση CORS, ανεπαρκή αυθεντικοποίηση και παραποίηση περιεχομένου, που μπορεί να εκθέσουν τις εφαρμογές σε επιθέσεις όπως XSS και διαρροή δεδομένων αν δεν διαχειριστούν σωστά.

Deployment Authentication

Tip

Όταν δημιουργείται μια Static App, μπορείτε να επιλέξετε την πολιτική εξουσιοδότησης ανάπτυξης μεταξύ Deployment token και GitHub Actions workflow.

  • Deployment token: Ένα token δημιουργείται και χρησιμοποιείται για την αυθεντικοποίηση της διαδικασίας ανάπτυξης. Οποιοσδήποτε με αυτό το token είναι αρκετός για να αναπτύξει μια νέα έκδοση της εφαρμογής. Μια Github Action αναπτύσσεται αυτόματα στο repo με το token σε ένα μυστικό για να αναπτύξει μια νέα έκδοση της εφαρμογής κάθε φορά που το repo ενημερώνεται.
  • GitHub Actions workflow: Σε αυτή την περίπτωση, μια πολύ παρόμοια Github Action αναπτύσσεται επίσης στο repo και το token αποθηκεύεται επίσης σε ένα μυστικό. Ωστόσο, αυτή η Github Action έχει μια διαφορά, χρησιμοποιεί την actions/github-script@v6 action για να αποκτήσει το IDToken του αποθετηρίου και να το χρησιμοποιήσει για να αναπτύξει την εφαρμογή.
  • Ακόμη και αν και στις δύο περιπτώσεις χρησιμοποιείται η action Azure/static-web-apps-deploy@v1 με ένα token στην παράμετρο azure_static_web_apps_api_token, σε αυτή τη δεύτερη περίπτωση, ένα τυχαίο token με έγκυρη μορφή όπως 12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345 είναι απλώς αρκετό για να αναπτύξει την εφαρμογή καθώς η εξουσιοδότηση γίνεται με το IDToken στην παράμετρο github_id_token.

Web App Basic Authentication

Είναι δυνατόν να ρυθμίσετε έναν κωδικό πρόσβασης για να αποκτήσετε πρόσβαση στην Web App. Η διαδικτυακή κονσόλα επιτρέπει τη ρύθμιση του για να προστατεύει μόνο τα περιβάλλοντα staging ή και τα δύο, staging και παραγωγής.

Αυτή είναι η εμφάνιση μιας web app με προστασία κωδικού πρόσβασης τη στιγμή που γράφεται:

Είναι δυνατόν να δείτε αν χρησιμοποιείται κάποιος κωδικός πρόσβασης και ποια περιβάλλοντα είναι προστατευμένα με:

az rest --method GET \
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"

Ωστόσο, αυτό δεν θα εμφανίσει τον κωδικό πρόσβασης σε καθαρό κείμενο, μόνο κάτι σαν: "password": "**********************".

Διαδρομές και Ρόλοι

Οι διαδρομές καθορίζουν πώς διαχειρίζονται τα εισερχόμενα HTTP αιτήματα μέσα σε μια στατική εφαρμογή ιστού. Ρυθμισμένες στο staticwebapp.config.json αρχείο, ελέγχουν την ανακατεύθυνση URL, τις ανακατευθύνσεις, τους περιορισμούς πρόσβασης και την εξουσιοδότηση με βάση ρόλους, διασφαλίζοντας τη σωστή διαχείριση πόρων και ασφάλεια.

Ορισμένα παραδείγματα:

{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
},
{
"route": "/google",
"redirect": "https://google.com",
"statusCode": 307
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}

Σημειώστε πώς είναι δυνατόν να προστατεύσετε μια διαδρομή με έναν ρόλο, τότε, οι χρήστες θα χρειαστεί να αυθεντικοποιηθούν στην εφαρμογή και να τους παραχωρηθεί αυτός ο ρόλος για να αποκτήσουν πρόσβαση στη διαδρομή. Είναι επίσης δυνατό να δημιουργήσετε προσκλήσεις που παραχωρούν συγκεκριμένους ρόλους σε συγκεκριμένους χρήστες που συνδέονται μέσω EntraID, Facebook, GitHub, Google, Twitter, κάτι που μπορεί να είναι χρήσιμο για την κλιμάκωση προνομίων εντός της εφαρμογής.

Tip

Σημειώστε ότι είναι δυνατόν να ρυθμίσετε την εφαρμογή έτσι ώστε οι αλλαγές στο αρχείο staticwebapp.config.json να μην γίνονται αποδεκτές. Σε αυτή την περίπτωση, μπορεί να μην είναι αρκετό να αλλάξετε απλώς το αρχείο από το Github, αλλά και να αλλάξετε τη ρύθμιση στην εφαρμογή.

Η διεύθυνση URL staging έχει αυτή τη μορφή: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> όπως: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net

Snippets

Είναι δυνατόν να αποθηκεύσετε HTML snippets μέσα σε μια στατική εφαρμογή που θα φορτωθούν μέσα στην εφαρμογή. Αυτό μπορεί να χρησιμοποιηθεί για να εισάγετε κακόβουλο κώδικα στην εφαρμογή, όπως κώδικα JS για κλοπή διαπιστευτηρίων, ένα keylogger… Περισσότερες πληροφορίες στην ενότητα κλιμάκωσης προνομίων.

Managed Identities

Οι Azure Static Web Apps μπορούν να ρυθμιστούν για να χρησιμοποιούν managed identities, ωστόσο, όπως αναφέρθηκε σε αυτή την FAQ, υποστηρίζονται μόνο για εξαγωγή μυστικών από το Azure Key Vault για σκοπούς αυθεντικοποίησης, όχι για πρόσβαση σε άλλους πόρους Azure.

Για περισσότερες πληροφορίες μπορείτε να βρείτε έναν οδηγό Azure για τη χρήση ενός μυστικού vault σε μια στατική εφαρμογή στο https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.

Enumeration

# List Static Webapps
az staticwebapp list --output table

# Get Static Webapp details
az staticwebapp show --name <name> --resource-group <res-group> --output table

# Get appsettings
az staticwebapp appsettings list --name <name>

# Get env information
az staticwebapp environment list --name <name>
az staticwebapp environment functions --name <name>

# Get API key
az staticwebapp secrets list --name <name>

# Get invited users
az staticwebapp users list --name <name>

# Get current snippets
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/trainingdemo/snippets?api-version=2022-03-01"

# Get database connections
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"

## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"

# Check connected backends
az staticwebapp backends show --name <name> --resource-group <res-group>

Παραδείγματα για τη δημιουργία Ιστοσελίδων

Μπορείτε να βρείτε ένα ωραίο παράδειγμα για τη δημιουργία μιας ιστοσελίδας στον παρακάτω σύνδεσμο: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github

  1. Fork το αποθετήριο https://github.com/staticwebdev/react-basic/generate στον λογαριασμό σας στο GitHub και ονομάστε το my-first-static-web-app
  2. Στο Azure portal δημιουργήστε μια Static Web App ρυθμίζοντας την πρόσβαση στο Github και επιλέγοντας το προηγουμένως forked νέο αποθετήριο
  3. Δημιουργήστε το, περιμένετε μερικά λεπτά και ελέγξτε τη νέα σας σελίδα!

Ανάβαση Δικαιωμάτων και Μετά την Εκμετάλλευση

Όλες οι πληροφορίες σχετικά με την ανάβαση δικαιωμάτων και την μετά την εκμετάλλευση στις Azure Static Web Apps μπορούν να βρεθούν στον παρακάτω σύνδεσμο:

Az - Static Web App Privesc

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks