| Nom du plugin | Constructeur de pages WPBakery |
|---|---|
| Type de vulnérabilité | XSS stocké |
| Numéro CVE | CVE-2025-11161 |
| Urgence | Faible |
| Date de publication CVE | 2025-10-15 |
| URL source | CVE-2025-11161 |
WPBakery Page Builder (≤ 8.6.1) — XSS stocké via le shortcode vc_custom_heading (CVE-2025-11161)
Résumé — Une vulnérabilité de Cross-Site Scripting (XSS) stockée (CVE-2025-11161) affectant les versions de WPBakery Page Builder jusqu'à et y compris 8.6.1 a été publiée. Elle permet à un utilisateur de niveau contributeur d'injecter un script/HTML persistant via le
vc_custom_headingshortcode. Le problème a été corrigé dans la version 8.7 de WPBakery. Si vous ne pouvez pas mettre à jour immédiatement, une réponse bien conçue et un durcissement du contenu ou des mesures de patch virtuel peuvent atténuer le risque d'exploitation.
Introduction
Si vous gérez des sites WordPress utilisant WPBakery Page Builder, cet avis est pertinent. Ce rapport est rédigé du point de vue d'un praticien de la sécurité basé à Hong Kong pour expliquer le risque, l'impact probable, les approches de détection et les étapes pratiques pour protéger vos sites. Les conseils ci-dessous sont pragmatiques et axés sur les actions que les propriétaires de sites, les administrateurs et les opérateurs techniques peuvent prendre rapidement.
La vulnérabilité en une phrase
- Vulnérabilité : Cross-Site Scripting (XSS) stocké via le
vc_custom_headingshortcode. - Produit : WPBakery Page Builder (plugin).
- Versions affectées : ≤ 8.6.1
- Corrigé dans : 8.7
- CVE : CVE-2025-11161
- CVSS signalé : 6.5 (modéré)
- Privilège requis : Contributeur (capable de créer ou d'éditer du contenu)
Qu'est-ce que le XSS stocké et pourquoi cela importe
Le Cross-Site Scripting (XSS) permet à un attaquant d'injecter du JavaScript ou du contenu actif qui s'exécute dans le navigateur des visiteurs ou des administrateurs du site. Le XSS stocké (persistant) signifie que l'entrée malveillante est enregistrée sur le serveur — par exemple à l'intérieur du contenu des publications, des shortcodes ou des métadonnées — et s'exécute chaque fois qu'une page contenant la charge utile est consultée.
Les conséquences du XSS stocké peuvent inclure :
- Vol de session (si les cookies ou les jetons sont accessibles au script)
- Élévation de privilèges via des actions automatisées effectuées dans le contexte d'un utilisateur authentifié
- Défiguration de contenu, redirections malveillantes ou livraison de contenu de phishing/malware
- Abus pour injection publicitaire, empoisonnement SEO ou compromission plus large du site
Les spécificités de ce problème WPBakery
Public advisories indicate WPBakery Page Builder’s handling of the vc_custom_heading shortcode permettait de stocker du HTML ou des attributs non fiables et de les rendre ensuite sans une sanitation adéquate. Un utilisateur de niveau contributeur pouvait créer un contenu de shortcode incluant un balisage malveillant ou des attributs d'événement que le plugin n'a pas réussi à sanitiser ou encoder correctement avant la sortie.
- Exploitabilité : l'accès de niveau contributeur est suffisant sur les sites affectés.
- Persistance : les charges utiles sont stockées dans le contenu et restent jusqu'à ce qu'elles soient supprimées ou sanitizées.
- Correction : un correctif en amont dans WPBakery 8.7 corrige le comportement de sanitation/rendu.
Scénarios d'exploitation à considérer
- Contributeur malveillant ou compte de contributeur compromis : un attaquant soumet un post avec
vc_custom_headingcontenant un balisage malveillant. Les visiteurs et le personnel visualisant le post exécutent le script injecté. - Éditeur/admin compromis via ingénierie sociale : convaincre un éditeur de prévisualiser le contenu peut déclencher une charge utile.
- Analyse automatisée et injection de masse : des acteurs opportunistes scannent les installations de WPBakery et injectent des charges utiles pour monétiser ou étendre l'accès.
- Rendu de thème ou de modèle : les modèles ou widgets qui rendent des shortcodes sur l'ensemble du site peuvent exposer de nombreuses pages à la charge utile.
Facteurs de risque qui augmentent la probabilité
- Autoriser la publication de contributeurs externes sans révision stricte.
- Exécution de versions de plugin ≤ 8.6.1.
- Absence de contrôles de réponse qui inspectent le contenu entrant ou le HTML sortant.
- Identifiants administratifs faibles et absence d'authentification multi-facteurs.
Étapes immédiates pour protéger votre site (liste de contrôle courte)
- Mettez à jour WPBakery Page Builder vers 8.7 (ou la dernière version) dès que possible.
- Si vous ne pouvez pas mettre à jour immédiatement :
- Appliquez des mesures d'inspection du contenu pour bloquer ou assainir
vc_custom_headingles soumissions et le rendu en front-end de contenu semblable à des scripts dans les attributs. - Restreignez les capacités des contributeurs — exigez une révision par un éditeur ou désactivez la publication des contributeurs.
- Examinez les publications récentes, les révisions et les titres personnalisés pour des balises inattendues telles que
,on*attributes,javascript:,data:URIs, or suspicious base64 payloads.
- Appliquez des mesures d'inspection du contenu pour bloquer ou assainir
- Rotate credentials for accounts that may have authored recent content.
- Enforce two-factor authentication and strong password policies for admin/editor accounts.
- Monitor logs for suspicious POSTs to endpoints such as
post-new.php,post.php,admin-ajax.php, and REST endpoints that accept content.
Why updating to 8.7 is the canonical fix
The vendor patch in 8.7 changes how vc_custom_heading is sanitized and rendered. Updating removes the underlying coding error so the plugin does not output untrusted content. While updates do not automatically clean already-injected payloads in existing posts, they prevent further exploitation through the same vector.
If updating is delayed — response measures and virtual patching
Operational constraints (staging, testing, compatibility) may delay updates. In those cases, consider implementing content inspection and response-layer mitigations to reduce risk until you can patch:
- Block or challenge requests that attempt to submit content with suspicious shortcode payloads.
- Sanitize or neutralize dangerous attributes and tags on the response before serving pages that include
vc_custom_heading. - Remove or neutralize
on*event attributes,tags, and pseudo-protocols such asjavascript:ordata:URIs in rendered HTML.
Example virtual-patch rules (conceptual)
These patterns are illustrative and must be tested before deployment: