| Nom du plugin | AMP Enhancer – Couche de compatibilité pour le plugin AMP officiel |
|---|---|
| Type de vulnérabilité | Script intersite (XSS) |
| Numéro CVE | CVE-2026-2027 |
| Urgence | Faible |
| Date de publication CVE | 2026-02-13 |
| URL source | CVE-2026-2027 |
XSS stocké authentifié (Administrateur) dans AMP Enhancer (≤1.0.49) : Ce que les propriétaires de sites WordPress doivent faire maintenant
Auteur : Expert en sécurité de Hong Kong — Publié : 2026-02-13
Une analyse pratique et experte de l'XSS stocké authentifié découvert dans le plugin AMP Enhancer (versions ≤1.0.49) : comment il peut être abusé, comment le détecter, et des mesures d'atténuation étape par étape — y compris un patch virtuel immédiat et des recommandations de durcissement à long terme.
Résumé
- Vulnérabilité : XSS (cross-site scripting) stocké authentifié (Administrateur).
- Logiciel affecté : AMP Enhancer — Couche de compatibilité pour le plugin AMP officiel, versions ≤1.0.49.
- CVE : CVE-2026-2027
- Gravité : Moyenne (évaluation du mainteneur CVSS 5.9). L'impact dans le monde réel dépend de l'accès de l'attaquant à un compte administrateur.
- Prérequis d'exploitation : Privilèges d'administrateur sur le site (ou convaincre un administrateur de sauvegarder un CSS malveillant).
- Atténuations immédiates : désactiver ou supprimer le plugin ; inspecter et assainir le paramètre stocké dans la base de données ; restreindre les comptes administrateurs ; appliquer des patches virtuels / règles WAF pour bloquer les charges utiles CSS malveillantes tout en préparant un nettoyage complet.
- Récupération : Si un compromis est suspecté, isoler le site, faire tourner les identifiants, scanner et supprimer le contenu injecté, et restaurer à partir d'une sauvegarde propre si nécessaire.
Pourquoi cet XSS stocké est important — même avec des exigences uniquement administratives
Bien que l'exploitation nécessite qu'un administrateur sauvegarde la charge utile, la surface d'attaque reste significative :
- Des identifiants administratifs volés ou phishés permettent un point d'accès persistant via XSS stocké.
- Des entrepreneurs malveillants ou des initiés avec accès administrateur peuvent intentionnellement injecter des charges utiles.
- L'ingénierie sociale peut tromper un administrateur en le faisant coller un CSS apparemment légitime contenant des charges utiles cachées.
Les conséquences possibles incluent le vol de session, les redirections sur l'ensemble du site, le poisoning SEO, l'injection de scripts backdoor, et des dommages à la réputation. Comme la charge utile est stockée dans une configuration et servie sur l'ensemble du site, une seule injection réussie peut affecter chaque visiteur et administrateur qui charge des pages affectées.
Comment le problème fonctionne (aperçu technique)
- The plugin provides an “AMP Custom CSS” setting where administrators can enter CSS for AMP pages.
- Le paramètre est conservé dans la base de données et ensuite renvoyé dans le balisage de la page pour la sortie AMP.
- Une sanitation insuffisante permet une entrée qui peut être interprétée par le navigateur comme exécutable ou capable de sortir du contexte CSS (par exemple, des constructions qui ferment un bloc de style ou introduisent du HTML).
- Comme le contenu est stocké et affiché aux visiteurs, le XSS est persistant (stocké) et s'exécute lors des vues de page suivantes.
Remarque : les navigateurs modernes et les bizarreries héritées peuvent transformer des séquences inattendues en actions exécutables lorsque des données contrôlées par l'utilisateur sont affichées sans encodage sécurisé.
Scénarios d'exploitation réalistes
- Identifiants d'administrateur volés : l'attaquant se connecte, colle du contenu malveillant dans le CSS personnalisé AMP, et la charge utile est servie aux visiteurs.
- Social engineering: admin is convinced to paste “recommended CSS” from an untrusted source that contains obfuscated payloads.
- Malveillant interne : un employé ou un sous-traitant avec un accès administrateur stocke une charge utile pour voler des données ou saboter le site.
Signes que vous pourriez déjà être affecté
- JavaScript ou fragments HTML en ligne inattendus dans le code source de la page ou à l'intérieur des styles.
- Pages du site redirigeant vers des domaines externes.
- Comportement inhabituel du tableau de bord ou notifications administratives inattendues.
- Nouveaux utilisateurs administrateurs ou inconnus, publications/pages modifiées que vous n'avez pas créées, tâches cron suspectes ou fichiers de base/thème/plugin modifiés.
- Avertissements des moteurs de recherche, mise sur liste noire ou modèles de trafic inhabituels.
Si vous utilisez une version affectée du plugin et remarquez ces signes, supposez un compromis potentiel et suivez immédiatement les étapes de confinement.
Étapes immédiates pour les propriétaires de sites (dans l'ordre)
- Mettez le site en mode maintenance ou réduisez l'exposition : restreignez temporairement l'accès public pendant l'enquête.
- Désactivez le plugin AMP Enhancer : la mitigation immédiate la plus simple est de désactiver ou de supprimer le plugin pour empêcher la diffusion de contenu stocké.
-
Inspectez et nettoyez le paramètre CSS personnalisé AMP :
- Vérifiez l'option du plugin où le CSS personnalisé est stocké (les clés courantes peuvent inclure
amp_custom_cssou des noms d'options spécifiques au plugin). - Si vous trouvez un contenu inattendu, supprimez-le ou définissez le champ sur une chaîne vide.
- Exemple WP-CLI :
wp option get amp_custom_csset pour effacer :wp option update amp_custom_css '' - Exemple d'inspection SQL (toujours faire une sauvegarde d'abord) :
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '%amp%' OR option_value LIKE '%javascript:%' OR option_value LIKE '% - Vérifiez l'option du plugin où le CSS personnalisé est stocké (les clés courantes peuvent inclure
-
Rotate credentials and lock admin access:
- Reset passwords for all administrator accounts and enforce strong, unique passwords.
- Require two-factor authentication for all admins where possible.
- Remove or downgrade unknown admin users.
- Review recent admin activity: check audit logs (if available) to identify who changed settings; enable logging if absent.
- Scan the site for other indicators: perform a full-site malware scan and inspect posts, options, theme files, and uploads for injected code.
- Review backups: if you detect a compromise and cannot clean confidently, restore from a known-good backup taken prior to the injection.
- Apply virtual patching / WAF rules as an interim measure: block suspicious payloads from being saved and prevent already-stored payloads from reaching clients (details below).
- Monitor and re-scan regularly after cleanup to detect reinfection or repeated malicious changes.
Finding the AMP Custom CSS entry (WP-CLI and SQL)
Examples to help locate suspect values (replace table prefix if not wp_):
# WP-CLI (if you know the option name)
wp option get amp_custom_css
# Scan options if unsure
wp db query "SELECT option_name FROM wp_options WHERE option_value LIKE '%amp%' OR option_value LIKE '%
Always export suspicious content to a safe environment for analysis before removing it from production.
Safe remediation of the stored setting
- Review CSS for dangerous constructs:
url(javascript:patternsexpression(...)(legacy IE)-moz-bindingorbehavior:properties- Embedded HTML fragments like
,, or event handlers likeonerror= - Data URIs with HTML or JavaScript (
data:text/html;)
- If unsure, clear the field completely and re-enter only minimal, reviewed CSS.
- Prefer moving critical styling into theme files under version control and reviewed by a developer rather than relying on untrusted admin-entered CSS.
Developer guidance: how to fix the plugin correctly
Plugin maintainers should use both strict input validation and safe output encoding:
-
Validate input at save time:
- Reject arbitrary HTML or constructs not valid in pure CSS fields.
- Implement a strict whitelist of allowed CSS properties and value formats rather than relying on blacklists.
- Block constructs such as
url(javascript:...),expression(...),-moz-binding,behavior:, and data URIs that embed HTML.
-
Sanitize or escape on output:
- When writing stored CSS into a page, ensure it cannot break out of a style context. Treat it as plain text and escape characters that could close the style block or start HTML.
- Use server-side escaping functions appropriate for content placed in
blocks. - Always enforce capability checks (e.g.,
current_user_can('manage_options')) and nonces on admin forms and saves.
- Use a vetted CSS sanitizer library or implement a strict whitelist approach and include unit tests to assert rejection of malicious sequences.
- Add automated tests and fuzzing to continuous integration to detect regressions and common XSS mutation vectors.
- Document how custom CSS is processed and warn administrators about pasting untrusted content.
WAF / virtual patching (generic guidance)
A Web Application Firewall (WAF) or response inspection layer is a valuable short-term mitigation while waiting for an official plugin update. Properly configured WAF rules can block attempts to save malicious CSS and prevent already-stored payloads from reaching clients.
Useful actions for a WAF or edge filter: