📌 摘要
ERPNext(v15.67.0)/ Frappe(v15.72.4)的博客模块中存在一个存储型跨站脚本(XSS)漏洞。可以创建或编辑博客文章的身份验证用户可以在 content 字段中注入精心构造的 HTML/JavaScript。该负载会被存储,并在任何查看博客文章页面的用户的浏览器中执行,从而允许任意脚本执行、信息泄露、拒绝服务和其他客户端攻击。管理员权限并非严格要求——任何有权创建/编辑博客文章的用户均可利用该漏洞。
漏洞类型: 存储型跨站脚本(CWE-79)
受影响产品: ERPNext / Frappe
报告的受影响版本:
受影响组件: ERPNext 博客模块
路由: /app/blog-post/<blog_name>
易受攻击字段: content(博客文章创建/编辑表单)
攻击类型: 远程(需要身份验证和博客文章创建权限)
严重性: 高(客户端代码执行、数据窃取、会话劫持可能性)
估算的 CVSS v3.1 评分: 7.5(高) — 估算值;最终评分应由权威评估方计算
状态: 未修复(按报告所述)
发现者: Mohammed Aloli
发现日期: 未指定
CVE ID: CVE-2025-56379
仅在授权/实验室环境中测试。请勿针对您不拥有或未经明确许可测试的系统运行。
复现步骤
以具有创建/编辑博客文章权限的用户身份对目标 ERPNext 实例进行身份验证。
导航到博客文章的创建/编辑路由,例如:
/app/blog-post/<blog_name>
在 content 字段中插入负载并保存文章:
以另一个用户(或同一用户在新浏览器中)打开博客文章页面(/app/blog-post/<blog_name>)。负载会在查看者的浏览器中执行(此处为 alert("xss"))。
备注: 该 PoC 使用简单的 onerror 警报。真实攻击可能窃取 cookie、代表受害者执行操作或加载远程脚本(取决于 CSP 和 cookie 标志)。
能够创建或编辑博客文章的攻击者在 content 字段中存储恶意脚本。任何访问博客文章页面的用户(包括管理员)都会在其浏览器上下文中执行攻击者的脚本。后果包括会话窃取(如果 cookie 未设置 HttpOnly)、在受害者会话中强制执行操作、从攻击者可访问的页面中窃取数据、UI 伪装攻击以及客户端组件潜在的拒绝服务。
content HTML 和/或在输出时进行转义,使用安全的 HTML 净化器移除危险标签和属性(移除 on* 属性、javascript: URI、<script>、`` 等)。优先使用维护良好的库。<p>、<b>、<i>、<ul>、<li>、经严格 href 验证的 <a href>)。禁止内联事件处理器。'unsafe-inline'、必要时使用基于 nonce/哈希的脚本许可)。HttpOnly,并设置适当的 SameSite 属性以减少 cookie 窃取和类 CSRF 风险。https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html作者 : Mohammed Aloli
本文档仅供防御、修复和意识提升之用。请勿针对您不拥有或未经明确授权测试的系统尝试利用此漏洞。如果您运营 ERPNext/Frappe,请应用修复程序、强制执行净化,并遵循上述缓解指南。