| Nom du plugin | Plugin Yoast SEO de WordPress |
|---|---|
| Type de vulnérabilité | Script intersite (XSS) |
| Numéro CVE | CVE-2026-3427 |
| Urgence | Faible |
| Date de publication CVE | 2026-03-23 |
| URL source | CVE-2026-3427 |
Yoast SEO (<= 27.1.1) XSS stocké (CVE-2026-3427) — Guide pratique pour les propriétaires et administrateurs de sites WordPress
TL;DR
Une vulnérabilité de Cross-Site Scripting (XSS) stockée dans les versions de Yoast SEO jusqu'à et y compris 27.1.1 (CVE-2026-3427) permet à un utilisateur authentifié avec des privilèges de contributeur de sauvegarder du contenu (par exemple dans un attribut de bloc nommé jsonText) qui peut ensuite exécuter JavaScript dans le navigateur d'un éditeur ou d'un administrateur qui consulte ou modifie ce contenu. Le correctif est inclus dans Yoast SEO 27.2. Appliquez le correctif rapidement ; si un correctif immédiat n'est pas possible, appliquez des contrôles compensatoires, recherchez du contenu suspect et limitez les capacités des contributeurs.
What’s the vulnerability?
- A stored XSS exists in Yoast SEO versions ≤ 27.1.1.
- Le problème est déclenché via le
jsonTextattribut utilisé par un bloc (Gutenberg) ou d'autres contenus sauvegardés : du HTML non échappé peut être persistant et exécuté ultérieurement dans un contexte de navigateur d'administrateur/éditeur. - Prérequis d'exploitation : un utilisateur authentifié de niveau contributeur pour stocker la charge utile, et un éditeur/admin pour ouvrir ou modifier le contenu affecté (interaction de l'utilisateur requise).
- Corrigé dans Yoast SEO 27.2 — les sites fonctionnant avec des versions antérieures sont vulnérables jusqu'à leur mise à jour.
Pourquoi cela importe — évaluation des risques pratique
Le XSS stocké est persistant et s'exécute dans le contexte de sécurité des utilisateurs de confiance. Pour les organisations et les équipes éditoriales basées à Hong Kong qui s'appuient sur des flux de travail collaboratifs, les conséquences peuvent être matérielles :
- Compromission de compte des sessions d'éditeur/admin (vol de cookies, capture de jetons).
- Actions administratives non autorisées : création de comptes, modification de plugins/thèmes, changement d'options de site.
- Défiguration de site, injection de spam SEO, redirections ou exfiltration de données discrète.
Contraintes qui réduisent le risque : un attaquant a besoin d'un compte de contributeur (ou équivalent), et un utilisateur privilégié doit ouvrir le contenu. Néanmoins, de nombreux sites acceptent des contributeurs ou ont des flux de travail multi-auteurs — ne supposez pas la sécurité.
Flux d'attaque réaliste
- L'attaquant obtient ou crée un compte de contributeur (inscription, identifiants volés, ingénierie sociale).
- Le contributeur crée/modifie un post ou un bloc en intégrant un payload dans un
jsonTextattribut qui inclut JavaScript (par exemple,or event handlers). - Payload is stored in the database as post content or block attribute.
- An Editor/Admin opens the post in the block editor; the script runs in their browser.
- Malicious script performs actions (modify site options, create admin users, exfiltrate cookies, install backdoors).
- Attacker uses stolen session tokens to achieve persistent administrative access.
Immediate actions (first 24 hours)
If you operate WordPress sites running Yoast SEO ≤ 27.1.1, perform these steps immediately and in order:
- Patch: Update Yoast SEO to 27.2 or later as soon as possible. This is the primary mitigation.
- When you cannot update immediately:
- Restrict or temporarily suspend Contributor publishing rights.
- Disable access to the block editor for high-privilege accounts from untrusted networks where practical.
- Deploy detection/blocking rules on your perimeter WAF (virtual patch) to catch suspicious payloads in
jsonTextor editor POSTs.
- Audit recent content: Review posts/pages and revisions created by Contributors in the last 30–90 days for suspicious HTML or JS.
- Credential hygiene: Rotate passwords for admin/editor accounts and enable multi-factor authentication where available.
- Backups: Create a fresh backup of database and files before performing intrusive changes.
How to hunt for suspicious content (practical queries)
Run these safe, non-destructive searches against a backup or staging copy where possible.
Search for script tags in post content:
SELECT ID, post_title, post_author, post_date
FROM wp_posts
WHERE post_content LIKE '%
Search for posts or content containing jsonText:
SELECT p.ID, p.post_title, p.post_author, p.post_date, p.post_content
FROM wp_posts p
WHERE p.post_content LIKE '%jsonText%';
Search for jsonText in postmeta:
SELECT post_id, meta_key, meta_value
FROM wp_postmeta
WHERE meta_value LIKE '%jsonText%';
Find revisions created by contributors in the last 30 days (adjust roles detection as needed):
SELECT p.ID, p.post_title, p.post_author, p.post_date
FROM wp_posts p
JOIN wp_users u ON p.post_author = u.ID
WHERE p.post_type = 'revision'
AND p.post_date >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND u.roles LIKE '%contributor%';
WP-CLI approach (example):
# Search for