# AWS - WAF Enum

## AWS - WAF Enum

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

## AWS WAF

AWS WAF est un **pare-feu d'application web** conçu pour **protéger les applications web ou les API** contre diverses exploitations web qui peuvent affecter leur disponibilité, sécurité ou consommation de ressources. Il permet aux utilisateurs de contrôler le trafic entrant en configurant des **règles de sécurité** qui atténuent les vecteurs d'attaque typiques comme l'injection SQL ou le cross-site scripting et en définissant également des règles de filtrage personnalisées.

### Concepts clés

#### Web ACL (Liste de Contrôle d'Accès)

Une Web ACL est un ensemble de règles que vous pouvez appliquer à vos applications web ou API. Lorsque vous associez une Web ACL à une ressource, AWS WAF inspecte les requêtes entrantes en fonction des règles définies dans la Web ACL et prend les actions spécifiées.

#### Rule Group

Un Rule Group est une collection réutilisable de règles que vous pouvez appliquer à plusieurs Web ACLs. Les groupes de règles aident à gérer et à maintenir des ensembles de règles cohérents à travers différentes applications web ou API.

Chaque groupe de règles a sa **capacité** associée, qui aide à calculer et à contrôler les ressources opérationnelles utilisées pour exécuter vos règles, groupes de règles et Web ACLs. Une fois sa valeur définie lors de la création, il n'est pas possible de la modifier.

#### Rule

Une règle définit un ensemble de conditions que AWS WAF utilise pour inspecter les requêtes web entrantes. Il existe deux types principaux de règles :

1. **Règle Régulière** : Ce type de règle utilise des conditions spécifiées pour déterminer s'il faut autoriser, bloquer ou compter les requêtes web.
2. **Règle Basée sur le Taux** : Compte les requêtes d'une adresse IP spécifique sur une période de cinq minutes. Ici, les utilisateurs définissent un seuil, et si le nombre de requêtes d'une IP dépasse cette limite dans les cinq minutes, les requêtes suivantes de cette IP sont bloquées jusqu'à ce que le taux de requêtes tombe en dessous du seuil. Le seuil minimum pour les règles basées sur le taux est de **2000 requêtes**.

#### Managed Rules

AWS WAF propose des ensembles de règles gérées préconfigurés qui sont maintenus par AWS et les vendeurs du marché AWS. Ces ensembles de règles offrent une protection contre les menaces courantes et sont régulièrement mis à jour pour traiter de nouvelles vulnérabilités.

#### IP Set

Un IP Set est une liste d'adresses IP ou de plages d'adresses IP que vous souhaitez autoriser ou bloquer. Les ensembles d'IP simplifient le processus de gestion des règles basées sur les IP.

#### Regex Pattern Set

Un Regex Pattern Set contient une ou plusieurs expressions régulières (regex) qui définissent des motifs à rechercher dans les requêtes web. Cela est utile pour des scénarios de correspondance plus complexes, tels que le filtrage de séquences spécifiques de caractères.

#### Lock Token

Un Lock Token est utilisé pour le contrôle de la concurrence lors de la mise à jour des ressources WAF. Il garantit que les modifications ne sont pas accidentellement écrasées par plusieurs utilisateurs ou processus tentant de mettre à jour la même ressource simultanément.

#### API Keys

Les API Keys dans AWS WAF sont utilisées pour authentifier les requêtes à certaines opérations API. Ces clés sont cryptées et gérées de manière sécurisée pour contrôler l'accès et garantir que seuls les utilisateurs autorisés peuvent apporter des modifications aux configurations WAF.

- **Exemple** : Intégration de l'API CAPTCHA.

#### Permission Policy

Une Permission Policy est une politique IAM qui spécifie qui peut effectuer des actions sur les ressources AWS WAF. En définissant des permissions, vous pouvez contrôler l'accès aux ressources WAF et garantir que seuls les utilisateurs autorisés peuvent créer, mettre à jour ou supprimer des configurations.

#### Scope

