
Une vulnérabilité de cross-site scripting (XSS) stocké dans la fonctionnalité d'articles de blog d'ERPNEXT v15.67.0 permet aux attaquants d'exécuter des scripts web ou du HTML arbitraires via une charge utile spécialement conçue injectée dans le champ contenu.
📌 Résumé
Une vulnérabilité de Cross‑Site Scripting (XSS) stocké existe dans le module Blog d'ERPNext (v15.67.0) / Frappe (v15.72.4). Un utilisateur authentifié pouvant créer ou modifier des articles de blog peut injecter du HTML/JavaScript malveillant dans le champ content. Cette charge utile est stockée et s'exécutera dans le navigateur de tout utilisateur consultant la page de l'article de blog, permettant l'exécution de scripts arbitraires, la divulgation d'informations, le déni de service et d'autres attaques côté client. Les privilèges d'administrateur ne sont pas strictement requis — tout utilisateur disposant de la permission de créer/modifier des articles de blog peut l'exploiter.
Type de vulnérabilité : Cross‑Site Scripting stocké (CWE‑79)
Produit(s) concerné(s) : ERPNext / Frappe
Versions concernées (signalées) :
Composant concerné : Module Blog d'ERPNext
Route : /app/blog-post/<blog_name>
(formulaire de création / modification d'article de blog)
contentType d'attaque : À distance (nécessite une authentification et des privilèges de création d'articles de blog)
Sévérité : Élevée (exécution de code côté client, vol de données, possibilité de détournement de session)
Score CVSS v3.1 estimé : 7.5 (Élevé) — estimation ; l'assignateur officiel doit calculer le score final
Statut : Non corrigé (tel que signalé)
Découvert par : Mohammed Aloli
Date de découverte : Non spécifiée
Identifiant CVE : CVE-2025-56379
À tester uniquement dans des environnements autorisés / de laboratoire. Ne l'exécutez PAS contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test.
Étapes de reproduction
Authentifiez-vous sur l'instance ERPNext cible en tant qu'utilisateur disposant de la permission de créer/modifier des articles de blog.
Accédez à la route de création/modification d'un article de blog, par exemple :
/app/blog-post/<blog_name>
Dans le champ content, insérez la charge utile et enregistrez l'article :
Ouvrez la page de l'article de blog (/app/blog-post/<blog_name>) en tant qu'autre utilisateur (ou le même utilisateur dans un navigateur vierge). La charge utile s'exécute dans le navigateur du visiteur (ici, alert("xss")).
Remarques : la PoC utilise une simple alerte onerror. De véritables attaques pourraient exfiltrer des cookies, effectuer des actions au nom de la victime ou charger des scripts distants (selon la CSP et les attributs des cookies).
Un attaquant pouvant créer ou modifier des articles de blog stocke un script malveillant dans le champ content. Tout utilisateur — y compris les administrateurs — qui visite la page de l'article de blog exécutera le script de l'attaquant dans le contexte de son navigateur. Les conséquences incluent le vol de session (si les cookies ne sont pas HttpOnly), des actions forcées dans la session de la victime, l'exfiltration de données depuis les pages accessibles à l'attaquant, des attaques de redressing d'interface (UI redress) et un déni de service potentiel des composants côté client.
content à l'entrée et/ou échappez-le à la sortie à l'aide d'un assainisseur HTML sécurisé qui supprime les balises et attributs dangereux (supprimez les attributs on*, les URI javascript:, <script>, ``, etc.). Privilégiez des bibliothèques bien maintenues.<p>, <b>, <i>, <ul>, <li>, <a href> avec une validation stricte du href). Interdisez les gestionnaires d'événements inline.'unsafe-inline', utilisez des autorisations de scripts basées sur nonce/hash si nécessaire).HttpOnly et définissez les attributs SameSite appropriés pour réduire le vol de cookies et les risques de type CSRF.https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.htmlauteur : Mohammed Aloli
Ce rapport est destiné uniquement à des fins de défense, de remédiation et de sensibilisation. Ne tentez pas d'exploiter cette vulnérabilité contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test. Si vous utilisez ERPNext/Frappe, appliquez les correctifs, renforcez l'assainissement et suivez les recommandations d'atténuation ci-dessus.