Avis de sécurité de Hong Kong XSS dans AddFunc (CVE20262305)

Cross Site Scripting (XSS) dans le plugin AddFunc Head & Footer Code de WordPress





AddFunc Head & Footer Code XSS (CVE-2026-2305) — What WordPress Site Owners Need to Know


Nom du plugin Ajouter le code d'en-tête et de pied de page AddFunc
Type de vulnérabilité Script intersite (XSS)
Numéro CVE CVE-2026-2305
Urgence Faible
Date de publication CVE 2026-04-10
URL source CVE-2026-2305

Code d'en-tête et de pied de page AddFunc XSS (CVE-2026-2305) : Ce que les propriétaires de sites WordPress doivent savoir

Date : 10 avril 2026 — Gravité : Faible (CVSS 6.5) — Versions affectées : ≤ 2.3 — Corrigé dans : 2.4 — Privilège requis : Contributeur (authentifié)

Résumé : Un problème de script intersite stocké authentifié (XSS) dans le code d'en-tête et de pied de page AddFunc (versions jusqu'à 2.3) permet à un utilisateur de niveau contributeur de sauvegarder des charges utiles de type script via des champs personnalisés qui peuvent ensuite être rendus non assainis. Cette note fournit une analyse pragmatique et axée sur les praticiens des risques, de la détection, du nettoyage et des étapes d'atténuation du point de vue d'un expert en sécurité basé à Hong Kong.

Résumé exécutif — ce qui s'est passé et pourquoi cela compte

  • Le plugin permettait au contenu fourni par l'utilisateur dans les champs personnalisés des publications d'être inclus dans la sortie sans assainissement ou échappement suffisant.
  • Un utilisateur authentifié avec des privilèges de Contributeur (capable de créer ou d'éditer des publications et d'ajouter des champs personnalisés) pouvait sauvegarder du contenu contenant des balises script ou des gestionnaires d'événements.
  • Si ce contenu est ensuite rendu sur le front-end ou dans les écrans d'administration sans échappement approprié, le script stocké s'exécute dans le navigateur du spectateur.
  • L'impact dépend du contexte de rendu :
    • L'exécution sur le front-end peut affecter les visiteurs (redirections malveillantes, usurpation de formulaires, injection de crypto‑mineurs, manipulation de contenu).
    • L'exécution dans les pages d'administration peut cibler des utilisateurs ayant des privilèges plus élevés et conduire à une prise de contrôle de compte, des modifications de paramètres, des modifications de plugins/thèmes ou des portes dérobées.
  • Le plugin a été corrigé dans la version 2.4. La mise à jour vers 2.4+ est la remédiation correcte et principale.

Pourquoi un Contributeur peut être dangereux — modèle de menace du monde réel

Les propriétaires de sites supposent souvent que les Contributeurs présentent un faible risque car ils ne peuvent pas publier. C'est vrai pour les flux de travail de publication, mais les Contributeurs peuvent généralement créer des publications, éditer des brouillons et ajouter des champs personnalisés (configuration du site permettant). Le XSS stocké dans les champs personnalisés est dangereux car la charge utile est persistante et s'exécutera chaque fois qu'elle sera rendue sans échappement.

Points clés :

  • Persistance : le contenu malveillant est stocké dans la base de données et peut être déclenché plus tard.
  • Amplification des privilèges : si des utilisateurs administrateurs consultent le contenu infecté dans le tableau de bord, un attaquant peut pivoter en utilisant la session authentifiée de l'administrateur.
  • Les vecteurs d'attaque réels incluent CSRF combiné avec XSS pour effectuer des actions privilégiées (créer des comptes administrateurs, changer des options, installer du code).

Flux d'exploitation typique (niveau élevé, non actionnable)

  1. L'attaquant enregistre ou compromet un compte de contributeur.
  2. L'attaquant sauvegarde un article ou un brouillon et injecte du contenu malveillant dans un champ personnalisé (par exemple, ou des charges utiles d'attributs telles que onerror=…).
  3. Le contenu est stocké dans postmeta.
  4. Lorsque le post est rendu dans un contexte qui affiche le champ non assaini (front-end, aperçu admin, boîte méta), le navigateur exécute le JavaScript.
  5. Si un administrateur consulte l'écran admin affecté, le script peut effectuer des actions privilégiées en utilisant la session de l'administrateur (exfiltrer des cookies, créer des utilisateurs admin, modifier des fichiers, installer des portes dérobées).

Certains avis indiquent “Interaction de l'utilisateur requise” — en pratique, l'interaction peut être aussi simple que d'ouvrir l'éditeur de post ou un lien d'aperçu conçu.

Étapes pratiques pour protéger votre site — actions immédiates (liste de contrôle)

  1. Mettez à jour le plugin — Si vous utilisez le code d'en-tête et de pied de page AddFunc, mettez à jour vers 2.4 ou une version ultérieure immédiatement. C'est la correction canonique.
  2. Si vous ne pouvez pas mettre à jour immédiatement
    • Supprimez temporairement ou désactivez le plugin.
    • Interdisez aux contributeurs d'ajouter ou de modifier des champs personnalisés jusqu'à ce qu'un correctif soit appliqué.
    • Appliquez un patch virtuel au niveau du WAF si vous avez cette capacité (voir les conseils WAF ci-dessous).
  3. Scannez à la recherche de contenu malveillant dans les champs personnalisés

    Utilisez WP-CLI ou des requêtes DB directes (avec une sauvegarde) pour trouver des valeurs méta contenant

  4. Audit user accounts — Verify Contributors and Editors; remove stale or suspicious accounts. Enforce strong passwords and 2FA for privileged roles.
  5. Check for signs of compromise — unknown admin accounts, unexpected plugin/theme files, modified files, scheduled tasks, or outbound connections.
  6. Rotate credentials if compromise is suspected — reset admin passwords, revoke API keys, and invalidate sessions.
  7. Backup before cleanup — take a full files+DB backup before making remediation changes to preserve evidence and allow rollback.
  8. Harden custom fields — require sanitization on save and escaping on output (see developer guidance below).

How to find malicious stored XSS entries safely

Always work from a full backup and start with read-only queries to identify suspicious entries, then review them manually.

# Find postmeta that contains