Le paramètre de portée dans AWS WAF spécifie si les règles et configurations WAF s'appliquent à une application régionale ou à une distribution Amazon CloudFront.

- **REGIONAL** : S'applique aux services régionaux tels que les Application Load Balancers (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, le pool d'utilisateurs Amazon Cognito, le service AWS App Runner et l'instance AWS Verified Access. Vous spécifiez la région AWS où ces ressources sont situées.
- **CLOUDFRONT** : S'applique aux distributions Amazon CloudFront, qui sont globales. Les configurations WAF pour CloudFront sont gérées via la région `us-east-1`, peu importe où le contenu est servi.

### Fonctionnalités clés

#### Monitoring Criteria (Conditions)

**Conditions** spécifient les éléments des requêtes HTTP/HTTPS entrantes que AWS WAF surveille, qui incluent XSS, localisation géographique (GEO), adresses IP, contraintes de taille, injection SQL et motifs (correspondance de chaînes et regex). Il est important de noter que **les requêtes restreintes au niveau de CloudFront en fonction du pays n'atteindront pas WAF**.

Chaque compte AWS peut configurer :

- **100 conditions** pour chaque type (sauf pour Regex, où seulement **10 conditions** sont autorisées, mais cette limite peut être augmentée).
- **100 règles** et **50 Web ACLs**.
- Un maximum de **5 règles basées sur le taux**.
- Un débit de **10 000 requêtes par seconde** lorsque WAF est mis en œuvre avec un équilibreur de charge d'application.

#### Rule actions

Des actions sont assignées à chaque règle, avec les options suivantes :

- **Allow** : La requête est transmise à la distribution CloudFront appropriée ou à l'Application Load Balancer.
- **Block** : La requête est immédiatement terminée.
- **Count** : Compte les requêtes répondant aux conditions de la règle. Cela est utile pour tester la règle, confirmant l'exactitude de la règle avant de la définir sur Allow ou Block.
- **CAPTCHA et Challenge** : Il est vérifié que la requête ne provient pas d'un bot à l'aide de puzzles CAPTCHA et de défis silencieux.

Si une requête ne correspond à aucune règle dans la Web ACL, elle subit l'**action par défaut** (Allow ou Block). L'ordre d'exécution des règles, défini dans une Web ACL, est crucial et suit généralement cette séquence :

1. Autoriser les IPs sur liste blanche.
2. Bloquer les IPs sur liste noire.
3. Bloquer les requêtes correspondant à des signatures nuisibles.

#### CloudWatch Integration

AWS WAF s'intègre à CloudWatch pour la surveillance, offrant des métriques telles que AllowedRequests, BlockedRequests, CountedRequests et PassedRequests. Ces métriques sont rapportées chaque minute par défaut et conservées pendant une période de deux semaines.

### Enumeration

Pour interagir avec les distributions CloudFront, vous devez spécifier la région US East (N. Virginia) :

- CLI - Spécifiez la région US East lorsque vous utilisez la portée CloudFront : `--scope CLOUDFRONT --region=us-east-1`.
- API et SDKs - Pour tous les appels, utilisez le point de terminaison de la région us-east-1.

Pour interagir avec les services régionaux, vous devez spécifier la région :

- Exemple avec la région Europe (Espagne) : `--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>

```
### Post Exploitation / Bypass

> [!TIP]
> Du point de vue d'un attaquant, ce service peut aider l'attaquant à identifier les protections WAF et les expositions réseau qui pourraient l'aider à compromettre d'autres sites.
>
> Cependant, un attaquant pourrait également être intéressé à perturber ce service afin que les sites ne soient pas protégés par le WAF.

Dans de nombreuses opérations de suppression et de mise à jour, il serait nécessaire de fournir le **token de verrouillage**. Ce token est utilisé pour le contrôle de la concurrence sur les ressources, garantissant que les modifications ne sont pas accidentellement écrasées par plusieurs utilisateurs ou processus tentant de mettre à jour la même ressource simultanément. Afin d'obtenir ce token, vous pourriez effectuer les opérations **list** ou **get** correspondantes sur la ressource spécifique.

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

