# AWS - WAF Enum

{{#include ../../../../banners/hacktricks-training.md}}

## AWS WAF

AWS WAFは、**ウェブアプリケーションファイアウォール**であり、**ウェブアプリケーションやAPIをさまざまなウェブの脅威から保護**するために設計されています。これにより、ユーザーはSQLインジェクションやクロスサイトスクリプティングなどの一般的な攻撃ベクトルを軽減する**セキュリティルール**を設定し、カスタムフィルタリングルールを定義することで、受信トラフィックを制御できます。

### キー概念

#### Web ACL (アクセス制御リスト)

Web ACLは、ウェブアプリケーションやAPIに適用できるルールのコレクションです。Web ACLをリソースに関連付けると、AWS WAFはWeb ACLで定義されたルールに基づいて受信リクエストを検査し、指定されたアクションを実行します。

#### ルールグループ

ルールグループは、複数のWeb ACLに適用できる再利用可能なルールのコレクションです。ルールグループは、異なるウェブアプリケーションやAPI全体で一貫したルールセットを管理および維持するのに役立ちます。

各ルールグループには、そのルール、ルールグループ、およびWeb ACLを実行するために使用されるオペレーティングリソースを計算および制御するのに役立つ**キャパシティ**が関連付けられています。作成時にその値が設定されると、変更することはできません。

#### ルール

ルールは、AWS WAFが受信ウェブリクエストを検査するために使用する条件のセットを定義します。主に2種類のルールがあります：

1. **通常のルール**：このルールタイプは、指定された条件を使用してウェブリクエストを許可、ブロック、またはカウントするかを決定します。
2. **レートベースのルール**：特定のIPアドレスからのリクエストを5分間にわたってカウントします。ここで、ユーザーはしきい値を定義し、IPからのリクエスト数がこの制限を超えると、そのIPからの後続のリクエストはしきい値が下回るまでブロックされます。レートベースのルールの最小しきい値は**2000リクエスト**です。

#### 管理されたルール

AWS WAFは、AWSおよびAWS Marketplaceの販売者によって管理される事前構成されたルールセットを提供します。これらのルールセットは、一般的な脅威からの保護を提供し、新しい脆弱性に対処するために定期的に更新されます。

#### IPセット

IPセットは、許可またはブロックしたいIPアドレスまたはIPアドレス範囲のリストです。IPセットは、IPベースのルールの管理プロセスを簡素化します。

#### 正規表現パターンセット

正規表現パターンセットには、ウェブリクエスト内で検索するパターンを定義する1つ以上の正規表現（regex）が含まれています。これは、特定の文字列のシーケンスをフィルタリングするなど、より複雑なマッチングシナリオに役立ちます。

#### ロックトークン

ロックトークンは、WAFリソースの更新時に同時実行制御に使用されます。これにより、複数のユーザーまたはプロセスが同時に同じリソースを更新しようとした場合に、変更が誤って上書きされないようにします。

#### APIキー

AWS WAFのAPIキーは、特定のAPI操作へのリクエストを認証するために使用されます。これらのキーは暗号化され、安全に管理され、アクセスを制御し、認可されたユーザーのみがWAF構成を変更できるようにします。

- **例**：CAPTCHA APIの統合。

#### 権限ポリシー

権限ポリシーは、AWS WAFリソースに対して誰がアクションを実行できるかを指定するIAMポリシーです。権限を定義することで、WAFリソースへのアクセスを制御し、認可されたユーザーのみが構成を作成、更新、または削除できるようにします。

#### スコープ

AWS WAFのスコープパラメータは、WAFルールと構成が地域アプリケーションまたはAmazon CloudFrontディストリビューションに適用されるかどうかを指定します。

- **REGIONAL**：Application Load Balancers (ALB)、Amazon API Gateway REST API、AWS AppSync GraphQL API、Amazon Cognitoユーザープール、AWS App Runnerサービス、AWS Verified Accessインスタンスなどの地域サービスに適用されます。これらのリソースが存在するAWSリージョンを指定します。
- **CLOUDFRONT**：グローバルなAmazon CloudFrontディストリビューションに適用されます。CloudFront用のWAF構成は、コンテンツが提供される場所に関係なく、`us-east-1`リージョンを通じて管理されます。

### キー機能

#### モニタリング基準（条件）

**条件**は、AWS WAFが監視する受信HTTP/HTTPSリクエストの要素を指定します。これには、XSS、地理的位置（GEO）、IPアドレス、サイズ制約、SQLインジェクション、およびパターン（文字列およびregexマッチング）が含まれます。**国に基づいてCloudFrontレベルで制限されたリクエストはWAFに到達しない**ことに注意することが重要です。

各AWSアカウントは次のように構成できます：

- **各タイプごとに100条件**（Regexの場合は**10条件**のみ許可されますが、この制限は増加可能です）。
- **100ルール**および**50 Web ACL**。
- 最大**5レートベースのルール**。
- アプリケーションロードバランサーと共にWAFが実装されている場合、**1秒あたり10,000リクエスト**のスループット。

#### ルールアクション

アクションは各ルールに割り当てられ、選択肢は次のとおりです：

- **許可**：リクエストは適切なCloudFrontディストリビューションまたはApplication Load Balancerに転送されます。
- **ブロック**：リクエストは即座に終了します。
- **カウント**：ルールの条件を満たすリクエストを集計します。これは、ルールのテストに役立ち、AllowまたはBlockに設定する前にルールの正確性を確認します。
- **CAPTCHAおよびチャレンジ**：リクエストがボットから来ていないことを確認するために、CAPTCHAパズルやサイレントチャレンジを使用します。

Web ACL内のいずれのルールにも一致しないリクエストは、**デフォルトアクション**（AllowまたはBlock）を受けます。Web ACL内で定義されたルールの実行順序は重要で、通常は次の順序に従います：

1. ホワイトリストに登録されたIPを許可します。
2. ブラックリストに登録されたIPをブロックします。
3. 有害なシグネチャに一致するリクエストをブロックします。

#### CloudWatch統合

AWS WAFはCloudWatchと統合されており、AllowedRequests、BlockedRequests、CountedRequests、PassedRequestsなどのメトリクスを提供します。これらのメトリクスはデフォルトで毎分報告され、2週間の期間保持されます。

### 列挙

CloudFrontディストリビューションと対話するには、リージョンUS East (N. Virginia)を指定する必要があります：

- CLI - CloudFrontスコープを使用する際にリージョンUS Eastを指定します：`--scope CLOUDFRONT --region=us-east-1`。
- APIおよびSDK - すべての呼び出しで、リージョンエンドポイントus-east-1を使用します。

地域サービスと対話するには、リージョンを指定する必要があります：

- リージョンヨーロッパ（スペイン）の例：`--scope REGIONAL --region=eu-south-2`
```bash
# Web ACLs #

## Retrieve a list of web access control lists (Web ACLs) available in your AWS account
aws wafv2 list-web-acls --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve details about the specified Web ACL
aws wafv2 get-web-acl --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

## Retrieve a list of resources associated with a specific web access control list (Web ACL)
aws wafv2 list-resources-for-web-acl --web-acl-arn <value> # Additional permissions needed depending on the protected resource type: cognito-idp:ListResourcesForWebACL, ec2:DescribeVerifiedAccessInstanceWebAclAssociations or apprunner:ListAssociatedServicesForWebAcl
## Retrieve the Web ACL associated with the specified AWS resource
aws wafv2 get-web-acl-for-resource --resource-arn <arn> # Additional permissions needed depending on the protected resource type: cognito-idp:GetWebACLForResource, ec2:GetVerifiedAccessInstanceWebAcl, wafv2:GetWebACL or apprunner:DescribeWebAclForService

# Rule groups #

## List of the rule groups available in your AWS account
aws wafv2 list-rule-groups --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve the details of a specific rule group
aws wafv2 get-rule-group [--name <value>] [--id <value>] [--arn <value>] [--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>]
## Retrieve the IAM policy attached to the specified rule group
aws wafv2 get-permission-policy --resource-arn <rule-group-arn> # Just the owner of the Rule Group can do this operation

# Managed rule groups (by AWS or by a third-party) #

## List the managed rule groups that are available
aws wafv2 list-available-managed-rule-groups --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## List the available versions of the specified managed rule group
aws wafv2 list-available-managed-rule-group-versions --vendor-name <value> --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve high-level information about a specific managed rule group
aws wafv2 describe-managed-rule-group --vendor-name <value> --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--version-name <value>]
## Retrieve high-level information about all managed rule groups
aws wafv2 describe-all-managed-products --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve high-level information about all managed rule groups from a specific vendor
aws wafv2 describe-managed-products-by-vendor --vendor-name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

# IP sets #

## List the IP sets that are available in your AWS account
aws wafv2 list-ip-sets --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve the specific IP set
aws wafv2 get-ip-set --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve the keys that are currently being managed by a rate-based rule.
aws wafv2 get-rate-based-statement-managed-keys --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>\
--web-acl-name <value> --web-acl-id <value> --rule-name <value> [--rule-group-rule-name <value>]

# Regex pattern sets #

## List all the regex pattern sets that you manage
aws wafv2 list-regex-pattern-sets --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieves the specified regex pattern sets
aws wafv2 get-regex-pattern-set --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

# API Keys #

## List API keys for the specified scope
aws wafv2 list-api-keys --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve decrypted API key
aws wafv2 get-decrypted-api-key --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> --api-key <value>

# Logs #

## List of logging configurations (storage location of the logs)
aws wafv2 list-logging-configurations --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--log-scope <value>]
## Retrieve the logging configuration settings associated with a specific web ACL
aws wafv2 get-logging-configuration --resource-arn <value> [--log-scope <CUSTOMER | SECURITY_LAKE>] [--log-type <value>]

# Miscelaneous #

## Retrieve a list of the tags associated to the specified resource
aws wafv2 list-tags-for-resource resource-arn <value>

## Retrieve a sample of web requests that match a specified rule within a WebACL during a specified time range
aws wafv2 get-sampled-requests --web-acl-arn <value> --rule-metric-name <value> --time-window <value> --max-items <1-500> --scope <value>

## Obtains the web ACL capacity unit (WCU) requirements for a specified scope and ruleset
aws wafv2 check-capacity --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> --rules <value>

## List of available releases for the AWS WAFv2 mobile SDK
aws wafv2 list-mobile-sdk-releases --platform <IOS | ANDROID>
## Retrieves information for the specified mobile SDK release
aws wafv2 get-mobile-sdk-release --platform <value> --release-version <value>

```
### ポストエクスプロイテーション / バイパス

> [!TIP]
> 攻撃者の視点から見ると、このサービスは攻撃者がWAFの保護やネットワークの露出を特定するのに役立ち、他のウェブを侵害するのに役立つ可能性があります。
>
> しかし、攻撃者はこのサービスを妨害して、ウェブがWAFによって保護されないようにすることにも興味を持つかもしれません。

多くの削除および更新操作では、**ロックトークン**を提供する必要があります。このトークンはリソースに対する同時実行制御に使用され、複数のユーザーまたはプロセスが同時に同じリソースを更新しようとした場合に変更が誤って上書きされないようにします。このトークンを取得するためには、特定のリソースに対して対応する**リスト**または**取得**操作を実行することができます。

#### **`wafv2:CreateRuleGroup`, `wafv2:UpdateRuleGroup`, `wafv2:DeleteRuleGroup`**

攻撃者は、影響を受けたリソースのセキュリティを侵害することができます：

- 正当なIPアドレスからの正当なトラフィックをブロックするルールグループを作成し、サービス拒否を引き起こすことができます。
- ルールグループを更新し、例えばそのアクションを**ブロック**から**許可**に変更することができます。
- 重要なセキュリティ対策を提供するルールグループを削除することができます。
```bash
# Create Rule Group
aws wafv2 create-rule-group --name <value> --capacity <value> --visibility-config <value> \
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--description <value>]
# Update Rule Group
aws wafv2 update-rule-group --name <value> --id <value> --visibility-config <value> --lock-token <value>\
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--description <value>]
# Delete Rule Group
aws wafv2 delete-rule-group --name <value> --id <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
```
次の例は、特定のIPアドレスからの正当なトラフィックをブロックするルールグループを示しています：
```bash
aws wafv2 create-rule-group --name BlockLegitimateIPsRuleGroup --capacity 1 --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=BlockLegitimateIPsRuleGroup --scope CLOUDFRONT --region us-east-1 --rules file://rule.json
```
**rule.json** ファイルは次のようになります:
```json
[
{
"Name": "BlockLegitimateIPsRule",
"Priority": 0,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-east-1:123456789012:global/ipset/legitIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "BlockLegitimateIPsRule"
}
}
]
```
**潜在的影響**: 不正アクセス、データ漏洩、及び潜在的なDoS攻撃。

#### **`wafv2:CreateWebACL`, `wafv2:UpdateWebACL`, `wafv2:DeleteWebACL`**

これらの権限を持つ攻撃者は以下のことが可能です：

- 新しいWeb ACLを作成し、悪意のあるトラフィックを通過させるか、正当なトラフィックをブロックするルールを導入し、WAFを無効にするか、サービス拒否を引き起こす。
- 既存のWeb ACLを更新し、以前はブロックされていたSQLインジェクションやクロスサイトスクリプティングなどの攻撃を許可するようにルールを変更したり、正当なリクエストをブロックすることで正常なトラフィックの流れを妨げる。
- Web ACLを削除し、影響を受けたリソースを完全に無防備にし、広範囲なウェブ攻撃にさらす。

> [!NOTE]
> **ManagedByFirewallManager**がfalseの場合にのみ、指定された**WebACL**を削除できます。
```bash
# Create Web ACL
aws wafv2 create-web-acl --name <value> --default-action <value> --visibility-config <value> \
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--captcha-config <value>] [--description <value>]
# Update Web ACL
aws wafv2 update-web-acl --name <value> --id <value> --default-action <value> --visibility-config <value> --lock-token <value>\
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--captcha-config <value>] [--description <value>]
# Delete Web ACL
aws wafv2 delete-web-acl --name <value> --id <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
```
次の例は、特定のIPセットからの正当なトラフィックをブロックするためにWeb ACLを更新する方法を示しています。オリジンIPがこれらのIPのいずれとも一致しない場合、デフォルトのアクションもブロックとなり、DoSを引き起こすことになります。

**Original Web ACL**:
```json
{
"WebACL": {
"Name": "AllowLegitimateIPsWebACL",
"Id": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/AllowLegitimateIPsWebACL/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"DefaultAction": {
"Allow": {}
},
"Description": "",
"Rules": [
{
"Name": "AllowLegitimateIPsRule",
"Priority": 0,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
},
"Action": {
"Allow": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "AllowLegitimateIPsRule"
}
}
],
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "AllowLegitimateIPsWebACL"
},
"Capacity": 1,
"ManagedByFirewallManager": false,
"LabelNamespace": "awswaf:123456789012:webacl:AllowLegitimateIPsWebACL:"
},
"LockToken": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
```
Web ACLを更新するコマンド：
```json
aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --default-action Block={} --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=AllowLegitimateIPsWebACL --rules file://rule.json --region us-east-1
```
**rule.json** ファイルは次のようになります:
```json
[
{
"Name": "BlockLegitimateIPsRule",
"Priority": 0,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "BlockLegitimateIPRule"
}
}
]
```
**潜在的影響**: 不正アクセス、データ漏洩、及び潜在的なDoS攻撃。

#### **`wafv2:AssociateWebACL`, `wafv2:DisassociateWebACL`**

**`wafv2:AssociateWebACL`** 権限は、攻撃者がリソースにウェブACL（アクセス制御リスト）を関連付けることを可能にし、セキュリティ制御を回避して不正なトラフィックがアプリケーションに到達することを許可し、SQLインジェクションやクロスサイトスクリプティング（XSS）などの脆弱性を引き起こす可能性があります。逆に、**`wafv2:DisassociateWebACL`** 権限を持つ攻撃者は、セキュリティ保護を一時的に無効にし、リソースを検出されることなく脆弱性にさらすことができます。

保護されるリソースの種類に応じて、追加の権限が必要になります：

- **関連付け**
- apigateway:SetWebACL
- apprunner:AssociateWebAcl
- appsync:SetWebACL
- cognito-idp:AssociateWebACL
- ec2:AssociateVerifiedAccessInstanceWebAcl
- elasticloadbalancing:SetWebAcl
- **切り離し**
- apigateway:SetWebACL
- apprunner:DisassociateWebAcl
- appsync:SetWebACL
- cognito-idp:DisassociateWebACL
- ec2:DisassociateVerifiedAccessInstanceWebAcl
- elasticloadbalancing:SetWebAcl
```bash
# Associate
aws wafv2 associate-web-acl --web-acl-arn <value> --resource-arn <value>
# Disassociate
aws wafv2 disassociate-web-acl --resource-arn <value>
```
**潜在的な影響**: リソースのセキュリティが侵害され、悪用のリスクが増加し、AWS WAFによって保護されたAWS環境内でのサービスの中断の可能性があります。

#### **`wafv2:CreateIPSet` , `wafv2:UpdateIPSet`, `wafv2:DeleteIPSet`**

攻撃者はAWS WAFによって管理されるIPセットを作成、更新、削除することができます。これは危険であり、悪意のあるトラフィックを許可するために新しいIPセットを作成したり、正当なトラフィックをブロックするためにIPセットを変更したり、悪意のあるIPアドレスを含めるために既存のIPセットを更新したり、信頼されたIPアドレスを削除したり、重要なリソースを保護するために設計された重要なIPセットを削除したりする可能性があります。
```bash
# Create IP set
aws wafv2 create-ip-set --name <value> --ip-address-version <IPV4 | IPV6> --addresses <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# Update IP set
aws wafv2 update-ip-set --name <value> --id <value> --addresses <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# Delete IP set
aws wafv2 delete-ip-set --name <value> --id <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
```
次の例は、**既存のIPセットを希望するIPセットで上書きする方法**を示しています：
```bash
aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --addresses 99.99.99.99/32 --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --scope CLOUDFRONT --region us-east-1
```
**潜在的影響**: 不正アクセスと正当なトラフィックのブロック。

#### **`wafv2:CreateRegexPatternSet`** , **`wafv2:UpdateRegexPatternSet`**, **`wafv2:DeleteRegexPatternSet`**

これらの権限を持つ攻撃者は、特定のパターンに基づいて受信トラフィックを制御およびフィルタリングするためにAWS WAFで使用される正規表現パターンセットを操作することができます。

- 新しい正規表現パターンを作成することで、攻撃者は有害なコンテンツを許可することができます。
- 既存のパターンを更新することで、攻撃者はセキュリティルールを回避することができます。
- 悪意のある活動をブロックするために設計されたパターンを削除することで、攻撃者は悪意のあるペイロードを送信し、セキュリティ対策を回避することができます。
```bash
# Create regex pattern set
aws wafv2 create-regex-pattern-set --name <value> --regular-expression-list <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--description <value>]
# Update regex pattern set
aws wafv2 update-regex-pattern-set --name <value> --id <value> --regular-expression-list <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# Delete regex pattern set
aws wafv2 delete-regex-pattern-set --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> --id <value> --lock-token <value>
```
**潜在的影響**: セキュリティ制御をバイパスし、悪意のあるコンテンツを許可し、機密データを露出させたり、AWS WAFによって保護されたサービスやリソースを中断させる可能性があります。

#### **(`wavf2:PutLoggingConfiguration` &** `iam:CreateServiceLinkedRole`), **`wafv2:DeleteLoggingConfiguration`**

**`wafv2:DeleteLoggingConfiguration`** の権限を持つ攻撃者は、指定されたWeb ACLからログ設定を削除することができます。その後、**`wavf2:PutLoggingConfiguration`** と **`iam:CreateServiceLinkedRole`** の権限を持つ攻撃者は、ログ設定を作成または置き換えることができ（削除した後に）、ログを完全に防止するか、Amazon S3バケット、Amazon CloudWatch Logsロググループ、または制御下のAmazon Kinesis Data Firehoseなどの不正な宛先にリダイレクトすることができます。

作成プロセス中、サービスは指定されたログ宛先にログが書き込まれるために必要な権限を自動的に設定します：

- **Amazon CloudWatch Logs:** AWS WAFは指定されたCloudWatch Logsロググループにリソースポリシーを作成します。このポリシーは、AWS WAFがロググループにログを書き込むために必要な権限を持っていることを保証します。
- **Amazon S3バケット:** AWS WAFは指定されたS3バケットにバケットポリシーを作成します。このポリシーは、AWS WAFが指定されたバケットにログをアップロードするために必要な権限を付与します。
- **Amazon Kinesis Data Firehose:** AWS WAFはKinesis Data Firehoseと対話するために特にサービスリンクロールを作成します。このロールにより、AWS WAFは構成されたFirehoseストリームにログを配信することができます。

> [!NOTE]
> Web ACLごとに1つのログ宛先のみを定義することが可能です。
```bash
# Put logging configuration
aws wafv2 put-logging-configuration --logging-configuration <value>
# Delete logging configuration
aws wafv2 delete-logging-configuration --resource-arn <value> [--log-scope <CUSTOMER | SECURITY_LAKE>] [--log-type <value>]
```
**潜在的な影響:** セキュリティイベントの可視性が不明瞭になり、インシデントレスポンスプロセスが困難になり、AWS WAFで保護された環境内での秘密の悪意のある活動を助長します。

#### **`wafv2:DeleteAPIKey`**

この権限を持つ攻撃者は、既存のAPIキーを削除でき、CAPTCHAが無効になり、それに依存する機能（フォームの送信やアクセス制御など）が妨げられます。このCAPTCHAの実装によっては、CAPTCHAのバイパスや、リソースでエラーマネジメントが適切に設定されていない場合にはDoSにつながる可能性があります。
```bash
# Delete API key
aws wafv2 delete-api-key --api-key <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
```
**潜在的な影響**: CAPTCHA保護を無効にしたり、アプリケーションの機能を妨害したりすることで、セキュリティ侵害やデータ盗難の可能性が生じます。

#### **`wafv2:TagResource`, `wafv2:UntagResource`**

攻撃者は、Web ACL、ルールグループ、IPセット、正規表現パターンセット、ログ設定などのAWS WAFv2リソースからタグを追加、変更、または削除することができるでしょう。
```bash
# Tag
aws wafv2 tag-resource --resource-arn <value> --tags <value>
# Untag
aws wafv2 untag-resource --resource-arn <value> --tag-keys <value>
```
**潜在的影響**: リソースの改ざん、情報漏洩、コスト操作、運用の中断。

## 参考文献

- [https://www.citrusconsulting.com/aws-web-application-firewall-waf/#:\~:text=Conditions%20allow%20you%20to%20specify,user%20via%20a%20web%20application](https://www.citrusconsulting.com/aws-web-application-firewall-waf/)
- [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html)

{{#include ../../../../banners/hacktricks-training.md}}
