CVE-2026-35534ChurchCRM是一个开源的教堂管理系统。在7.1.0版本之前,PersonView.php中存在存储型跨站脚本(XSS)漏洞。由于错误地将sanitizeText()用于HTML属性上下文的输出转义,该函数仅剥离HTML标签但不转义引号,导致攻击者可跳出href属性并注入任意JavaScript事件处理器。拥有EditRecords角色的任何经过身份验证的用户都可以在人员的Facebook字段中存储载荷。该XSS针对查看该人员资料页面的任何用户(包括管理员)触发,从而实现会话劫持和完全的账户接管。
该漏洞的核心在于ChurchCRM系统对用户输入的输出编码机制存在设计缺陷。在PersonView.php文件中,系统负责渲染个人资料信息,其中包含一个指向用户Facebook主页的链接。开发者使用了sanitizeText()函数来处理存储在数据库中的Facebook字段数据,并将其输出到HTML标签的href属性中。然而,sanitizeText()函数的实现逻辑仅涉及剥离HTML标签(例如将<script>移除),却忽略了HTML属性上下文中的特殊字符转义,特别是引号(" 或 ')。这意味着攻击者可以输入一个双引号来闭合原本的href属性值,随后插入恶意的JavaScript事件处理器(如onmouseover、onload等)。由于这是一个存储型XSS,攻击者只需拥有EditRecords角色的低权限账号,即可将恶意载荷持久化写入数据库。当具有更高权限(如管理员)的用户浏览该被篡改的个人资料页面时,载荷会在浏览器端解析并执行,攻击者借此窃取Session ID,实现完全的账户接管。此类漏洞绕过了传统的标签过滤机制,具有极高的隐蔽性和危险性。