Un attaquant pourrait compromettre la sécurité de la ressource affectée en :

- Créant des groupes de règles qui pourraient, par exemple, bloquer le trafic légitime provenant d'adresses IP légitimes, provoquant une déni de service.
- Mettant à jour des groupes de règles, pouvant modifier ses actions par exemple de **Block** à **Allow**.
- Supprimant des groupes de règles qui fournissent des mesures de sécurité critiques.
```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>
```
Les exemples suivants montrent un groupe de règles qui bloquerait le trafic légitime en provenance d'adresses IP spécifiques :
```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
```
Le fichier **rule.json** ressemblerait à :
```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"
}
}
]
```
**Impact potentiel** : Accès non autorisé, violations de données et attaques potentielles par déni de service.

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

Avec ces autorisations, un attaquant pourrait :

- Créer un nouveau Web ACL, introduisant des règles qui permettent soit le passage de trafic malveillant, soit le blocage de trafic légitime, rendant ainsi le WAF inutile ou provoquant un déni de service.
- Mettre à jour des Web ACL existants, pouvant modifier des règles pour permettre des attaques telles que l'injection SQL ou le scripting intersite, qui étaient auparavant bloquées, ou perturber le flux de trafic normal en bloquant des requêtes valides.
- Supprimer un Web ACL, laissant les ressources affectées entièrement non protégées, les exposant à une large gamme d'attaques web.

> [!NOTE]
> Vous ne pouvez supprimer le **WebACL** spécifié que si **ManagedByFirewallManager** est faux.
```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>
```
Les exemples suivants montrent comment mettre à jour un Web ACL pour bloquer le trafic légitime d'un ensemble d'IP spécifique. Si l'IP d'origine ne correspond à aucune de ces IP, l'action par défaut consisterait également à le bloquer, provoquant un DoS.

**Web ACL original**:
```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"
}
```
Commande pour mettre à jour le 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
```
Le fichier **rule.json** ressemblerait à :
```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"
}
}
]
```
**Impact potentiel** : Accès non autorisé, violations de données et attaques potentielles par déni de service (DoS).

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

La permission **`wafv2:AssociateWebACL`** permettrait à un attaquant d'associer des ACL web (Listes de Contrôle d'Accès) avec des ressources, pouvant contourner les contrôles de sécurité, permettant à un trafic non autorisé d'atteindre l'application, ce qui pourrait conduire à des exploits comme l'injection SQL ou le cross-site scripting (XSS). Inversement, avec la permission **`wafv2:DisassociateWebACL`**, l'attaquant pourrait désactiver temporairement les protections de sécurité, exposant les ressources à des vulnérabilités sans détection.

Des permissions supplémentaires seraient nécessaires en fonction du type de ressource protégée :

- **Associer**
- apigateway:SetWebACL
- apprunner:AssociateWebAcl
- appsync:SetWebACL
- cognito-idp:AssociateWebACL
- ec2:AssociateVerifiedAccessInstanceWebAcl
- elasticloadbalancing:SetWebAcl
- **Dissocier**
- 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>
```
**Impact potentiel** : Sécurité des ressources compromise, risque accru d'exploitation et interruptions potentielles de service au sein des environnements AWS protégés par AWS WAF.

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

Un attaquant pourrait créer, mettre à jour et supprimer les ensembles d'IP gérés par AWS WAF. Cela pourrait être dangereux car il pourrait créer de nouveaux ensembles d'IP pour autoriser le trafic malveillant, modifier des ensembles d'IP afin de bloquer le trafic légitime, mettre à jour des ensembles d'IP existants pour inclure des adresses IP malveillantes, supprimer des adresses IP de confiance ou supprimer des ensembles d'IP critiques destinés à protéger des ressources critiques.
```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>
```
L'exemple suivant montre comment **écraser l'ensemble d'IP existant par l'ensemble d'IP souhaité** :
```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
```
**Impact potentiel** : Accès non autorisé et blocage du trafic légitime.

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

