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

This commit is contained in:
Translator
2026-01-18 12:00:56 +00:00
parent 9dabdd9fda
commit 1d1bce3c55

View File

@@ -4,7 +4,7 @@
## Azure Static Web Apps
このサービスの詳細については次を参照してください:
For more information about this service check:
{{#ref}}
../az-services/az-static-web-apps.md
@@ -12,7 +12,7 @@
### Microsoft.Web/staticSites/snippets/write
snippet を作成することで、静的ウェブページ任意の HTML コードを読み込ませることが可能です。これにより、攻撃者 web app 内に JS コードを注入し、credentials や mnemonic keysweb3 wallets 内)などの機密情報を窃取できる可能性があります。
snippet を作成することで、静的ウェブページ任意の HTML コードを読み込むようにすることができます。これにより、攻撃者 web app 内に JS コードを注入し、credentials や mnemonic keysweb3 wallets 内)などの機密情報を盗む可能性があります。
次のコマンドは、常に web app に読み込まれる snippet を作成します::
```bash
@@ -31,7 +31,7 @@ az rest \
}
}'
```
### 設定済みのサードパーティ認証情報読み取
### 設定されたサードパーティ認証情報読み取
As explained in the App Service section:
@@ -39,14 +39,14 @@ As explained in the App Service section:
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
次のコマンドを実行すると、現在のアカウントに設定されている**サードパーティの認証情報を読み取る**ことができます。えば、Github の認証情報が別のユーザーに設定されている場合、そのユーザーとは別のユーザーからトークンにアクセスできない点に注意してください
次のコマンドを実行すると、現在のアカウントに設定されている**サードパーティの認証情報を読み取る**ことができます。たとえば、あるGithubの認証情報が別のユーザーに設定されている場合は別のユーザーからそのトークンにアクセスすることはできません
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
このコマンドは Github、Bitbucket、DropboxOneDrive の tokens を返します。
このコマンドは Github、Bitbucket、Dropbox および OneDrive の tokens を返します。
以下 tokens を確認するためのコマンド例を示します:
以下 tokens を確認するためのコマンド例です:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
@@ -71,12 +71,12 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
```
### ファイルの上書き - ルート、HTML、JSの上書き...
Azureが**Github token**を保している場合、次のようなリクエストを送信することで、アプリを含む**Githubリポジトリ内のファイルを上書き**することが可能です。このリクエストでは、上書きするファイルのパス、ファイルの内容、コミットメッセージを指定します。
**Github repo内のファイルを上書きする**ことは、Azureが**Github token**を保して次のようなリクエストを送信することで可能で、そのリクエスト上書きするファイルのパス、ファイルの内容、コミットメッセージを指定します。
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.
攻撃者はこれを悪用して、基本的に**web appのコンテンツを変更**して悪意のあるコンテンツを配信したり(認証情報やニーモニックキーを盗む等)、`staticwebapp.config.json` を上書きして特定のパスを自分たちのサーバーへ**リルート**することができます。
> [!WARNING]
> 攻撃者が何らかの方法でGithubリポジトリを乗っ取った場合、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,7 +133,7 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
この権限により static app の **API key deployment token** を取得できます。
この権限によりstatic app の **API key deployment token** を取得できます。
az rest を使用して:
```bash
@@ -144,27 +144,27 @@ AzCLI を使用する:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Then, in order to **update an app using the 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 ot use. So the image and paarements could change in the future.
Then, in order to **トークンを使用してアプリを更新する**には、次のコマンドを実行できます。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 paarements could change in the future.
> [!TIP]
> アプリをデプロイするには、[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`** ツールを使か、以下の手順に従ってください:
> アプリをデプロイするには、[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`** ツールを使用するか、以下の手順に従ってください:
1. リポジトリ [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic)(またはデプロイしたい任意のリポジトリ)をダウンロードし、`cd react-basic` を実行します。
2. デプロイしたいコードを変更します
3. 次のコマンドを実行してデプロイします(`<api-token>` を変更するを忘れないでください)
1. リポジトリ [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic)(またはデプロイしたいのリポジトリ)をダウンロードし、`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]
> トークンを持っていても、**Deployment Authorization Policy** が **Github** に設定されている場合アプリをデプロイすることはできません。トークンを使用するには、デプロイ方法を APi トークンを使うように変更するための権限 `Microsoft.Web/staticSites/write` が必要です。
> トークンを持っていても、**Deployment Authorization Policy** が **Github** に設定されている場合アプリをデプロイできません。トークンを使用するには、デプロイ方法を API トークンを使う方法に変更するための権限 `Microsoft.Web/staticSites/write` が必要です。
### Microsoft.Web/staticSites/write
この権限があれば、**static web app のソースを別の Github リポジトリに変更することが可能**ですが、自動的にプロビジョニングされるわけではありません。これは Github Action から行う必要があります。
この権限があれば、**change the source of the static web app to a different Github repository**static web app のソースを別の Github リポジトリに変更することが可能です。ただし、自動プロビジョニングされるわけではなく、これは Github Action から行う必要があります。
しかし、**Deployment Authotization Policy** が **Github** に設定されている場合、**新しいソースリポジトリから app を更新することが可能です**
しかし、**Deployment Authotization Policy** が **Github** に設定されている場合、**update the app from the new source repository!**新しいソースリポジトリからアプリを更新することが可能です。
もし **Deployment Authorization Policy** が 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,16 +250,16 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
この権限があれば、**reset the API key of the static web app** を行うことができ、アプリを自動的にデプロイする workflows を DoSing してしまう可能性があります。
この権限により、**reset the API key of the 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 内の保護されたパスアクセスするため **ユーザーへの招待を作成する** ことを許可します。
この権限は、特定のロールを与えて static web app 内の保護されたパスアクセスするため **ユーザーへの招待を作成する** ことを許可します。
ログインは `/.auth/login/github`github用`/.auth/login/aad`Entra ID用などのパスにあり、ユーザーは次のコマンドで招待できます
ログインは `/.auth/login/github`github 用)や `/.auth/login/aad`Entra ID 用)などのパスにあり、ユーザーは次のコマンドで招待できます:
```bash
az staticwebapp users invite \
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
@@ -272,12 +272,11 @@ az staticwebapp users invite \
```
### プルリクエスト
デフォルトでは、同リポジトリ内のブランチからの Pull Requests は自動的にコンパイルされ、ステージング環境でビルドされます。これは、リポジトリに対する書き込み権限を持っているが本番ブランチ(通常 `main`のブランチ保護を回避できない攻撃者によって悪用され、ステージング URL に**悪意あるバージョンのアプリをデプロイする**ことにつながる可能性があります。
デフォルトでは、同リポジトリ内のブランチからのプルリクエストは自動的にコンパイルされ、ステージング環境でビルドされます。これは、リポジトリへの書き込み権限はあるが本番ブランチのブランチ保護(通常 `main`)を回避できない攻撃者、ステージングURLに**悪意あるアプリのバージョンをデプロイする**ために悪用される可能性があります。
ステージング URL の形式は次のとおりです: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` 例: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
ステージングURLは次の形式です: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` 例: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
> [!TIP]
> デフォルトでは、外部PR はリポジトリに少なくとも 1 つの PR をマージしていない限りワークフロー実行しない点に注意してください。攻撃者はまず有効な PR をリポジトリに送信し、その後悪意ある PR を送ってステージング環境に悪意あるアプリをデプロイする可能性があります。とはいえ、予期せぬ保護があります。static web app にデプロイするためのデフォルトの GitHub Action は、デプロイ用トークンを含むシークレット(例えば `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`)へのアクセスを必要とします。これは IDToken を使ったデプロイであっても同様です。したがって、外部 PR はこのシークレットにアクセスできず、外部 PR が承認されない限りワークフローを変更して任意のトークンを配置することもできないため、**この攻撃は実際には機能しません**。
> デフォルトでは、外部PRはリポジトリに少なくとも1つPRをマージしていない限りワークフロー実行されないことに注意してください。攻撃者はまず有効なPRを送信してリポジトリにマージさせ、その後悪意あるPRを送ってステージング環境に悪意あるアプリをデプロイしようとする可能性があります。 しかし、思わぬ保護があります。static web app にデプロイするデフォルトの Github Action は、デプロイ用トークンを含むシークレット(例えば `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`)へのアクセスを必要とします。たとえデプロイがIDTokenで行われる場合でもです。つまり、外部PRはこのシークレットにアクセスできず、外部PRワークフローを変更してここに任意のトークンを置くことも、PRが承認されない限りできないため、**この攻撃は実際には機能しません**。
{{#include ../../../banners/hacktricks-training.md}}