
Una vulnerabilità di cross-site scripting (XSS) memorizzato nella funzionalità dei post del blog di ERPNEXT v15.67.0 consente agli aggressori di eseguire script web arbitrari o HTML tramite un payload appositamente costruito iniettato nel campo contenuto.
📌 Sommario
Una vulnerabilità di Cross‑Site Scripting (XSS) memorizzato è presente nel modulo Blog di ERPNext (v15.67.0) / Frappe (v15.72.4). Un utente autenticato che può creare o modificare post del blog può iniettare HTML/JavaScript appositamente predisposto nel campo content. Questo payload viene memorizzato e verrà eseguito nel browser di qualsiasi utente che visualizza la pagina del post del blog, consentendo l'esecuzione arbitraria di script, la divulgazione di informazioni, il denial of service e altri attacchi lato client. I privilegi di amministratore non sono strettamente necessari — qualsiasi utente con il permesso di creare/modificare post del blog può sfruttarla.
Tipo di vulnerabilità: Cross‑Site Scripting memorizzato (CWE‑79)
Prodotti interessati: ERPNext / Frappe
Versioni interessate (segnalate):
Componente interessato: Modulo Blog di ERPNext
Route: /app/blog-post/<blog_name>
Campo vulnerabile: content (modulo di creazione/modifica post del blog)
Tipo di attacco: Remoto (richiede autenticazione e privilegi di creazione dei post del blog)
Gravità: Alta (esecuzione di codice lato client, furto di dati, possibilità di dirottamento della sessione)
Punteggio CVSS v3.1 stimato: 7.5 (Alto) — stima; l'ente assegnatore ufficiale dovrebbe calcolare il punteggio finale
Stato: Non risolto (come da segnalazione)
Scoperta da: Mohammed Aloli
Data di scoperta: Non specificata
CVE ID: CVE-2025-56379
Testare solo in ambienti autorizzati / di laboratorio. NON eseguire contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test.
Passaggi per riprodurre
Autenticarsi all'istanza ERPNext di destinazione come utente con il permesso di creare/modificare post del blog.
Accedere alla route di creazione/modifica del post del blog, ad esempio:
/app/blog-post/<blog_name>
Nel campo content inserire il payload e salvare il post:
Aprire la pagina del post del blog (/app/blog-post/<blog_name>) come un altro utente (o lo stesso utente in un nuovo browser). Il payload viene eseguito nel browser di chi visualizza la pagina (in questo caso, alert("xss")).
Note: la PoC utilizza un semplice alert onerror. Gli attacchi reali potrebbero esfiltrare i cookie, eseguire azioni per conto della vittima o caricare script remoti (soggetti a CSP e flag dei cookie).
Un attaccante che può creare o modificare post del blog memorizza uno script dannoso nel campo content. Qualsiasi utente — inclusi gli amministratori — che visita la pagina del post del blog eseguirà lo script dell'attaccante nel contesto del proprio browser. Le conseguenze includono il furto di sessione (se i cookie non sono HttpOnly), azioni forzate nella sessione della vittima, l'esfiltrazione di dati da pagine accessibili all'attaccante, attacchi di UI redress e un potenziale DoS dei componenti lato client.
content in input e/o eseguire l'escape in output utilizzando un sanificatore HTML sicuro che rimuova tag e attributi pericolosi (rimuovere gli attributi on*, gli URI javascript:, <script>, ``, ecc.). Preferire librerie ben mantenute.<p>, <b>, <i>, <ul>, <li>, <a href> con una validazione rigorosa di href). Non consentire gestori di eventi inline.'unsafe-inline', utilizzare consentimenti per gli script basati su nonce/hash dove necessario).https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.htmlautore : Mohammed Aloli
Questo write-up è inteso esclusivamente a scopo difensivo, di remediation e di sensibilizzazione. Non tentare di sfruttare questa vulnerabilità contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test. Se gestisci ERPNext/Frappe, applica le correzioni, implementa la sanificazione e segui le indicazioni di mitigazione sopra riportate.
HttpOnly e impostare attributi SameSite appropriati per ridurre il furto di cookie e i rischi simili a CSRF.