Un attaquant disposant de ces autorisations pourrait manipuler les ensembles de motifs d'expressions régulières utilisés par AWS WAF pour contrôler et filtrer le trafic entrant en fonction de motifs spécifiques.

- La création de nouveaux motifs regex aiderait un attaquant à autoriser du contenu nuisible
- En mettant à jour les motifs existants, un attaquant pourrait contourner les règles de sécurité
- La suppression de motifs conçus pour bloquer les activités malveillantes pourrait permettre à un attaquant d'envoyer des charges utiles malveillantes et de contourner les mesures de sécurité.
```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>
```
**Impact potentiel** : Contourner les contrôles de sécurité, permettant à un contenu malveillant de passer et exposant potentiellement des données sensibles ou perturbant des services et des ressources protégés par AWS WAF.

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

Un attaquant avec le **`wafv2:DeleteLoggingConfiguration`** serait capable de supprimer la configuration de journalisation de l'ACL Web spécifié. Par la suite, avec les permissions **`wavf2:PutLoggingConfiguration`** et **`iam:CreateServiceLinkedRole`**, un attaquant pourrait créer ou remplacer des configurations de journalisation (après l'avoir supprimée) pour soit empêcher complètement la journalisation, soit rediriger les journaux vers des destinations non autorisées, telles que des buckets Amazon S3, un groupe de journaux Amazon CloudWatch Logs ou un Amazon Kinesis Data Firehose sous contrôle.

Lors du processus de création, le service configure automatiquement les permissions nécessaires pour permettre l'écriture des journaux à la destination de journalisation spécifiée :

- **Amazon CloudWatch Logs :** AWS WAF crée une politique de ressource sur le groupe de journaux CloudWatch Logs désigné. Cette politique garantit qu'AWS WAF dispose des permissions requises pour écrire des journaux dans le groupe de journaux.
- **Bucket Amazon S3 :** AWS WAF crée une politique de bucket sur le bucket S3 désigné. Cette politique accorde à AWS WAF les permissions nécessaires pour télécharger des journaux dans le bucket spécifié.
- **Amazon Kinesis Data Firehose :** AWS WAF crée un rôle lié au service spécifiquement pour interagir avec Kinesis Data Firehose. Ce rôle permet à AWS WAF de livrer des journaux au flux Firehose configuré.

> [!NOTE]
> Il est possible de définir une seule destination de journalisation par ACL Web.
```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>]
```
**Impact potentiel :** Obscurcir la visibilité sur les événements de sécurité, rendre le processus de réponse aux incidents difficile et faciliter des activités malveillantes discrètes au sein des environnements protégés par AWS WAF.

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

Un attaquant avec ces permissions serait capable de supprimer des clés API existantes, rendant le CAPTCHA inefficace et perturbant la fonctionnalité qui en dépend, comme les soumissions de formulaires et les contrôles d'accès. Selon l'implémentation de ce CAPTCHA, cela pourrait conduire soit à un contournement du CAPTCHA, soit à un DoS si la gestion des erreurs n'est pas correctement configurée dans la ressource.
```bash
# Delete API key
aws wafv2 delete-api-key --api-key <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
```
**Impact potentiel** : Désactiver les protections CAPTCHA ou perturber la fonctionnalité de l'application, entraînant des violations de sécurité et un vol potentiel de données.

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

Un attaquant pourrait ajouter, modifier ou supprimer des balises des ressources AWS WAFv2, telles que les ACL Web, les groupes de règles, les ensembles d'IP, les ensembles de motifs regex et les configurations de journalisation.
```bash
# Tag
aws wafv2 tag-resource --resource-arn <value> --tags <value>
# Untag
aws wafv2 untag-resource --resource-arn <value> --tag-keys <value>
```
**Impact potentiel** : falsification des ressources, fuite d'informations, manipulation des coûts et perturbation opérationnelle.

## Références

- [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}}
