| 字段 | 详情 |
|---|---|
| CVE ID | CVE-2025-68400 |
| 严重性 | CRITICAL |
| 安全公告 | 查看公告 |
| 发现者 | Lukasz Rybak |
ChurchCRM 6.3.0 中的遗留端点 /Reports/ConfirmReportEmail.php 存在一个严重的SQL注入漏洞。虽然该功能已从 UI 中移除,但该文件仍然部署在服务器上,并可直接通过 URL 访问。这是一个典型的死代码但可访问的情况。任何经过身份验证的用户——包括没有分配任何权限的用户——都可以通过 familyId 参数利用 SQL 注入。
问题位于:
src/Reports/ConfirmReportEmail.php
漏洞代码(第 82-83 行):
if (InputUtils::legacyFilterInput($_GET['familyId'], 'int')) {
$sSubQuery = ' and fam_id in (' . $_GET['familyId'] . ') ';
}
为什么存在漏洞:
legacyFilterInput() 的返回值被完全忽略。$_GET['familyId'] 值被直接拼接到 SQL 查询中。已废弃但仍可访问的端点:
/Reports/ConfirmReportEmail.php?familyId=<value>
正常行为:
302 Redirect → /v2/family/<id>&PDFEmailed=
包含 ) 或 -- 的恶意负载会破坏重定向逻辑并执行有漏洞的 SQL。
即使是一个拥有零权限的用户也可以利用此漏洞。
一个 SLEEP(5) 负载会可靠地延迟响应,证明 SQL 被执行。
已认证用户访问:
http://localhost:8101/Reports/ConfirmReportEmail.php?familyId=1)%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(5)))a)%20--%20-
观察结果:
sqlmap 确认:
此 CVE 已按照协调漏洞披露实践负责任地披露。此处提供的信息仅用于教育和防御目的。