lukasz-rybak/CVE-2025-67875
GitHub: lukasz-rybak/CVE-2025-67875
一份利用 ChurchCRM IDOR 与访问控制绕过实现存储型 XSS 的 PoC 复现,聚焦管理员会话劫持场景。
Stars: 0 | Forks: 0
# CVE-2025-67875:ChurchCRM 通过人员属性赋值导致的存储型 XSS 漏洞,进而引发管理员会话劫持
## 概述
| 字段 | 详情 |
|---|---|
| **CVE ID** | [CVE-2025-67875](https://nvd.nist.gov/vuln/detail/CVE-2025-67875) |
| **严重性** | 高危 |
| ** advisory** | [查看 advisory](https://github.com/ChurchCRM/CRM/security/advisories/GHSA-fcw7-mmfh-7vjm) |
| **发现者** | [Lukasz Rybak](https://github.com/lukasz-rybak) |
## 影响产品
- **ChurchCRM/CRM**
## 详情
### 摘要
ChurchCRM 6.3.0 及更早版本中存在一个严重的权限提升漏洞。具备特定中级权限("编辑记录" 和 "管理属性和分类")的认证用户,可以向管理员个人资料注入持久的跨站脚本(XSS)有效载荷。当管理员查看自己的个人资料页面时,该载荷将执行,从而允许攻击者劫持管理员会话、执行管理操作并完全接管账户。
此漏洞是两个独立缺陷的组合:一个是不安全的直接对象引用(IDOR),允许任何用户查看其他用户的个人资料;另一个是访问控制绕过漏洞,允许具有通用编辑权限的用户修改其他用户的记录属性。
### 细节
攻击链如下:
1. **`PersonView.php` 中的 IDOR**:`PersonView.php` 开头没有授权检查。任何认证用户都可以查看其他任何用户的个人资料页面(例如,`PersonView.php?PersonID=1` 对应管理员),只需知道其 ID 即可。
2. **`PropertyAssign.php` 中的访问控制绕过**:"分配新属性"功能可从其他用户的 `PersonView.php` 页面访问,并引导用户至 `PropertyAssign.php`。该脚本会正确检查用户是否具备通用的 `isEditRecordsEnabled()` 权限,但**未执行对象级别的授权检查**,以验证用户是否被允许编辑 URL 中传递的特定 `PersonID`。这使得具有"编辑记录"权限的用户可以修改系统中任何人的属性,包括管理员。
3. **存储型 XSS 向量**:攻击者可以利用这两个缺陷,导航至管理员个人资料页面,并使用"分配新属性"表单将恶意 XSS 有效载荷保存至管理员记录中。文本类型属性的 `Value` 字段在输入时未经过适当净化(仅应用了 `strip_tags`,该方法无法移除事件处理属性),在输出时也未进行编码,导致存储型 XSS。
* **输入处理(`src/PropertyAssign.php`)**:仅应用 `strip_tags()` 后保存属性值,这允许 `onerror` 等事件处理属性。
* **易受攻击的输出汇(`src/PersonView.php`)**:将存储的属性值直接渲染到 HTML 中,未使用 `htmlspecialchars()`,导致有效载荷执行。
// src/PersonView.php, line ~722
```html
= $r2p_Value ?> // 易受攻击:原始输出
```
### 概念验证(PoC)
本概念验证展示了具备特定中级权限的用户如何将存储型 XSS 有效载荷注入主管理员个人资料。
**前提条件:**
* 攻击者拥有一个启用了以下两个特定权限的账户:
1. `编辑记录`
2. `管理属性和分类`
**场景:**
1. **以攻击者身份登录:** 使用具备上述权限的账户登录。
2. **定位管理员目标:** 直接导航至管理员个人资料页面,通常为 `PersonID=1`。
http://localhost:8101/PersonView.php?PersonID=1
(由于 `PersonView.php` 中的 IDOR,访问被允许。)
3. **注入有效载荷:**
* 在管理员个人资料页面,向下滚动至 **已分配属性** 选项卡。
* 在"分配新属性"表单中,选择文本类型的属性(例如"测试")。(由于"编辑记录"权限,该表单可见。)
* 在弹出的 **Value** 文本区域中,输入以下 XSS 有效载荷:
`
`
* 点击"分配"按钮。有效载荷现已存储在管理员记录中。(由于 `PropertyAssign.php` 中的访问控制绕过,分配得以实现。)
4. **触发攻击:**
* 攻击者现在可以等待管理员登录并查看其个人资料。
* 当管理员导航至自己的个人资料页面(`PersonView.php?PersonID=1`)时,有效载荷将立即执行,弹出警告框。攻击者可使用更复杂的有效载荷来窃取管理员的会话 Cookie。
### 影响
这是一个严重的权限提升漏洞。它允许具备特定提升(但非管理员)权限的用户完全控制管理员账户。通过劫持管理员会话,攻击者可以执行管理员可进行的任何操作,包括创建新管理员账户、删除数据,并可能与其他漏洞结合,实现服务器完全沦陷。
### 归属
报告者:Łukasz Rybak
## 参考
- https://github.com/ChurchCRM/CRM/security/advisories/GHSA-fcw7-mmfh-7vjm
## 免责声明
本 CVE 遵循协调漏洞披露(CVD)实践进行负责任披露。此处提供的信息仅用于教育和防御目的。
2. **定位管理员目标:** 直接导航至管理员个人资料页面,通常为 `PersonID=1`。
http://localhost:8101/PersonView.php?PersonID=1
(由于 `PersonView.php` 中的 IDOR,访问被允许。)
3. **注入有效载荷:**
* 在管理员个人资料页面,向下滚动至 **已分配属性** 选项卡。
* 在"分配新属性"表单中,选择文本类型的属性(例如"测试")。(由于"编辑记录"权限,该表单可见。)
* 在弹出的 **Value** 文本区域中,输入以下 XSS 有效载荷:
`
4. **触发攻击:**
* 攻击者现在可以等待管理员登录并查看其个人资料。
* 当管理员导航至自己的个人资料页面(`PersonView.php?PersonID=1`)时,有效载荷将立即执行,弹出警告框。攻击者可使用更复杂的有效载荷来窃取管理员的会话 Cookie。
### 影响
这是一个严重的权限提升漏洞。它允许具备特定提升(但非管理员)权限的用户完全控制管理员账户。通过劫持管理员会话,攻击者可以执行管理员可进行的任何操作,包括创建新管理员账户、删除数据,并可能与其他漏洞结合,实现服务器完全沦陷。
### 归属
报告者:Łukasz Rybak
## 参考
- https://github.com/ChurchCRM/CRM/security/advisories/GHSA-fcw7-mmfh-7vjm
## 免责声明
本 CVE 遵循协调漏洞披露(CVD)实践进行负责任披露。此处提供的信息仅用于教育和防御目的。标签:Broken Access Control, ChurchCRM, CISA项目, CVE-2025-67875, IDOR, Modbus, OpenVAS, PHP, Session Hijacking, Web安全, XSS, 不安全的直接对象引用, 会话劫持, 协议分析, 多模态安全, 存储型XSS, 安全漏洞, 数据可视化, 无线安全, 权限提升, 漏洞, 漏洞情报, 特权提升, 管理员劫持, 自动化分析, 自动化部署, 蓝队分析, 访问控制绕过, 足迹分析, 跨站脚本