
Una vulnerabilidad de cross-site scripting (XSS) almacenado en la función de publicaciones de blog de ERPNEXT v15.67.0 permite a los atacantes ejecutar scripts web o HTML arbitrarios mediante un payload manipulado inyectado en el campo de contenido.
📌 Resumen
Existe una vulnerabilidad de Cross‑Site Scripting (XSS) almacenado en el módulo Blog de ERPNext (v15.67.0) / Frappe (v15.72.4). Un usuario autenticado que pueda crear o editar publicaciones de blog puede inyectar HTML/JavaScript manipulado en el campo content. Esa carga útil se almacena y se ejecutará en el navegador de cualquier usuario que vea la página de la publicación del blog, lo que permite la ejecución arbitraria de scripts, la divulgación de información, la denegación de servicio y otros ataques del lado del cliente. Los privilegios de administrador no son estrictamente necesarios: cualquier usuario con permiso para crear/editar publicaciones de blog puede explotarla.
Tipo de vulnerabilidad: Cross‑Site Scripting almacenado (CWE‑79)
Producto(s) afectado(s): ERPNext / Frappe
Versiones afectadas (reportadas):
Componente afectado: Módulo Blog de ERPNext
Ruta: /app/blog-post/<blog_name>
Campo vulnerable: content (formulario de creación/edición de publicaciones de blog)
Tipo de ataque: Remoto (requiere autenticación y privilegios de creación de publicaciones de blog)
Severidad: Alta (ejecución de código del lado del cliente, robo de datos, posible secuestro de sesión)
Puntuación CVSS v3.1 estimada: 7.5 (Alta) — estimación; el asignador autoritativo debe calcular la puntuación final
Estado: Sin corregir (según lo reportado)
Descubierto por: Mohammed Aloli
Fecha de descubrimiento: No especificada
ID de CVE: CVE-2025-56379
Solo pruébelo en entornos autorizados / de laboratorio. NO lo ejecute contra sistemas que no le pertenezcan o para los que no tenga permiso explícito para probar.
Pasos para reproducir
Autentíquese en la instancia ERPNext objetivo como un usuario con permiso para crear/editar publicaciones de blog.
Navegue a la ruta de creación/edición de publicaciones de blog para un blog, por ejemplo:
/app/blog-post/<blog_name>
En el campo content, inserte la carga útil y guarde la publicación:
Abra la página de la publicación del blog (/app/blog-post/<blog_name>) como otro usuario (o el mismo usuario en un navegador nuevo). La carga útil se ejecuta en el navegador del espectador (aquí, alert("xss")).
Notas: el PoC usa una alerta onerror simple. Los ataques reales podrían exfiltrar cookies, realizar acciones en nombre de la víctima o cargar scripts remotos (sujeto a la CSP y a los indicadores de cookies).
Un atacante que pueda crear o editar publicaciones de blog almacena un script malicioso en el campo content. Cualquier usuario — incluidos los administradores — que visite la página de la publicación del blog ejecutará el script del atacante en el contexto de su navegador. Las consecuencias incluyen el robo de sesión (si las cookies no son HttpOnly), acciones forzadas en la sesión de la víctima, exfiltración de datos de páginas a las que el atacante puede acceder, ataques de redress de la interfaz de usuario y posible denegación de servicio de los componentes del lado del cliente.
content en la entrada y/o escápelo en la salida usando un sanitizador HTML seguro que elimine etiquetas y atributos peligrosos (elimine los atributos on*, las URI javascript:, <script>, ``, etc.). Prefiera bibliotecas bien mantenidas.<p>, <b>, <i>, <ul>, <li>, <a href> con validación estricta de href). No permita manejadores de eventos en línea.'unsafe-inline', use permisos de scripts basados en nonce/hash cuando sea necesario).https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.htmlautor : Mohammed Aloli
Este informe está destinado únicamente a fines defensivos, de remediación y de concientización. No intente explotar esta vulnerabilidad contra sistemas que no le pertenezcan o para los que no tenga autorización explícita para probar. Si opera ERPNext/Frappe, aplique las correcciones, imponga la sanitización y siga las recomendaciones de mitigación anteriores.
HttpOnly y establezca los atributos SameSite adecuados para reducir el robo de cookies y los riesgos similares a CSRF.