| 字段 | 详细信息 |
|---|---|
| CVE ID | CVE-2025-67875 |
| 严重性 | 高 |
| 公告 | 查看公告 |
| 发现者 | Lukasz Rybak |
ChurchCRM 6.3.0 及更早版本中存在一个严重的权限提升漏洞。拥有特定中等级别权限(“编辑记录”和“管理属性和分类”)的已认证用户可以向管理员个人资料中注入持久性跨站脚本(XSS)载荷。当管理员查看其个人资料页面时,该载荷就会执行,从而使攻击者能够劫持管理员的会话、执行管理操作并实现完全账户接管。
此漏洞是两种独立缺陷的组合:一种是不安全的直接对象引用(IDOR),允许任何用户查看任何其他用户的个人资料;另一种是失效的访问控制漏洞,允许拥有常规编辑权限的用户修改任何其他用户的记录属性。
攻击链如下:
PersonView.php 中的 IDOR: PersonView.php 的开头没有授权检查。任何已认证用户只需知道其他用户的 ID,即可查看其个人资料页面(例如,管理员的 PersonView.php?PersonID=1)。
PropertyAssign.php 中的失效的访问控制: 可从其他用户的 PersonView.php 页面访问的“分配新属性”功能会将用户引导至 PropertyAssign.php。该脚本正确地检查了用户是否拥有常规的 isEditRecordsEnabled() 权限,但未能执行对象级授权检查,以验证用户是否被允许编辑 URL 中传入的特定 PersonID。这允许拥有“编辑记录”权限的用户修改系统中任何人的属性,包括管理员。
存储型 XSS 向量: 攻击者可以利用这两个缺陷导航至管理员的个人资料页面,并使用“分配新属性”表单将恶意 XSS 载荷保存到管理员的记录中。基于文本的属性的 Value 字段在输入时未得到适当的清理(仅应用了 strip_tags,而它无法移除事件处理程序),并且在输出时也未进行编码,从而导致存储型 XSS。
src/PropertyAssign.php): 仅应用 strip_tags() 后即保存属性值,这允许 等事件处理程序属性存在。此概念验证(PoC)演示了拥有特定中等级别权限的用户如何向主管理员的个人资料中注入存储型 XSS 载荷。
前提条件:
编辑记录管理属性和分类场景:
PersonID=1。
http://localhost:8101/PersonView.php?PersonID=1
PersonView.php 中的 IDOR,访问被允许)。
PropertyAssign.php 中的失效的访问控制,此分配操作是可能的)。
PersonView.php?PersonID=1)时,载荷将立即执行,并出现一个警告框。攻击者可以使用更高级的载荷来窃取管理员的会话 Cookie。
这是一个严重的权限提升漏洞。它允许拥有特定提升(但非管理员)权限的用户完全控制管理员的账户。通过劫持管理员的会话,攻击者可以执行管理员可用的任何操作,包括创建新的管理员账户、删除数据,并有可能将此漏洞与其他漏洞链式利用,以实现对服务器的完全攻陷。
报告者:Łukasz Rybak
该 CVE 是遵循协调漏洞披露规范进行负责任披露的。此处提供的信息仅供教育和防御目的使用。
onerrorsrc/PersonView.php): 直接将存储的属性值渲染到 HTML 中,而未使用 htmlspecialchars(),从而导致载荷执行。
// src/PersonView.php, line ~722
<td><?= $r2p_Value ?></td> // Vulnerable: Raw output